I've been having a good time listening to the StackOverflow podcasts. Joel's a great curmudgeon and Atwood is as opinionated as ever. An ongoing disagreement between the two has been the usefulness of knowing C. Joel's adamant about its importance and Atwood thinks there is much else a developer can spend their time in understanding.
Eric Sink has since chimed in with a post called C and Morse Code wherein he reveals his cards: like Joel, he thinks it's of vital importance if you want to reach past mediocrity:
I'm not going to take a black-and-white stance on this. I won't go so far as to say that every developer must learn C. I've met lots of developers without C experience who are successful and making positive contributions to important software projects.
Furthermore, I'll admit that knowing C is not a magic solution to poor skills. A lousy developer who happens to know C is simply better equipped to hurt himself or somebody nearby.
However, I can say these two things:
- All of the truly extraordinary developers I know are people who really understand the kind of low-level details that C forces you to know.
- Every programmer without C experience has a clear path of personal development: Learn C. Get some real experience using C to write a serious piece of software. Even if you never use it again, you'll be a better programmer when you're done.
My relationship with C is tenuous at best. I spent a few months some years ago delving into it (and C++) seriously - I'm curious to go back and find some of that code but it was a few machines ago*. I remember during that time I'd work on little toy programs (mostly an implementation of some algorithm) in C and then have the need for a utility and write it in something else. It would be interesting to take Eric up on his second point of writing a "serious piece of software" using the language. One interesting angle on this is how one would keep said "serious piece of software" strictly in the realm of C, without venturing too much into the world of C++ and object orientation done poorly.
So brainstorm question: what's something nice and useful that could be implemented strictly within C? (That one might not yawn and think *gosh* that would take 1 minute to do in Python).
*Great memories of Me, Markus, and bcc32 in a coffee house somewhere in southern California. Too far gone are those days...