A Scripter at Heart
codinghorror.com
codinghorror.com
Obviously, I disagree with the "C programmers have to be masochists" view of the article. C is powerful and can be cruel and unforgiving, but once you get it (and it's not that hard), you can appreciate how powerful it really is.
As for the pain of going from interactive-prompt-nirvana to edit-compile-link-run-wonderwtf-reboot hell, it took me years to learn C++ because I was introduced to OOP in Smalltalk and then wrote some stuff in Actor. C++ most definitely, did not look like a step in the right direction. In fact, it wasn't.
For years, I used the following tagline in my BBS messages:
"Hello World in Assembly: 30 bytes, Hello World in Turbo Pascal: 10K, Hello World in C: STACK-OVERFLOW: SYSTEM HALTED"
In 10 years "they" will still be saying learn C because C is nothing but a glorified assembly language with some syntactic sugar. C shows you how your computer works. There is very little to gain by using assembly over C (with the special exception of specialized instruction sets, like SIMD).
Until the computer changes so fundamentally that a simple imperative language no longer matches the hardware, or some other simple imperative language does a better job (unlikely), learning C will always be good advice.
Maybe I just didn't dabble with C enough before dabbling in assembly, but that was where I really learned about the stack, registers, variable allocation and function calls. With C I mostly just thought in terms of perl and ignored the implementation details. Static typing, malloc/free, strings-as-arrays and arrays-as-pointers were new to me, but I don't feel like I really understood what was going on at that point.
It's possible to be a solid C programmer (ie clear understanding of pointers, stack vs. heap, etc) while still not having the depth of knowledge one gets from understanding at least some assembly. When I first learned about the concept of stack overflows (ie as explained in Smashing The Stack For Fun And Profit: http://insecure.org/stf/smashstack.html) my understanding of C really expanded, mostly through the added insight provided by thinking about C in the context of assembly.
Learning assembly does teach you quite a bit. I think that at some point every programmer would benefit greatly from knowing (an) assembly language and C.
Is it absolutely essential? (Depending on what exactly you are doing) No. Is it very useful? Definitely.
For that matter, an understanding of digital electronics, sufficient to understand how the CPU , ALU, memory caches etc work, can be very useful as well.
My 2 cents.
May it never come to pass...
"The horse rode past the barn fell."
When you tell someone to do something, do you lament the fact that you can't tell them in a programming language, detailing every single step precisely? When I talk about programming in English, it is not the kind of "programming" that you're used to. It's obviously subject to all the ambiguities and interpretation problems that humans have, yet somehow we manage to get by pretty well with it.
I didn't think I would have to actually explain that. Do you want me to put it to you in a programming language?
Personally, I think the importance of C will remain, as it's basically portable assembly. But time will tell.
Even C doesn't teach you about cache behavior, register spilling, calling conventions, and so on.
Plus, it helps to know assembly massively when you're in the embedded domain, or whenever you're close to the metal.
I would hardly call it an "epic". To the contrary people I spoke with who saw his state of the onion keynote that year said that unlike his prior presentations (which were often entertaining) that one was a disappointment especially considering the state of Perl at the time.
So-called scripting languages were discussed a decade or so ago.