This post was first published on CoderHood as The Future of Software-Making, 50 to 100 Years From Now. CoderHood is a blog dedicated to the human dimension of software engineering.
Building software is still in its infancy. Today we write a line of code at the time to describe what we believe a machine should do to resolve a problem. Developers spend most of their time sorting out minute details of behaviors. They do so to ensure that a task is executed precisely in a well-defined and understood way.
The unfortunate reality is that this method doesn't scale well. The world needs software, but today's software creation process is slow and complex. We've seen this in the past with other forms of art and craft.
For example, think about portrait-making. It used to be a profession held by artists who would study and practice for many years. Portrait-making requires skills, passion, precision and the drive to persevere. Every pencil mark or brush stroke needs to be applied methodically to form a complete and realistic image. The results vary depending on the skills and experience of the artist.
Photography replaced most realistic visual arts because it captures reality entirely with one click of a button, dropping the cost of a portrait to almost zero. Photography used to be complicated at first but became easier and easier. Cameras became smaller and more automatic. Today, anyone can create a decent portrait in seconds merely using a phone. Some portraits are better than others, but the craft is accessible to most people.
Coding is the software-making stage equivalent to the painting stage for portrait-making. Every detail requires human attention and deliberate thought. While computer languages, frameworks, and libraries are continually improving the situation, we are still far from the point where humans can focus all of their attention to ideation and design of the software.
A coder increments a variable inside a loop, and a painter grinds pigment to make a batch of Giallo di Siena. A software engineer looks at event logs to detect the cause of a bug, and a painter stares at an unfinished portrait to understand why it doesn't seem right. A developer upgrades a development environment, and a painter builds a better easel.
That is why many people equate building software to an art. I disagree with such a label because I believe that coding is a craft, not an art. The reason is simple. Coding is not something we do to express a sentiment or emotion. It is something we do to describe a particular set of behaviors and actions that can be applied to resolve a problem.
Similarly, I see surgery as a craft, while poetry is an art. I also see carpentry and cabinet-making as crafts, while sculpture is an art. The difference is in the intent; that intent dictates the way an activity is approached and how it is carried forward. If the purpose is to transmit emotion, then the activity is an art. If the intent is to build something that has a practical function, even if it happens to be aesthetically pleasing, then the activity is a craft.
Software making is in its early stages, and coding is a primitive tool. I don't have a glass ball, but I am convinced that in the future things will be very different.
There are many possible futures. In one of them, 50 to 100 years from now, I envision that coding will become "Software Shaping" and will transition from the current detailed and methodical description of actions to capturing and refining an application in terms of more expressive shaping of behaviors. Software Engineers will be called "Software Shapers," and will be more higher-level thinkers than craftsmen. Code will be called "logic artifact."
In this future, the need to do boilerplate and repetitive work will disappear entirely. Interfaces, behaviors, and algorithms will be created with a quick and rough assembling of components followed by a set of fine adjustments. Software shapers will have access to libraries of archetypes that they will link together to describe UI's, behaviors and data-flow manipulations.
The initial rough creation of a program will require finding the right archetypes and linking them together using a visual interface existing in an AR space. The details of the links between the components will not be described with code but will be generated by an ever increasingly smart AI which will fill in the blanks under the guidance of the shaper. Such guidance will be given using natural language, and refined providing examples and expressive descriptions. The AI will learn to interpret the intent of a human, and will generate the necessary logic. Shaping applications will resemble brainstorming between a human and a machine.
Applications will be envisioned, shaped and refined by the shapers. Once launched, applications will evolve and improve automatically as people or AIs will use them. Human shapers will be involved with the evolution of the applications. Their goal will be maintaining a vision and ethical boundaries. They'll be tasked with correcting any undesirable trends and redirecting application evolution toward desirable directions. However, most of the maintenance and optimizations will be automatic, freeing time for shapers to work on new visions requiring human creativity and direction.
In this future, archetypes will be modules running in something similar to today's containers and built with whatever technology is best suited for it. They will run independently, exposing inputs and outputs that will be linkable with other archetypes' inputs and outputs. Each component will run in a virtualized computation universe --- similar to a computing cloud --- that will be globally accessible to anyone.
The AI aiding the application shaping process will also shape itself over time and will improve similarly to all other applications running in the computation universe. For human shapers, programming will look like having intellectual discussions about intent and behavior of an application. Shapers will ask questions, describe the outcome, and refine the automatically generated logic artifact. The interactions between shapers and machines will be about the "what" and "why," not so much about the "how."
Since the development AI will continue improving itself, most humans will not understand all the details of how it works. That is not different from how humans today don't understand the details of how life works. It will be possible to ask the AI to explain its patterns or to document itself, but nobody will have written every instruction or explicitly crafted every algorithm. It will be an ever-changing logic organism, evolving faster than humans would be able to keep track of. Even the hardware it runs on will evolve more quickly than we can understand, resembling more and more an independent and evolving organism.
The ability of humans to pay attention to the high-level behaviors, intent, and goals of the AI, will keep us in control; the constant redirection and adjustment of the AI evolution will maintain us dominant and in charge.
Every once in a while there will be a scare similar to a modern disease or pestilence. The AI in control of shaping software might take rogue or unclear directions. In that case, humans will have to intervene to keep things in balance.
Eventually, maintaining the balance between controlling the AI and letting the AI do its job at full speed to maximize benefits for carbon-based life will be a major occupation for humans. We will act as zookeepers, or gardeners, always taming, pruning and cleaning up unwanted growths.
We are far from this possible future, but we know that things will change. How they change is up to us. While the details are impossible to predict, we can look at early indicators. AI is making fast strides forward and continues to improve. Computers are getting faster and cheaper. AR is becoming more accessible and will keep evolving. Cloud computing is becoming the way most software runs on the web, and decentralization and virtualization of distributed systems are going to continue.
Based on the trends, we can start envisioning what we want the future of software-making to look like and push toward that vision. Thirty years ago we wrote most code in C, and we had to manage memory with malloc and free. Today memory management is mostly automatic, and the problems engineers resolve are much higher level. The trend won't stop, and I believe that AI-aided software making will change the way we work in the software industry.
I'd love to know what you think about the life of a software engineer 50 to 100 years from now. How will it change? What will it look like? I have painted a picture in this article, one of many that I have in mind. There are many possibilities, and I'd like to ask you to let your imagination go and envision the future you want so that we can start working toward it. There is no innovation without vision, and there is no vision without imagination.