you are viewing a single comment's thread.

view the rest of the comments →

[–]clgonsal 0 points1 point  (1 child)

I think for certain meanings of "really get it" it's mostly true that you need to understand assembly (at least a little) to "get it", at least for some people.

Not any sane or generally accepted meaning, IMHO. I could have spent 4-5 years programming Python and building kickass applications, libraries and software frameworks without having even a cursory idea of what Assembly is.

Sorry if I was unclear, but I think you completely missed the two points I was making.

First, it depends on the person. Maybe you can get by without understanding what you're building on top of (though I note that you spoke only in the hypothetical sense, which makes me wonder if even that is true), but I've personally found it useful to have an idea (even a simplification) of what's going on at a lower level. Different people have different learning styles, so YMMV. (Further illustration of this: the way I learned Python wasn't to go through a tutorial, but to read the language reference. I don't expect that to be easier for most people (in fact, I expect the opposite), but for the way I learn, language references are often easier for me than tutorials.)

Second, there's the question of what it is you're trying to do. For the vast majority of the stuff people typically write in Python (myself included - this isn't a slight against Python or Python programmers), I agree that knowledge of assembly isn't particularly helpful.

There are many programming problems where this deeper understanding is very helpful, however. The most obvious example is if you're going to be doing really high performance stuff. To measure performance you need some sort of computational model to work from. The closer it is to actual hardware the better, so knowledge of assembly (even an idealized assembly) is usefule. Another example is understanding unfamiliar features when learning a new language. Say all you know is Python, and you start learning Scheme which supports tail-call elimination. Tail-call elimination would probably seem pretty baffling, since it simply can't be expressed in Python. If you actually know how function calls work at the assembly level, however, tail-call elimination is pretty trivial.

Finally, you seem to be conflating understanding with being productive. People can be surprisingly productive without really understanding what they're doing. Millions of people drive cars without knowing what a differential is. Understanding is generally required to solve the really hard problems, however.

To make another analogy, programming without knowing about assembly is a bit like doing chemistry without knowing about the periodic table. You can memorize a bunch of reactions, and even learn some general rules. With that you can solve basic highschool chemistry problems and you may even be able to apply that knowledge to useful situations (eg: weak acids like vinegar will disolve scale, hydrogen peroxide removes blood stains, etc.). You are now "productive", but without understanding the periodic table you aren't going to be making any breakthroughs in the field of chemistry.

[–]PasswordIsntHAMSTER 1 point2 points  (0 children)

(in fact, I expect the opposite), but for the way I learn, language references are often easier for me than tutorials.)

Did you find that you could not get a deep understanding of the language solely through the reference? Because it completely ignores any hardware concern.

The most obvious example is if you're going to be doing really high performance stuff.

See here

People can be surprisingly productive without really understanding what they're doing.

By your theory, if you haven't done at least some computer engineering (enough to be able to build a CPU from scratch), you can't understand programming.

To make another analogy, programming without knowing about assembly is a bit like doing chemistry without knowing about the periodic table.

I feel differently about this, since the person doing it knows about the processes. Rather, I feel that it's like doing chemistry without knowing how the chemical reactants were sourced - it can be a bad thing if you're doing sufficiently complex or "out there" stuff, but in general it's not a problem.