Software Engineering slides |

Questions we want to answer

  • 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
    1. Applies traditional techniques to produce goods and provide services
    2. Examples: Cabinet making, Sewing, Teaching?
  • Science
    1. Aims to gather, verify and document knowledge and insight through research
    2. Examples: Physics, Biology, Computer Science
  • Engineering
    1. 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
    1. The creative application of scientific principles to design or develop structures, machines
    2. To construct or operate the same with full cognizance of their design;
    3. To forecast their behavior under specific operating conditions;
    4. 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.

Experimental Computer Science?

  • We have many many beliefs (or debates) (in engineering and computer science) which are not based on evidence
  • So there is certainly experimental computer science to answer, for example:
    1. Are static or dynamic types more productive?
    2. Are 2 or 4 week sprints better?
    3. Is deeply commented code more maintainable?
    4. Should array indexes start at 0 or 1?
    5. Does multiple-inheritance reduce programmer productivity?
    6. Is there a 10:1 productivity ratio between the best and worse programmers? (The ‘10x’ programmer)

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 Software Engineering Rules of Thumb