When I graduated from university I wasn’t naive enough to think that I was a complete Software Engineer, however, I didn’t appreciate just how little I really knew about programming in the real world. I can only liken it to learning to drive. Driving instructors don’t teach you to drive, they teach you to be able to make a car go and stop, you don’t learn to drive until after you get your license. Programming is the same, when I left university I knew how to write code that would compile and run, but the code I was producing was poorly commented, inefficient, wordy (i.e. not dry) and…well, you get the idea. The best example I can think of is the postfix/prefix increment operators. When I joined my first company, every for-loop that I had ever seen, or written, had always used “i++”. The guys at work were quick to challenge this, they asked why I used “i++” instead of “++i” – considering the latter is at least as efficient as the former*. My answer was that I didn’t know and had never really considered it. Two and a bit years later and I am now just as passionate about keeping code dry as the people who challenged me at work.
Some companies will not hire graduates for the simple reason that they will have to put them through the same initiation that I experienced. This seems a tad unfair on the graduates, even if it is a sensible decision to take. I think that software companies should have a greater part to play in shaping graduates, because at the moment things are tailored to the universities e.g. the incredibly verbose commenting style that makes it easier to grade a squillion reports in a couple of hours. Chris, if aworka doesn’t work out, maybe you can start a course called “Programming in the real world”!
*Some compilers will evaluate “i++” to the same as “++i” if the return value is not used.