Course Overview
All software that is used in the real world was created under real constraints. In this course students learn how to engage in the messy-guessy process of specing, planning, designing, and building a software product that they intend to deploy in the wild.
Classes follow a workshop format. We begin with a short lecture to unpack the readings, then switch to hands-on activities and group project work. The structure of the course simulates the experience of a junior software engineer and teaches students to learn on the job through contemporary readings and assignments, the largest of which is a 6-week group project to build a functional web application in Ruby on Rails. Students have full control over the design decisions, but they must impress one another with their choices as the semester culminates in a final demo day where teams vie to have their software voted Most Valuable Minimum Viable Product.
Learning Goals
- Compare engineering methodologies
- Practice rapid prototyping & agile development
- Model complex system architectures
- Design software that satisfies needs & constraints
- Build & maintain a real system
Schedule
Welcome & Introduction
What is Software Engineering (SE)?
Product Management & Communication
Why is SE Challenging?
Ian Sommerville.
(2021).
Engineering Software Products Chap. 1: Software Products.
Ian Sommerville.
(2021).
Engineering Software Products Appx. 1: Product & System Engineering Processes.
Frederick Brooks.
(1975).
Mythical Man-Month Chap. 2: The Mythical Man-Month.
Frederick Brooks.
(1975).
Mythical Man-Month Chap. 5, 7, 9, 10, 11, 12, 13, or 14.
Hello Stack (Due: Sep 13)
Agile Methods & Feature Driven Development
How Do Modern SE Teams Operate?
Ian Sommerville.
(2021).
Engineering Software Products Chap. 2: Agile Software Engineering.
Ian Sommerville.
(2021).
Engineering Software Products Chap. 3: Features, Scenarios, and Stories.
Architecture & Abstraction
How Do We Model Complex Systems?
Ian Sommerville.
(2021).
Engineering Software Products Chap. 4: Software Architecture.
Fabiano Dalpiaz, Xavier Franch, and Jennifer Horkoff.
(2016).
iStar 2.0 Language Guide.
User-Centered Design
How Do We Decide What to Build?
Don Norman.
(2013).
The Design of Everyday Things Chap. 1: The Psychopathology of Everyday Things.
Don Norman.
(2013).
The Design of Everyday Things Chap. 6: Design Thinking.
Group Contract & Competitor Analysis (Due: Oct 4)
Patterns & Services
How Do We Build Elegantly for Complexity?
Ian Sommerville.
(2021).
Engineering Software Products Chap. 6: Microservices Architecture.
Ian Sommerville.
(2021).
Engineering Software Products Chap. 8: Reliable Programming.
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.
(1995).
Design Patterns Chap. 1: Introduction.
Risk Mitigation
How Do We Engineer Robust Systems?
Project Plan (Due: Oct 25)
Programming Ethics
How Do We Engineer Just Systems?
Don Norman.
(2013).
The Design of Everyday Things Chap. 5: Human Error? No, Bad Design.
Gonzalo Génova, M. Rosario González, and Anabel Fraga.
(2006).
Ethical Responsibility of the Software Engineer.
Colin M. Gray, Yubo Kou, Bryan Battles, Joseph Hoggatt, and Austin L. Toombs.
(2018).
The Dark (Patterns) Side of UX Design.
Tools & Techniques
How Do We Collaborate On Code?
Ian Sommerville.
(2021).
Engineering Software Products Chap. 10: DevOps & Code Management.
(Re)Assessing Challenges
Why Does This Feel So Hard?
Prototype (Due: Nov 15)
Deployment & Evaluation
When Do We Launch? What Do We Do After?
Jargon Report (Due: Nov 23)
Student-Led Topic
What Do We Want to Learn More About?
Demo Day
Final Presentations
Minimum Viable Product (Due: Dec 6)