Someone recently complained to me about how he thought offshore outsourcing of software development was causing jobs to go away in the USA. I don't think that's true but here's what may have a bigger impact on programming jobs – automation.
Developing complex software systems with a team of programmers is hard. And the re-engineering of legacy applications is even harder. The promise of automation is that you can somehow specify the software's functionality in a higher-level language and/or diagram and generate the source code automatically.
Automated testing can then verify that the correct functionality is achieved. Enhancements and new features are made at the higher-level language and a fresh version of the application's code is generated - removing the requirement for hand-crafting the code.
Despite a history of automation appearing to threaten jobs, it can actually enable jobs for programmers, especially in North America. That's because automation can make American programmers so productive that their higher hourly cost is bearable since they are more productive than offshore programmers at a lower hourly cost. Automation also enables programming projects that were previously cost prohibitive and impractical.
Earlier in my career as a programmer I saw automation come and go several times without much impact. First was the Computer-Aided Software Engineering (CASE) craze in the late-1980s. The idea was to visually create diagrams on a computer screen that could then generate the source code of the application. The emphasis on generating business logic with CASE tools side-stepped the need for good user interface design. And in those days, we were just making the transition from command line interfaces to graphical user interfaces (GUI).
Then I used a tool for the visual drawing of user interfaces for Sun workstations that used X-Windows and Motif. This helped create a nice looking GUI by generating code but it took time for the tools to support new GUI widgets and of course some of the tools had bugs.
The flaws in the first generation of tools were not of vision but implementation. They were difficult to customize and adapt to emerging technology. Generally software technology changed too quickly for the old tools to keep up. Concepts like agile development, separation of concerns, or aspect oriented coding were difficult or impossible to implement. The best these approaches could do was get you a running start at some functioning code and then you made manual changes to customize the code further, thereby breaking the connection with automated code generation.
Automation that addresses these shortcomings is now at hand in the form of a new generation of model-driven engineering (MDE) tools.
One exciting opportunity for the application of MDE and code generation is the automated reverse engineering of a legacy application. Automated parsing and refactoring techniques are applied to create a highly visible design model that exposes and documents the application's "as is" functionality. Once the "as is" functionality is extracted from the legacy code and rendered in an easy to understand and easy to modify model the transformation can go in several directions. First, better structured and maintainable code can be generated from the model. Even better, is you can add new functionality and features to the application model before code generation and take advantage of the improved maintainability at the same time you generate the new application.
Is it all 100% automated and untouched by human hands? No, but improvements in programmer productivity are in the range 5 to 10 times faster than a strictly manual approach and 60% to 80% less expensive as reported by a new Accelerance certified partner company that applies these tools to client projects.
This dramatic increase in productivity makes it practical to re-engineer your business-critical software applications and systems that are suffering from expensive maintainability issues and the urgent need for enhancement. And if you have a software application like this you know that no one wants to touch it at all!
So the issue is not that you will lose your programming job to automation. It's that modernization of many legacy applications is a job you really don't even want and can never even have. You won't be replaced by an offshore programmer or a team of programmers because only automation makes this kind of reengineering and modernization practical.
Solution-oriented outsourcing like this uses a combination of automation and expert software engineering talent. Contact Accelerance if you this is the kind of outsourced solution you need for your legacy application modernization challenges.