The End of the Software Developer
September 19, 2008 10:05 am insight, technologySummary
Do computer programs that write other computer programs mean the end of the software development career for humans?
Do computer programs that write other computer programs mean the end of the software development career for humans?
Twelve years ago, while I was in computer programming school, I was engaged in a debate with a not-so-knowledgeable person about the value of a career in software development. He claimed that before too long the profession would be obsolete, as computer programs would be writing computer programs, and the humans wouldn’t be necessary. (He was a medical magnet salesman; I think he was trying to convince me that his profession had more merits.)
Thankfully, I didn’t argue the point much. There would have been little point in trying to convince him anyway, but at the time I didn’t really have a strong argument against it. Circa 1996, RAD and expert systems were big buzzwords, and so it seemed at least possible that, given enough time, research, AI, and computing power, programs-to-build-programs could become reality.
A decade and a couple of computing revolutions later, this dream is looking less likely. We now know a lot more about how little we know about software development. We know how complex and chaotic it is, and we know how poorly algorithms are suited to handling those sorts of problems. We know that the best work is done in organizations that emphasize people over process.
That’s not to say that computers, algorithms and AI haven’t made some appreciable advancements in capability over the past few years. Google is the best-known example. The Roomba and it’s big-brothers SWORDS and Predator have finally brought robotic sci-fi closer to reality. There’s real progress being made on the DARPA challenges. Can software-that-writes-software be that far behind?
I’m not going to attach a timeline to that question, but I do have one insight. It came to me when listening to Stack Overflow Podcast 21 (you can read the transcript here). Jeff and Joel were discussing the role of experts in particular fields, how deep their knowledge really goes, and how applicable it is to new development. Jeff said:
…the way that I’ve characterised [software development] in the past, it’s kind of like a number in binary. Right? So you start off with a bit… which is, you know, zero or one. And then as you go from left to right, you flip all those bits, and say you have six bits. By the time you’ve flipped six unique bits, think how many combinations there are of what you’re doing. It was always amazing to me as a developer, it didn’t take very long at all to get completely off the beaten path, to where, like, virtually nobody is doing what you are doing. And it’s not like you’re doing anything weird. It’s just that you made 6 unique decisions that are all independent of each other, and software development is just kind of like that.
6 trivial changes can make 64 different possible outcomes (2 to the power of 6). What Jeff means is that no situation in software development is exactly the same as any other; the number of variables is so large that the number of outcomes is enormous.
Computers today cannot deal with that sort of complexity. They won’t be able to do so in the immediate future either. With increases in algorithm research and raw power, they might be able to do so someday. I don’t know whether or not that will happen in my lifetime.
What I do know is this: software development is probably the most complex domain in existence. That means that, if computer programs someday replace the software developer, it will be one of the last careers to be replaced. Most of the others will have long since fallen to ever-more-capable robots and algorithms. If you want something that’s future-proof, software development is probably as close as you will ever get.
September 19th, 2008 at 11:50 am
Same things were being said 12 years before your 12-years-ago, and probably 12 years before that!
My own first encounter with this was an advert for a program called “The Last One” - meaning the last program you’d ever need, as it would write all the others for you. See, for example, Whatever happened to ‘The Last One’?.
I’ve seen a few new programs since, so I guess it didn’t quite work out…
September 19th, 2008 at 1:05 pm
This is an interesting opinion regarding the matter of software developers; but I think that you are overstating their obsolescence. As technology improves it also becomes more complicated which almost necessitates the software developer. I don’t see them disappearing any time soon.
September 20th, 2008 at 2:44 am
“Programmerless programming” is a fad that never dies. It just moves on to newer forms. Plenty of 4GLs like SQL and the like are originally meant for non-programmers to use … imagine giving a business user just a SQLPLUS prompt now! Included in that mix there was CASE … a recent example from the past few years I can think of might be BPEL and ESB style tools, or for another example a number of attempts to define architectural languages that generate the system components for you off the UML or similar.
Ultimately, as each new generation of tooling comes along, it allows developers to do more powerful things. So the scale of the task increases to the point where specialists are still needed. In my view, there is a definite on-going role for for the “systems analyst” who knows how to take an vaguely-worded, incomplete, and contradictory bunch of requirements expressed in common verbal language and ask the right questions in order to break them down into simple logical components and then develop and deliver them into usable systems.
Sure, if you see yourself as a “Java Programmer” (replace Java with whatever you like there) then maybe, there’s a definite time-horizon to what you might see as your chosen profession. But if you see yourself more as simply an architect, analyst, or developer, there will always be a need for professionals who break down user’s needs and produce systems that meet those needs.
Systems that write systems? Someone has to write those systems. And until said system can attend meetings, understand natural language, as well as expressed tone and body language, resolve competing claims for priority, etc, there’ll still be a need for someone to take all that “stuff” and produce the abstraction that the systems-creation system can understand as valid input.