symbol heatxsink.com blog  ·  archive  ·  about  ·  Feed feed

Programmer vs. Software Engineer

Friday, August 11, 2006 08:25 PM

According to University of California Irvine's ICS department...

  • Software engineering may be defined as...
    • the study of software process, development principles, techniques and notations
    • the production of quality software, that is delivered on time, within budget, and adequately meets its users' needs and expectations
    • the disciplined application of engineering, scientific and mathematical principles and methods in the economical production of quality software
  • A Programmer writes a complete program.
    • a software engineer writes a software component that will be combined with components written by other software engineers to build a system
    • the component one writes may be modified by others
    • it may be used by others to build different versions of the system long after one has left the project
  • Programming is primarily a personal activity
    • Software engineering is essentially a team activity
  • Programming is just one aspect of software development
    • Large software systems must be developed similar to other engineering practices

I think my favorite part of all of this is the following...

Why is Software Development Hard?

  • However, software development is "uniquely complex"
    • The field is young and there is little consensus and few standards
    • Software is irregular, intangible, invisible
    • Software is malleable -- we can modify the product itself
    • Software construction is human-intensive
    • Software application horizons expand with hardware capabilities
    • Software problems are unprecedentedly complex
    • Software solutions require unusual rigor
    • Software has discontinuous operational nature
    • No two parts or two systems are alike
    • Scaling up the system causes a nonlinear increase in complexity

Granted, everything is in a high state of evolution at this point in time, but I believe we're witnessing the results of systems being properly developed by "software engineers" which makes their product (software) highly extensible. Then people not involved with development of those systems (programmers) can come along and benefit from the architecture that's been put in place to manipulate anything for their customer's needs.