Computers don’t retire, overreact and complain. They could in minutes get all the knowledge accumulated by other computers. They could work 24 hours without making stupid mistakes. They make more and more human jobs obsolete. It is inevitable, computers will replace programmers in many areas. Even more, if Strong AI, capable of reasoning and understanding meaning, will appear, programming as a profession will be almost eliminated (at least coding part). Customers will be able to describe their needs directly to a computer. Computer AI will be translating these specifications to machine code (and stronger AI will require less formal specifications) and relentlessly building the software system.
Does it mean that that at the some point in the future software developers will no longer be needed? It could be true, if customers could specify exactly what they need and can effectively collaborate with AI to build the system. But things are not so simple, especially with non-trivial problems and humans (assuming that customers and users will be still humans). There are three roles that software specialists could play in the future even with powerful computer programming AI.
Customers often have difficulties describing what they need, lack knowledge of how to interact with computers to get solution right. Not all of them can formulate concepts and ideas suitable for consumption by AI. Software developers could be effective partners in discovering, refining and translating customers needs for computer AI.
Many of the best human achievements are the product of intuition, irrationality and ability to go beyond rules and established theories. Coming up with novel, breakthrough and beautiful solutions is one of the most exciting parts of the software development. Indeed, effective and most useful software systems require creativity, innovation and aesthetics. Left brain thinking, purely rational and logical, is not enough for building these solutions, especially for human users. Can computers acquire these abilities, break encoded rules and become better than intuitive and creative human programmers? It is a big question.
Every system have some purpose and fits into some context. Customers will require people who understand the big picture: problem domain, emerging concepts and IT environment. People, who still understand how computers operate and what is possible and makes sense. People, who can answer ‘Why’ and ‘What’ solutions are required in addition to ‘How’ to implement them.
Present and Future
Daniel H. Pink in his excellent book A Whole New Mind writes:
“Programmers will have to master different aptitudes, relying more on creativity than competence, more on tacit knowledge than technical manuals, and more on fashioning the big picture than sweating the details.”
We’ll need to supplement our well developed high-tech abilities with high touch, which:
“involves the ability to create artistic and emotional beauty, to detect patterns and opportunities, to craft a satisfying narrative, and to combine seemingly unrelated ideas into a novel intervention. High touch involves the ability to emphasize, to understand the subtleties of human interaction, to find joy in one’s self and to elicit it in others, and to stretch beyond the quotidian, in pursuit of purpose and meaning.”
Modern trends in programming are not in the areas of enhancing sophistication of building software systems, but in making easier to manipulate and understand these systems by humans. Complexity of the modern software systems and problem domains makes software development difficult endeavor for our relatively small, delicate and easy to confuse brains. Programmers have challenges to transparently represent customers ideas in the software code and avoid complications specific to technical platforms. Effective software teams try to overcome disconnect between technical and business perspectives on the system:
- use agile practices focused on speed, business value and rapid feedback from customers
- apply Domain Driven Design and Domain Specific Languages for representing customer ideas and concepts
- develop with high level languages suited for describing programming logic closer to human language (Ruby, C#)
- write automated executable specifications for describing and testing domain logic (Fit, Test and Behavior Driven Development)
- leverage existing commercial and open source solutions to bring business value faster and concentrate on core problems instead of spending effort on secondary.
Alex Iskold in The Future of Software Development says
Equipped with a modern programming language, great libraries, and agile methods, a couple of smart guys in the garage can get things done much better and faster than an army of mediocre developers.
I believe – the future software teams will be powerful small units (similar to special forces in army) of diverse highly capable professionals. Remaining software developers will be domain experts, professional communicator and creative innovators understanding well both business and technology.
Computer Science will be attractive again and people will value profession of the software developer as prestigious and one of the most important for human civilization progress.