Software Engineering

goals: - what is software engineering? - how is it different from computer science? - why does it matter in general - how to excel as a software engineer

Making distinctions
  • From “Can practitioners neglect theory and theoreticians neglect practice?” ])
  • Craft
    • Applies traditional techniques to produce goods and provide services
    • Examples: Cabinet making, Sewing, Teaching?
  • Science
    • Aims to gather, verify and document knowledge and insight through research
    • Examples: Physics, Biology, Computer Science?
  • Engineering
    • Applies both knowledge and scientifically analyzed and justified methods to develop and produce technical products
There has always been creative tension between theory and practice:
  • “Well, it may be all right in practice, but it will never work in theory.” – Warren Buffett on how the academic community regards his investment approach
  • “In theory, there is no difference between theory and practice. But, in practice, there is.” – Jan L.A. van de Snepscheut and/or Yogi Berra
  • “In theory, the difference between theory and practice is small. In practice, the difference between theory and practice is large.”
  • “Beware of bugs in the above code; I have only proved it correct, not tried it.” – Donald Knuth
What is Software Engineering?
  • Engineering (from )
    • The creative application of scientific principles to design or develop structures, machines
    • To construct or operate the same with full cognizance of their design;
    • To forecast their behavior under specific operating conditions;
    • Respecting an intended function, economics of operation or safety to life and property
  • Software Engineering
    1. People processes required to build working, deployed, software based systems
    2. Development methodology to deal with extreme complexity
    3. Primacy of deployed systems, used in the world, having real impact on people
    4. Triad of Money, Time and Quality
How is it different from Computer Science?
  • Science (from Is Mathematics a Science?):
    1. Evidence gathered in experiments and observations.
    2. Theories about the evidence, theories that move from the particular to the general.
    3. The requirement that contradicting evidence falsify a theory.
  • Discussion: Imagine what “Experimental Computer Science” might mean?
Why does Software Engineering matter in general
  • Is it fundamentally different from “programming”? How?
  • Do you want to be a Computer Scientist or a Software Engineer?
  • Ok, but what is my degree in?
Three legs of the stool
  • Craft or Art: applies traditional techniques to produce goods and provide services
  • Science: Aims to gather, verify and document knowledge and insight through research
  • Engineering: Applies both knowledge and scientifically analyzed and justified methods to develop and produce technical products

Things I look for in a “software engineer”

  • Focus on design not just “coding”
  • Focus on longevity, maintainability, reusability, sharing (repositories, version management)
  • Focus on quality, fit and finish, and testing of all kinds at all levels
  • Focus on cost, time, schedule, delivery
  • See my own Sofware Engineering Rules of Thumb

References