icon-carat-right menu search cmu-wordmark

Why Doesn’t Anyone Program Anymore?

Presentation
This keynote presentation, delivered at ICSSP 2022, explores leveraging the quality attributes of existing systems to advance beyond programming toward a modern software process.
Publisher

Software Engineering Institute

Abstract

We make a horrible fundamental assumption in our software engineering research and engineering when we assert that the primary focus of software process is designing, creating, reviewing, and integrating code. For modern integrated development environments (IDEs) and any real systems, this is not the case. We use higher-level abstractions around the functions and processes we want to achieve, identify prior art (in open-source repositories and other existing libraries) that fills the individual needs of these abstractions, and tweak/integrate this prior art into our new software system. Thus, the most important skill of a software engineer is not programming; rather, it involves identifying existing software that matches the functionality we need and reusing and refactoring this software to the largest extent possible.

At the SEI, we focus on software solutions, artificial intelligence (AI), and cybersecurity as our three defining areas of expertise and contribution. As the development world shifts from team-oriented programming to team-oriented repurposing, we feel it is essential to understand the attributes of each of these three areas in any modern software system. Modern development processes (e.g., DevSecOps), incorporation of machine learning and other AI techniques, and assurance that the resulting system is trustworthy—all are about understanding how quality attributes combine in existing repurposed systems and how we must limit unintended consequences of using these systems. By understanding the repurposed system’s quality attributes and their possible consequences for system behavior, we can limit or avoid deploying a system that is untrustworthy, brittle, unpredictable, and unusable.

This keynote will explore options that use quality attributes of existing systems as the primary abstraction needed to move beyond programming to modern software process. The integration of machine learning and refactoring to the design of new software systems will be shown to center around the mapping of required attributes to those offered by existing systems and point to how human-machine teaming for software design may evolve.