On Software Engineering
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.