Does programming have a future? This simple question has two easy answers: yes, there will always be a need for people who can figure out how we can best use computers; but on the other hand, as time goes on, there will be less and less need for people who work at translating instructions people understand into instructions computers understand.
There are a number of reasons why the programmer-as-translator faces increasingly bleak employment prospects. For many years, our colleges and universities churned out this kind of programmer in large numbers. And once out of school, programmers found ready employment in all sizes and kinds of Canadian enterprises. Their job was to translate from system specification into correctly operating code.
It was a labour-intensive process, as we were reminded when old programs had to be upgraded to meet Y2K requirements. It was creative in much the same way that solving puzzles can be creative. The challenge was to fit the system as specified into the “box” determined by available processing power, storage capacity and connectivity. Many programmers toiled long hours to make it happen.
Automation has always been a threat to programming. First, the very arduous work of Assembler programming was replaced by programming in higher-level languages. That kind of progress has continued and today it is possible to automatically take specifications that people can understand and turn them into code the computer can execute. The technology is available, even if not yet widely used.
We’ve also got much more powerful “parts bins” of software components. Some of these parts are in the form of object-oriented libraries which address the needs of specific domains. Some of the parts come from or depend on the common off-the-shelf (COTS) systems that we all know. Some of the parts are in the form of open source code that can be freely deployed.
The amount of unique code that must be developed for a system is going down, in many cases dramatically. There is still a need to adjust and integrate the parts, but this feels much less like programming and much more like scripting. It takes place at a higher, more abstract, level. It requires a keen appreciation for the intended role of the desired system. It’s not your old programming job.
There will always be a continuing need for people to build new robust, reliable, efficient and effective software parts. Rigour and discipline will be watchwords for those employed in building these new parts. The professionals undertaking this work will have to take responsibility for the entire life cycle of the parts that are being developed, from concept through to retirement.
Just using the latest technology may not confer much business advantage, but finding new, creative ways to exploit computer technology can yield large business benefits. In order to make it happen, an organization needs a practical visionary who understands the business and understands the technology. Some of these visionaries may even write code as a way to express their vision. But it’s not your old programming job.
Coding will be almost incidental for the majority of people who continue to work in computing. Knowing the technology is important. Understanding business needs and opportunities will be of increasing importance. Being able to connect business need or opportunity with technical capabilities will be key to future success in computing.
Fabian is a senior management and systems consultant in Toronto. He can be reached at robert@fabian.ca.