Should Everybody Learn C?
May 4th, 2008Joel Spolsky says everyone should learn C. He even gives some compelling reasons. Now, don’t get me wrong, I truly respect Joel. But he’s wrong. I believe he’s using hyperbole. Let me tell you why I think he knows he’s wrong.
Abstraction is a very important part of computer science. Without the improvements and advancements in our layers of abstraction you and I wouldn’t be here today. Meaning, I wouldn’t be here typing a blog entry, and you wouldn’t be here reading it. Of course no one reads my blog posts even though we have come up with a lot of amazing abstractions and thus I am here typing them.
Without 3rd generation programming languages and TCP/IP, not to mention about a dozen other abstractions, the web wouldn’t exist. Abstractions allow us to forget the problems and challenges those who’ve gone before us have already solved. Instead we can focus on solving new problem, perhaps in domains more relevant to culture or business. To Joel’s point, sometimes the abstractions we build on break. Then if we don’t know some of the inner workings, we are hosed. But like most things in life, none of our abstractions are perfect. And they weren’t meant to be. Abstractions just have to be solid enough for us to build on top.
“Everybody should learn C.” Most superlative statements can easily be proven wrong. Notice I didn’t say all superlative statements can easily be proven wrong. Kidding aside, I am certainly not claiming that C isn’t useful to some people. Nor do I think people won’t ever cross over layers of abstractions. That’s part of the feedback cycle that improves our abstractions. However, the fact is most of us don’t realize the abstractions are there in first place. That is somewhat the point.