Find us on GitHub

Teaching basic lab skills
for research computing

Software Engineering

Building and using software with other people requires skills beyond those used when programming alone. Over the past twenty years, software engineering researchers have learned a lot about which working practices actually pay off, while practitioners have developed interesting alternatives to the "big design up front" methodologies that dominated discussion from the late 1960s to the late 1990s.

  • Empirical studies have given a firm foundation to claims about what software engineering practices are effective (while casting doubt on others).
  • Agile methodologies emphasize short feedback cycles, and are most appropriate when doing exploratory development.
  • Sturdy methodologies emphasize analysis and design, and are most appropriate when building large programs in well-understood problem domains.
  • The most important lessons in this course can be summed up in seven principles:
    1. It's all just data.
    2. Data doesn't mean anything on its own—it has to be interpreted.
    3. Programming is about creating and composing abstractions.
    4. Models are for computers, and views are for people.
    5. Paranoia makes us productive.
    6. Better algorithms are better than better hardware.
    7. The tool shapes the hand.
  1. Introduction
  2. Empirical Results
  3. Agile Development
  4. Sturdy Development
  5. Principles of Computational Thinking