There will be code 3
During the last three decades, several things about software development have changed, and several other things have not. The things that have changed are startling. The things that have not are even more startling.
What has changed? Three decades have seen a 1000 fold increase in speed, another 1000 fold increase in memory. Yet another 1000 fold decrease in size (by volume), and yet another 1000 fold decrease in power consumption. Adding up all those zeros implies that the resources we have to play with have increased by twelve orders of magnitude. Even if I have over estimated by five orders of magnitude the remaining seven are still and astounding increase.
I remember building RSX-11M on a PDP-11/60 from source. It took several hours. Nowadays I can build huge java applications in a matter of seconds. I remember that compiling small C programs required dozens of minutes. Now much larger programs compile in a eyeblink. I remember painstakingly editing assembly language on punch cards. Now I use refactorings in huge java programs without thinking about it. I remember when 10,000 lines of code was five boxes of cards that weighed 50 pounds. Now, such a program is considered trivial.
Nowadays we have tools! We have editors that compile our code while we type, and complete our thoughts for us. We have analyzers that will find code duplication in huge systems, and identify flaws and weaknesses. We have code coverage tools that will tell us each line of code that our unit tests fail to execute. We have refactoring browsers that allow us to manipulate our code with unprecedented power and convenience.
But in the face of all this massive change, this rampant growth, this almost unlimited wealth of resources, there is something that hasn’t changed much at all. Code.
Fortran, Algol, and Lisp are over fifty years old. These language are the clear progenitors of the static and dynamic languages we use today. The roots of C++, Java, and C# clearly lie in Algol and Fortan. The connection between Lisp, and Ruby, Python, and smalltalk may be less obvious, but only slightly so. Today’s modern language may be rich with features and power, but they are not 12 orders of magnitude better than their ancestors. Indeed, it’s hard to say that they are even ONE order of magnitude better.
When it comes down to it. We still write programs made out of calculations, ‘if’ statements, and ‘for’ loops. We still assign values into variables and pass arguments into functions. Programmers from 30 years ago might be surprised that we use lower case letters in our programs, but little else would startle them about the code we write.
We are like carpenters who started out using hammers and saws, and have progressed to using air-hammers and power saws. These power tools help a lot; but in the end we are still cutting wood and nailing it together. And we probably will be for the next 30 years.
Looking back we see that what we do hasn’t changed all that much. What has changed are the tools and resources we can apply to the task. Looking forward I anticipate that the current trend will continue. The tools will get better, but the code will still be code. We may see some “minor” improvements in languages and frameworks, but we will still be slinging code.
Some folks have put a great deal of hope in technologies like MDA. I don’t. The reason is that I don’t see MDA as anything more than a different kind of computer language. To be effective it will still need ‘if’ and ‘for’ statements of some kind. And ‘programmers’ will still need to write programs in that language, because details will still need to be managed. There is no language that can eliminate the programming step, because the programming step is the translation from requirements to systems irrespective of language. MDA does not change this.
Some folks have speculated that we’ll have “intelligent agents” based on some kind of AI technology, and that these agents will be able to write portions of our programs for us. The problem with this is that we already have intelligent agents that write programs for us. They are called programmers. It’s difficult to imagine a program that is able to communicate to a customer and write a program better than a human programmer.
So, for the foreseeable future I think software will remain the art of crafting code to meet the requirements of our customers.
There is something else that needs to change, however. And I believe it is changing. Our professionalism.
In some ways our “profession” has paralleled that of medicine. 300 years ago there were a few thinkers, and far too many practitioners. There were no standards, no common rituals or behaviors, no common disciplines. If you got sick you might go to a barber, or a healer. Perhaps he’d let out some blood, or ask you to wear some garlic. Over time, however, the few thinkers gained knowledge, discipline, and skill. They adopted standards and rituals. They set up a system for policing and maintaining those standards, and for training and accepting new members.
THIS is the change that I hope the next thirty years holds for software development.

Nice Post! It’s true that there’s no imaginable way (at least for me) to escape from code. No matter how you do it, once it’s getting more complex, it’s programming anyway. I think there’s a kind of perpetuum mobile of the information age in the heads of sales people today that is able to magically reduce complexity of any given problem and make it a triviality.
What I could imagine is that we just write test code or some testing rules in the future and there is a generator that writes the software that fit’s to that.
What an interesting analogy between medicine and software development.
Thinking about it a little deeper, I think the reason why Software has this lack of professionalism problem is both a blessing and a curse: accessibility.
In medicine, the accessibility is fairly limited: sooner or later there’s a limit to how many people can be involved, lopping off one another’s limbs, blood letting, etc.
But in Software, anybody with a computer can have a go.
I think that accessibility must be maintained, just as the professionalism must also come to be. The ability for anybody who wishes to create something wonderful is part of what gives Software its beauty: the limit is only the imagination of the programmer(s), and those without knowledge of boundaries often transcend them. Professionalism mustn’t stifle that creativity.
I hope that Agile will provide the links of craftsmanship that allows creativity to bloom while keeping chaos at bay.
Twelve orders of magnitude? Some of the stated advantgaes are not really additive or multiplicative. If the volume of the hardware decreases by a factor of 1000, how does it affect my program? If the power consumption decreases by a factor of 1000, how does it affect my program? As long as the data can be stored in a reasonable volume of space, and as long as the power consumption is affordable, these factors don’t matter at all.
The fact that almost everyone can afford to compute does not mean that we’ll write programs that are “x” orders of magnitude better than the ones we wrote earlier. Writing programs is still a human endeavour.
It is like saying that because CPUs are 1000 times faster and we have 1000 times as much RAM, our cars should run 1000000 times as fast as they did!
Programming is still a human activity, as you pointed out. Unless we start thinking 1000 times as fast, and increase our memory a thousand-fold, we should not expect programs to be several orders of magnitude “better”, whatever “better” means.
As for AI’s writing programs, I believe that there is work being done on genetic algorithms, etc., that may lead to it. One only has to know about the chess playing programs of today that are better than the strongest grandmaster to realize that in the not too distant future computers will be able to “think” and make decisions, and write programs.
For now, though, the human rules!