Earlier quoted context omitted.
> To really program, you need to know assembly. That's just an absurdly untrue statement.
All abstractions are leaky to some degree. There will be problems you don't understand if you don't know what's happening one layer down. This is not to say there's something wrong with being a tinkerer - but it is saying that there is a difference between a tinkerer and a professional. http://www.joelonsoftware.com/articles/LeakyAbstractions.htm... for better writing on this topic.
Being able to write slightly faster code than the next guy does not a professional make. In the vast majority of work you'll be called upon when writing applications in the real world, that will simply never matter. Real professionals know when the code is fast enough and move on to delivering real value on time for solving real business problems.
They also know there more than one way to skin a cat and if you ever do hit a wall on one approach because the abstraction leaks that much, you can just try another approach. I don't need to understand the machine at every level of abstraction down to bare hardware to be able to make the machine work well. One needs a vague idea of how an abstract machine works, one does not need the details of how this specific machine works. Knowing x86 assembly will be virtually useless on most modern VM hosted languages.
Even when you do find a bottleneck, algorithm choice is vastly more important than any fiddling you're going to do to get the compiler to generate better assembly or even hand coding it. The idea than one must know assembly to be a professional is just absurd and naive.