Will Computers Program Themselves?

With artificial intelligence, machine learning and deep learning on the top of Gartner’s hype cycle, it is easy to assume that computers will program themselves going forward and that we’ve reached the end of software engineering as a discipline. Although one might naively think that we can just feed a lot of data into a neural network and that magic will happen by itself, in reality industry-strength machine learning and deep learning solutions experience a similar set of challenges as traditional software. Ranging from versioning and traceability to organizational and process issues, the engineering challenges associated with large software systems remain present and need to be addressed.

In our work with the companies in Software Center, our research shows that software engineering in the future will be concerned with three development approaches:

  • Requirement driven development where software is built to specification in the way that software has been constructed for the last decades. Especially in cases where the system needs to meet regulatory demands or achieve parity with systems built by competitors, this type of development will be the most effective.
  • Outcome driven development where development teams receive a quantitative target to realize, such as conversion rate for part of an e-commerce website or throughput for a telecom system, and are asked to experiment with different solutions to improve the metric.
  • Data driven development where the company has a large data set available and use artificial intelligence techniques such as machine learning and deep learning to create components that use input data to act based on earlier learnings.

The challenge is that rather than treating these three approaches to development as separate, it is important to realize that the results from development need to be integrated into the same system. The result will be similar to the structure outlined in the figure below.

Figure 1. Holistic DevOps Framework

The important takeaway here is that we build systems where the various components are created by different development approaches but still are subject to continuous deployment and the continuous collection of behavioral data about the system, its users and its context. That feedback cycle can then be used to continuously improve the performance of the system and adjust it to changing circumstances.

Concluding, although one might naively expect software engineering to be reaching end of life, because of the emergence of AI/ML/DL, in practice the field will only become more important as the engineering challenges traditionally associated with software engineering only become more pressing when including additional development approaches. To me, this is good news because after more than 20 years as a software engineering professor, I am hoping for a few more decades contributing to the field …

To get more insights earlier, sign up for my mailing list at jan@janbosch.com or follow me onjanbosch.com/blog, LinkedIn (linkedin.com/in/janbosch) or Twitter (@JanBosch).

Leave a Comment