Joel posted a pair of essays about why programming is harder. Primarily, he cites the number of technologies one had to be fluent in to be a good programmer as the metric for difficulty.
Jason responds by saying that programming isn’t harder, just different. Whereas before you used to twiddle bits and move bytes, today you get to work on a higher level.
They’re both right. I think what Jason is forgetting is that most people aren’t as smart as he is. 🙂 While it may be attainable for the very cream of the development crop to become really well versed, it’s just not happening for most engineers.
I’m going to extend Jason’s analogy. He says that the jackhammer extends the shovel and makes the majority of the work more efficient, while only occasionally having to drop back to the shovel. Keep going on up the tree of increasingly more capable devices, like ditch diggers and back-hoes. Each device can do more work per time unit, but what’s the common thread? The devices are all becoming more complex, and excluding some potential users. Anybody with normal body strength can use a shovel. You require more strength and endurance to use a jackhammer. You require more agility to use a ditch digger. You require more intelligence to use a back-hoe.
Now imagine that, instead of one tool getting progressively more efficient, you pile on top that one must starting using multiple tools at once. First two, then three, then five, then twenty tools simultaneously. I think that pretty much sums up the way development has gone since I’ve been doing it (over the last 20 years or so).
In the 80s, all I needed to know were the BIOS and DOS interrupt calls. I had a slim little book that listed them all, and that was the only book I needed on a daily basis to do development. Today, I need to know the .NET class libraries, which cover subjects like security, networking, reflection, data access, and on and on. I have to agree with Joel: the work is getting to the point where very few people are capable of doing it well, all the time. The gap between the highly capable and the average is getting wider, quickly.
The good news is that a very few highly talented people can have amazing productivity because of these advances. If you’re one of those people (as I expect Jason is), then you can do whatever you want. The only difficulty is convincing the interviewer that you’re one of those types of people, if you’re going to work for someone else.
The company I’m helping to start is an example of this. With 3 of us full time and 1 part time, we’re making production quality software for the enterprise. One thing I’m sure of is that we couldn’t being doing it with any 4 random software developers.