Programmers tend to be aware of the economic issues that the world will face when computers learn to do more of the jobs that many humans do, like driving cabs and flipping patties. This outcome could be a great thing if society adapts smoothly to it and potentially disastrous if it does not. Only time will tell. But programmers often see their own jobs as safe from our new robot overlords. I want to argue that, while programmers are well-suited for adapting to this shift, the tasks actually done by programmer right now on a day-to-day basis is ripe for automation.
Computers will learn to do the tasks that programmers currently stress over by studying patterns to achieve the outcomes and presenting humans with declarative options for achieving these goals, rather than forcing developers to provide a line-by-line implementation themselves. Much of programming relies on basic patterns that trained machines will be able to perform with great accuracy. Tasks like imperatively directing a machine to perform CRUD operations and concerns like object-relational-mapping techniques are implementation details that will be abstracted away by machines. In the ways that most developers no longer concern themselves with the byte-level headaches of yesterday, future programmers will work with machines that have been trained to handle the task of actually writing the code.
This will not be a sudden shift, it will be a creep. The application programming interfaces we work with will, one innovation at a time, move further from the metal, and programmers will trust decisions made by the machine. When we ask our application to “Get all the times Donald Trump tweeted about somebody being stupid”, our programming infrastructure will arbitrarily write the code necessary to complete the task with the same accuracy as if we told our co-worker to write the code. There may be miscommunications but we will let the computer know and it will “learn” from the mistake.
In addition to “lower level” tasks, there is no reason to believe that computers will not be able to also handle parts of the program that interact with humans with proficiency as well. If a developer asks their machine to “Design an interface that will allow people to access their healthcare information and adjust their coverage plan” a machine that has been trained on the task should be able to instantly provide a graphical user interface that will be optimized for the task at hand. And because machine should have no issues managing the complexities of the data passing, the interface can be infinitely customized to the unique needs of the user. Only time will tell if the machine will be annoyed with you when you ask it to make the design “pop.”
There are companies presently working to build everything I am describing.
The philosophical “purpose” of computer programs could perhaps be described as “organizing the world’s information”. That is Google’s declared mission, but I believe it more or less is the reason programs are important in general. Moving information around is why we program. Human motivations aside, programs are about that goal. As Google, the organization most poised to leverage the power of computer learning, advances this mission its computers will be given more autonomy to perform supervised tasks that we would otherwise expect a human programmer to perform. Because Google already acts as the de facto interface to the world’s information, we could see a future where Google is itself the singular machine that handles virtually all of the world’s programming needs. That is one of, obviously, infinite potential directions for computing.
The line between what humans do and what machines do is drawn on the basis of what computers are “good” at and what humans are “good” at, and that line is shifting all the time. Pattern matching is said to be an important skill that makes humans, and especially programmers, good at what they do. As machines improve their pattern matching abilities, and this is the exact “skill” that machine learning introduces to computers, it will only make sense that they handle more of the programming work. Humans will remain important for a while, I hope forever, but their roles will shift, and people who identify as professional computer programmers must be just as ready as anyone else to adapt to these changes. The finality of this tectonic shift may yet be a ways away, but the ground is already vibrating underneath our feet.