The Time and Technology is Here to Stand Software Engineering on its Head
As aninformation society we have become a software society. Software is everywhere, from our phones and our desktops, to our cars, homes and every location in between. The amount of software used worldwide is unknowable; we do not even have agreed measures to quantify its extent or value. We suspect there are at least 1 billion lines of code that have accumulated over time[1,2]. On the order of $875 billion was spent worldwide on software in 2010, of which about half was for packaged software and licenses and the rest for programmer services, consulting and outsourcing. In the U.S. alone, about 2 million people work as programmers or related.
It goes without saying that software is a very big deal.
No matter what the metrics, it is expensive to develop and maintain software. This is also true for open source, which has its own costs of ownership. Designing software faster with fewer mistakes and more re-use and robustness have clearly been emphases in computer science and the discipline of programming from its inception.
This attention has caused a myriad of schools and practices to develop over time. Some of the earlier efforts includedcomputer-aided software engineering (CASE) or Grady Booch’s (already cited in)object-oriented design (OOD). Fourth-generation languages (4GLs) andrapid application development (RAD) were popular in the 1980s and 1990s. Most recently,agile software development orextreme programming have grabbed mindshare.
Altogether, there are dozens ofsoftware development philosophies, each with its passionate advocates. These express themselves through a variety ofsoftware development methodologies that might be characterized or clustered into theprototyping orwaterfall orspiral camps.
In all instances, of course, the drivers and motivations are the same: faster development, more re-use, greater robustness, easier maintainability, and lower development costs andtotal costs of ownership.