Joel Spolsky, he of the definitive blog on software development, isn’t happy at all with the state of Computer Science education these days. And his biggest complaint is aimed at schools that teach only Java:
Instead what I’d like to claim is that Java is not, generally, a hard enough programming language that it can be used to discriminate between great programmers and mediocre programmers. It may be a fine language to work in, but that’s not today’s topic. I would even go so far as to say that the fact that Java is not hard enough is a feature, not a bug, but it does have this one problem.
I was educated as an electrical engineer, and had only the most rudimentary of computer science courses, but before I went to university I worked for a while for a computer company writing software. This was before PCs, and I learned a fews different assembly languages, some proprietary languages, and C. What I did learn, I had to learn on the street, without formal training. I was fluent in binary, hexadecimal, octal, and powers of two. So university just built on that.
I always had a desire to know what was going on under the hood, so C was perfect for me. But there are times these days when Java fits the bill nicely, especially when I want to work on more than one platform. And sometimes other programming languages are the answer.
Joel may go overboard a bit, but he has an excellent point. If you don’t the fundamentals, then you can’t make the best choice of language or structure to use in a particular situation. Sometimes C is the right language to use.
After all, somebody who has only learned Java will be unable to make use of any new platforms that appear until someone else writes a Java Virtual Machine for it. They’ll never know the joy of making hardware bend to their wishes by writing a device driver. And they’ll never be able to squeeze every last drop of power and capacity from their machine.
Then again, it is nice now and then to have Java take care of everything for you. It would be nice to forget about buffer overruns for a while.