Purpose of Software Engineering

The short answer: “Build More for Less”.

The long answer: Like all engineering, Software Engineering is a methodology to deliver a solution to a problem.

Like all good engineering, Good Software Engineering should deliver a solution that is:

  • Good enough for the given problem
  • Under given cost constraint

Cost consideration in Software Engineering can come from many places and life cycle of the project:

By Life cycle

  • Cost of development
  • Cost of operation
  • Cost of maintenance

By resource category

  • Human resource cost
  • Computing cost
  • Time/Opportunity cost
Side note:

To a for-profit company,
engineering department is usually the "Cost department",
not "Revenue department".

Guess which department gets cut first during a downturn?

Software Engineering is NOT Programming

Software Engineering is not programming as to orchestration (in the music field) is not playing an instrument.

Programming is about knowing there are N ways to solve a problem. Software engineering is about considering all factors in a given project settings, and choosing a good enough way to solve the problem.

Good Programmer is not necessarily a Good Software Engineer

Good Software Engineer is someone who understand and follows the practices, principles and even rules of a given engineering system, and could contribute under and to such system.

Good programming knowledge definitely helps, but not always required. A Good software engineer does not always know how to solve a problem, but he/she definitely should know where to look for and how to choose from.

Software Engineering is NOT Computer Science

Both are dealing with the same subject: software running on computer, that’s about all the similarity.

Software Engineering is all about delivering solutions under constraints.

Computer Science is about all problems related to software running on computer.

  • Define problems
  • Design algorithms to solve problems
  • Evaluate algorithms
  • Limit of algorithms

How to organize a team to deliver a working solution is very low on Computer Science’s priority list (if at all).

Difference between Software Engineering and Hacking (in its original positive connotation)

Hacking is about solving a problem, maybe in new, clever or faster ways.

Software Engineering is about delivering a good enough solution under constraints.