At the 1968 NATO Software Engineering Conference held in Garmisch Germany, the term “Software Crisis” was coined to describe the current state of the software development industry, where common problems included:
- Projects that ran over-budget
- Projects that ran over-time
- Software that made inefficient use of calculations and memory
- Software was of low quality
- Software that failed to meet the requirements it was developed to meet
- Projects that became unmanagable and code difficult to maintain
- Software that never finished development
The software development industry sought to counter these problems through a variety of efforts:
- The development of new programming languages with features intended to make it harder for programmers to make errors.
- The development of Integrated Development Environments (IDEs) with developer-centric tools to aid in the software development process, including syntax highlighting, interactive debuggers, and profiling tools
- The development of code repository tools like SVN and GIT
- The development and adoption of code documentation standards
- The development and adoption of program modeling languages like UML
- The use of automated testing frameworks and tools to verify expected functionality
- The adoption of software development practices that adopted ideas from other engineering disciplines
This course will seek to instill many of these ideas and approaches into your programming practice through adopting them in our everyday work. It is important to understand that unless these practices are used, the same problems that defined the software crisis continue to occur!
In fact, some software engineering experts suggest the software crisis isn’t over, pointing to recent failures like the Denver Airport Baggage System in 1995, the Ariane 5 Rocket Explosion in 1996, the German Toll Collect system canceled in 2003, the rocky healthcare.gov launch in 2013, and the massive vulnerabilities known as the Meltdown and Spectre exploits discovered in 2018.