What is Software Engineering?
The purpose of software engineering is to develop software-based systems that let customers
achieve business goals. The customer may be a hospital manager who needs patient-record
software to be used by secretaries in doctors’ offices; or, a manufacturing manager who needs
software to coordinate multiple parallel production activities that feed into a final assembly stage.
Software engineer must understand the customer’s business needs and design software to help
meet them. This task requires
- The ability to quickly learn new and diverse disciplines and business processes
- The ability to communicate with domain experts, extract an abstract model of the
problem from a stream of information provided in discipline-specific jargon, and
formulate a solution that makes sense in the context of customer’s business - The ability to design a software system that will realize the proposed solution and
gracefully evolve with the evolving business needs for many years in the future.
Software engineering is often confused with programming. Software engineering is the creative
activity of understanding the business problem, coming up with an idea for solution, and
designing the “blueprints” of the solution. Programming is the craft of implementing the given
blueprints (Figure 1). Software engineer’s focus is on understanding the interaction between
the system-to-be and its users and the environment, and designing the software-to-be based on
this understanding. Unlike this, programmer’s focus is on the program code and ensuring that the
code faithfully implements the given design. This is not a one-way process, because sometimes





























