As I may have mentioned here before, my new job involves reviewing other people’s code for security flaws. I was hired for my knowledge of Java and ColdFusion, because they get a lot of code in those languages. They also get a lot of C++ code, and since I want to contribute (and learn new stuff), I’m taking on the task of learning C++. I knew C, sort of, back in the day, but other than having a good knowledge of basic C-like syntax from programming in Perl, PHP, and Java, I had forgotten just about everything else I knew. All I can say after a couple of weeks of putting my nose to the grindstone on this is that I can see why Java took off the way it did when it was introduced. The best thing they did when they designed Java was keep the language syntax incredibly simple. C’s syntax is relatively simple, but deceptively so, and there’s nothing simple at all about C++. In any case, learning this stuff is great mental exercise, and has helped me get over my longstanding fear of pointers. (I used to be so intimidated by pointers that I was intimidated by references in Perl, but those days are long past.)
Right now I’m working my way through Bruce Eckel’s Thinking in C++. I really learned a lot from Thinking in Java, and I have found his C++ books to be well written as well. Usually I skip the exercises when I read computer books, but with C++ I’ve found that I really need to do all of them in order to have a prayer of retaining this stuff. I’m also having fun learning Make, which is like Ant, except incredibly more byzantine.
One thing that’s interesting to me is that I can completely see how C and C++ programmers get snobby about Java. With Java, it’s like you have one hand tied behind your back when compared to the flexibility of C. What I’m finding though is that when you untie that hand, it makes it really easy to flail around and hurt yourself. That said, I’m loving learning C++ because it feels like I’m bagging a 7000 meter peak.