Let me C
If I had written about it, no one would have read and pondered about it. But when Joel does it, I am sure there will be thousands who would think about it.
I got lucky some months back when I started taking interviews for my team. That experience taught me a lot of things but one thing stands out the most. Because of my
expertise or field of work, I tended to get quite a few resumes that usually had “Java” written on them. And this taught me:
a) I did not know any Java.
b) I did not understand Java.
c) People who knew Java and nothing else did not understand me at all! (God… this made asking them questions such a pain)
d) People who knew Java would usually not know anything else at all. They did not understand linked lists, pointers, data structures… nothing.
e) Given a problem, all Java people want to start writing Java code. They hated explaining the logic or the design behind the solution, because they could not.
Joel is against using OOP as a teaching aid too. And I agree. There is just too much C code in this world to be able to escape from it (some can, but not all). And learning OOP and languages that facilitate this kind of programming (such as C++, Java etc.) will make you very frustrated when you have to look at C code. And when you code in C, you will never be able to figure out compilation errors, because there’s a lot of things that is an error in C, but not in C++. I’ve seen people gazing at C code unable to debug or figure out compilation problems because all they’ve learnt is C++ in college!
I was among the lucky ones who was not taught C++/Java as his first programming language. My teachers stuck to C and functional programming. Not that I appreciated it then or understood it properly. And I regret it now. I’m still better off than a lot of people though.