I’ve heard a lot of people claim lately that artificial intelligence – or AI – will make programming jobs obsolete in the future. In fact, the book The Fuzzy and the Techie: Why the Liberal Arts Will Rule the Digital World, which I wrote about last month, makes this claim several times in arguing that today’s programming jobs will no longer be needed in the future. Furthermore, researches from Oak Ridge National Laboratory wrote a paper in December 2017 that suggests that AI, machine learning, and natural language processing will fundamentally transform programming by 2040 to the point that most code will be written by machines.
Can this really be true? Can arguable the most in-demand job today become the coal mining job of tomorrow? To paraphrase Mark Twain, “Rumors of computer programming’s future death have been greatly exaggerated.”
Computer programming will certainly change thanks to improvements in artificial intelligence, machine learning, and natural language processing. There will come a day, very likely before 2040, when we will be able to express instructions in English, or at least an abbreviated form of English, and have the computer translate that into the ones and zeros it prefers. We won’t have to employ an arcane programming language to express the instructions, or at least we won’t have to do that as much. Essentially, we be able to talk more conversationally with the computer, and it will figure out what it needs to do from there.
Programmers already benefit from elements of that trend today. Most integrated development environments (IDEs) feature code-completion tools that suggest ways to finish the statement you just started to write. These code completion tools are fairly unsophisticated today, as they simply scan through lists of the most likely keywords to follow what you have already typed on just the current line. But it is easy to imagine expanding this capability to have the computer suggest the best way to complete the current line based on the context of the code that surrounds it, or even to write the entire next line or block based on the previous block of code. These improvements to code-completion will happen very soon. From there, given a few more years, it is very likely that “programmers” will be able to express what they want in a natural language, and the computer will automatically generate much of the code it needs on its own.
But programming is not about learning a programming language. Programming is a way of thinking. Anyone can learn a language well enough to understand what someone else is saying, provided that the presenter speaks slowly enough and doesn’t get carried away with her vocabulary. Rather, the ability to articulate ideas in that language – appropriately, convincingly, creatively – is what distinguishes fluency from competency. Likewise, there are programmers who excel at slinging code, provided you give them the algorithm, the step-by-step plan for solving the problem at hand. Good programmers, however, excel at devising the algorithm in the first place, and they do that so well that translating it into an algorithm becomes trivial, even, in a for years, for a computer.
As computer systems become more and more diverse, incorporating myriad devices that communicate over heterogeneous networks speaking diverse protocols and interacting with countless other systems and services, the challenge of orchestrating all of that concurrent activity is going to grow too complicated for us mere mortals to handle. And don’t even get me started on the challenge of testing such systems. Thankfully, AI will be there to help us. Tomorrow’s programmers will envision the story; AI will help us write the sentences and verify that they’re correct.