I have been programming for almost as long as I can remember. To give you an idea of how long that is: I learned to program on a brand-spanking new ICL 1901, (and an ancient Ferranti). Quite a lot has changed in this business since then!
I love programming. I love the intellectual freedom of giving form to pure thought, and I love the intellectual challenge that comes from running up against the boundaries of even that almost-infinite space. I think I was born a programmer – if I’d lived twenty years earlier, I have no idea what I’d have done.
Most of my surviving contemporaries feel the same. Nobody got into programming in the 1970 because it was a smart career move or because it was easier than repairing TVs. We all got into it, every one of us, because we were motivated and excited by these strange and awe-inspiring and infuriating machines. There was no recognised career path (back when being a computer was a career!) We all fought our way in.
Things changed in the late 80’s. Microsoft had just commercialised the idea that neither Apple nor Xerox could make fly – they called it Windows 3 – and suddenly, everybody knew that computers were going to become much more important. (I lost count of the number of magazine articles I read called “Chips with everything”!) Windows programming was tricky – it wasn’t a bit like Basic or Fortran! – and there weren’t that many people who could hack it. Back then, if you wanted a Windows programmer, you had to marry one.
Today, the world has a voracious appetite for software, and there’s demand for more programmers than we can train people to fulfil. Sure, the programming tools have got easier, but rampant demand for code has outpaced even that. In consequence, professional programming has become little more than a trade – a not very fulfilling trade at that! I’m comfortable with that: the world is generally a better place for having software in it, no matter how pedestrian, and there’s no virtue in gratuitous hardship. What’s more, if we need this much software to be written, it makes sense to arrange matters such that mere mortals can write it!
But along the way, we’ve lost something: that joy, that excitement, that sense of pioneering a whole new – new everything, really. Even career programmers today never get to experience the excitement that drove us back then. Now, the problems are all solved, the class libraries are all written – there’s nothing left to do except crank out the next e-commerce site and revise this year’s style guide.
But, that’s not true! The problems are far from all solved! Even the most compendious class libraries can’t even scratch the surface of the possible! There’s still challenge, and excitement, and really great problems to be solved. In spite of our progressively simplifying tools, programming is still difficult and slow, and what’s expected of it (especially by non-techie managers) isn’t very forward-looking.
Software is capable of so much more than we’re doing with it. The last forty years are littered with abandoned ideas and technologies – abandoned not because there was anything wrong with them (some of them are clever and brilliant and witty) but because they didn’t make it into the currency of day-to-day programming. And that’s a shame, because some of the things which we find very difficult today are exactly the problems that those old ideas addressed themselves to. Things like, fine-grained multiple-core processing, static and inferential languages, and communications protocol reliability.
Truly, I think it’s time some of those old ideas had another chance. New ideas too, which nobody can see just now apart from their discoverers and inventors. Because programming isn’t as much fun as it used to be, and it’s still harder than we want it to be, and as a planet we’re still not keeping up with the workload.