Why do we need software engineering
After discovering what software engineering is, one may rightly ask, "For what purpose does this exist?"
Why do we need software engineering?
The process of creating software is increasingly complicated
"Adding manpower to a late software project makes it later." Fred Brooks, from "The Mythical Man-Month"
Creating quality software is hard, especially on a large scale.
- Developer onboarding - Different developers may follow different styles and standards, making their work incompatible at worst or incomprehensible to one-another at best.
- System complexity - Large-scale systems may have many dependencies and complexities which are virtually impossible to remember, maintain, and coordinate without some standardization of approach.
- Client expectations - Managing client expectations is far easier if they have an expectation of how the process of software development works and what the different phases and roles are.
Artisanal approaches do not scale well
The art of programming has taken 50 years of continual refinement to reach this stage. By the time it reached 25, the difficulties of building big software loomed so large that in the autumn of 1968 the NATO Science Committee convened some 50 top programmers, computer scientists and captains of industry to plot a course out of what had come to be known as the software crisis. Although the experts could not contrive a road map to guide the industry toward firmer ground, they did coin a name for that distant goal: software engineering, now defined formally as “the application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software.” A quarter of a century later software engineering remains a term of aspiration. -“Software’s Chronic Crisis,” in Scientific American, Sept. 1994.
The notion of a dedicated discipline for software engineering was the result of a 1968 conference dedicated ot the "software crisis". It had become clear by that time that individual artisanal approaches to software development did not scale up to large and complex software systems well at all. This realization, this conference, and the intense work in its aftermath, led to the creation of many of the tools, techniques, and processes that form the foundation of the even more robust, complex, and complex software that we see today.
Software is everywhere
Software systems are essential to the proper functioning of almost all industries:
- Scientific research
- ...virtually everything except camping in a tent... but what about making that tent?
Without software engineers to systematically maintain and create software for society, these systems, these industries, and the social fabric might crash... or at least require massive change.
"What did people do on the subway before they had smartphones to stare at?" -Anonymous
Software is abstract
The bits and bytes on the machine are not constrained by physical limitations, limits in manufacturing, or transportation logistics. This allows for the development of a wild variety of systems - virtually any idea can be turned into software with little overhead.
"You have much more freedom than you have when you're building a bridge or a building. You can pretty much make up your own rules. [...] It is artistry... at least for good programmers." -Linus Torvalds, CNN interview from 2000
This same lack of constraints allows for glutonous programmers to write code that can become increasingly complicated, deep, and difficult to maintain.
Software is not just a program
Well-designed, functional, maintainable software usually includes many artifacts besides a program:
- configuration data
- data storage resources
- supportive web sites