Here’s a quote from Bricklin on Technology regarding what colleges should teach in software engineering. (I added the bullets.)
For years we emphasized
- execution speed,
- memory constraints,
- data organization,
- flashy graphics,
and algorithms for accomplishing this all. Curricula need to also emphasize
- ease of replacement,
- security, and
The criteria in the first list are primarily mathematical. The criteria in the second list have more to do with human nature. For example, code is maintainable if it’s organized so that a person can readily understand and modify it. That’s a matter of psychology.
More projects fail due to problems with the second list. Problems with the first list tend to be localized. Problems with the second list tend to permeate a project. A clever person may have a quick fix for problems with the first list. Quick fixes are rare for problems on the second list.