After 3 Decades In Programming, Looking At the Next 3 Decades
If you had a time machine and went back from today to my first day of work as a programmer in October, 1981, and told me what I would be doing today and what things would be like in the programming world I wouldn’t have believed you.
Predicting what programming we will be doing 3 decades from now is of course fraught with difficulty. We can only speculate and extrapolate from what we know today because things that haven’t been discovered or invented yet are hard to imagine.
On my first day as a programmer at a big defense contractor I worked a bit on learning the IBM mainframe environment and a bit of JCL. Even though ARPANET existed I didn’t know anything about it. I had never heard of email which was only used by our executive’s secretaries at that point I think. I had seen a modem but didn’t have one and there was nothing to connect to anyway. Unlike most people I did have a computer at home, an Apple ][+ but had never seen a hard drive. Phones had dials and were plugged into the wall. Networking was a mainframe thing. I knew Basic, Fortran and a little APL and I had heard of a few other languages, plus I knew 6502 assembly. Open source software didn’t exist (I wasn’t aware of Unix or anything like that). Of course there was no way to contact people around the world or get help remotely or anything like that unless you used mail, as in paper, or a long distance call.
Now you show up and tell me that in 2015 I would be writing code for mobile phones and watches that could connect with people and sites all over the world without wires and ask for help anytime I needed something, use free software millions of people work on, distribute software over the same network for nothing and have more power in my hand than all the mainframes owned by my employer together, how could I believe you?
It’s like bringing Isaac Newton to today in a time machine and dropping him in an open field and telling him “you are surrounded by people talking with each other”. He’d be unable to comprehend cell phones and wireless transmissions. Even computers would befuddle him, or electric outlets or cameras.
So that’s the problem with predicting the future. Of course in 1981 there was no internet, no easy way to piggyback on the knowledge of millions of other people. But even with everything we have today predicting so far in the future is going to be a lot of random guesswork.
Imagine you went back from 1981 another 3 decades to 1951. Most people would have never even heard of a computer. Even the word programming would mean nothing as TV was still so new. In 1952 one of the pioneers of computers, Howard Aiken said “Originally one thought that if there were a half dozen large computers in this country, hidden away in research laboratories, this would take care of all requirements we had throughout the country.” Even the world of 1981 would have likely astounded him, much less today’s.
Over the many years and many lines of code in so many different languages, OSs, environments and industries that I’ve written, I am still amazed how little has change in the actual minute by minute work. I am still writing loops and if statements and variables and functions; in those days it was Fortran and today mostly Objective-C and Swift. Everything is more powerful and complicated and people demand more and more functionality. While you have the ability to leverage other people’s work, the minutiae of programming isn’t radically different.
This can’t continue. Programming is too complicated and going the way of even more complexity. We have computers many orders of magnitude faster (someone estimated that the latest Mac Pro was 50,000 times more powerful than the first Mac) yet it still takes a long time to build anything of note. Today you also have to worry about security—which wasn’t an issue in a world with few connections in 1981— and constant hardware upgrades and new OS versions and new languages that change continuously (such as Swift 2.0 and Javascript every day). The programs have enormous functionality expectations today.
Today you have to know many languages and frameworks and tools. My first application ever, a source code reformatter, running on a Harris supermini, was written in nothing more than Fortran. Today people write web apps and have to know something like Ruby, SQL, CSS, HTML5, Javascript, maybe Angular and then add in devops needs like Docker and Vagrant and of course all the pre and post processors like Less, Grunt, etc and all of this has to be known by one brain!
So will the future be just like today only 10X harder? Not unless we all get 10X bigger brains.
We have to find some way to solve the problem of ever-increasing complexity using software and hardware. There won’t be any place to do low-level programming like we still do today. Somehow we have to find ways to get the computer to build the parts of applications in a correct way and leave programmers to worry about much higher level things. Sure people have been trying to build stuff like this since I started my career without much success. But I think there has to be a way to move what we do to a higher level and give up all the control we’ve had for so long.
This all sounds like pie in the sky of course. But is it any less likely than our continued need for more and more knowledge and dealing with more and more complexity? We are limited flesh and blood that so far can’t be upgraded. Yet we do control software and hardware unimaginable in 1981; what we lack is the investment, desire and imagination necessary to find ways to make programming easier instead of just piling on more pieces.
I can imagine something like Watson targeting programming instead of medicine, cooking and winning game shows. Can we figure out how to target a software and hardware system to understand the bits and pieces of how we translate needs into code? I sure hope so, today we have so many failures and suffer what the press calls “glitches” (I hate that word) and despite our desire to not have them, they happen anyway.
It’s not just a new programming language or new process or even tons of new programmers but a new attitude towards using our existing knowledge and ability to make creating software solutions easier and more correct and less likely to be hacked. This can’t be done without computer assistance; computing is the only thing that can and will improve, unless we discover new ways to expand our brains. Maybe that’s a direction that hasn’t been discovered yet, one of those inventions we know nothing about today, like mobile internet would have been in 1981.
Possibly programming will become a higher level activity, where we direct the computer, not with loops and ifs and function, but more as a director than a creator. The tools become the writers of code, and we become the “managers” of the tool, translating what is needed into what the tool needs. I have no idea how to accomplish this miracle and of course like you I think it sounds crazy, but more likely than brain processing upgrades!
Naturally the tools and interfaces we spend so much time with today are eventually going the way of the dial phone as well. Some time in the next few decades interfaces will morph into direct connections to our brains. This sounds terrifying as well in many ways, but many of the things of today would have been 30 or 60 years ago as well. Directly interfacing with a brain means the interface could be anything you can imagine and allow for greater interaction.
I always imagined a future “office” would be something like: today I want to work in the Palace of Versailles, have a huge desk surrounded by displays inside a massive room filled with beautiful art and be able to change anything with just a thought. Maybe our actual office would be a closet or an easy chair and we work in a virtual space with unlimited control. Yeah, that’s crazy too, but not more than having a mainframe in my pocket with connections to outer Mongolia.
Perhaps quantum computing will allow for amazing things to be done in virtually no time. But I fear programming these things might exceed our ability to comprehend what to tell the quantum computer what to do. Something that can do every possible thing in almost no time can certainly destroy things just as fast. Maybe with this massive power we can find a way to harness it to do the programming as well.
Progress always moves forward unless politics moves us backward. There is no way I can imagine people writing code in vi, editing makefiles by hand and debugging in GDB in 2045. Or having to know 20 different languages and 30 open source frameworks and deal with new features every day and defend against an army of government and private hackers 24 hours a day. Maybe it will all collapse back to 1951 and all computing will vanish in a haze of war and economic disaster. I sure hope not.
Foretelling the future is always a tough business. Even science fiction writers often get it completely wrong despite the occasional brilliant guess. With all of our powerful computers, world-wide internet, and millions of genius (and some not so smart) programmers we still can’t really know where this field will take us.
I do know that the future is never like the present and 2045 will not be like today as today was nothing like 1981. Somewhere there are people with ideas that will change everything. Proverbially speaking, change is the only thing that never changes. So it is inevitable that everything we think is necessary or important today will go away; what will replace it might not be clear until it happens.
Personally I always look forward to the future as long as I have one. I did so in 1981 as well. So if you have a time machine don’t be afraid to look me up then. I might not believe you about today, but the time machine will sure be awesome!