Summary
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.
Category: insight, technology
RSS feed for comments on this post. TrackBack URL
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…
Comment by Mike Kaufman — September 19, 2008 @ 11:50 am
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.
Comment by Software Developer — September 19, 2008 @ 1:05 pm
“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.
Comment by Scot — September 20, 2008 @ 2:44 am
[...] programming” is a fad that never dies. It’s a mirage that never fades but always recedes to just out of [...]
Pingback by let x=x › Programmerless programming is just a mirage — January 17, 2009 @ 3:10 am
Programs that write other programs are called compilers. Until you can create a program that will be able to figure out everything a software user needs, despite the fact that the user themselves does not know, this is as far as we will get.
Comment by mike — January 19, 2009 @ 10:12 am
What’s interesting about producing random noise?
That’s what you’d get if you’d just flip bits randomly. And computers are actually much better at dealing with binary data then people. What computers lack is imagination and creativity. But for how long? Genetic algorithms for creating new things are getting pretty advanced.
Any hypothesis based machine learning system could be sort of considered a program writing another program. These include things like Neural Networks, Support Vector machines, Decision Trees, etc.
Programming will get easier and easier over time, and I would imagine that over the next 20 years or so it will look nothing like what we see today. There will be a few people doing exotic types of mathematics, and lots of lower-end MIS types using intuitive systems that don’t allow a lot of mistakes and figure out most of the difficult stuff.
Comment by Chad Okere — January 20, 2009 @ 12:22 am