Principles of Software Construction Objects, Design, and Concurrency


Software engineers today are less likely to design data structures and algorithms from scratch and more likely to build systems from library and framework components. In this course, students engage with concepts related to the construction of software systems at scale, building on their understanding of the basic building blocks of data structures, algorithms, program structures, and computer structures. The course covers technical topics in four areas: (1) concepts of design for complex systems, (2) object oriented programming, (3) static and dynamic analysis for programs, and (4) concurrent and distributed software. Student assignments involve engagement with complex software such as distributed massively multi-player game systems and frameworks for graphical user interaction.

After completing this course, students will:


Tu/Th 3:00 - 4:20 p.m. in DH 2315

Professor Charlie Garrod
WEH 5101
Professor Christian Kästner
kaestner (at)
WEH 5122

Both instructors have an open door policy: If either of the instructors' office doors are open and no-one else is meeting with us, we are happy to answer any course-related questions. For appointments, email the instructors.


Course Syllabus and Policies

The syllabus covers course overview and objectives, evaluation, time management, recommended books, late work policy, and collaboration policy.

Learning Goals

The learning goals describe what we want students to know or be able to do by the end of the semester. We evaluate whether learning goals have been achieved through assignments and exams.

Office Hours*

Sunday Monday Tuesday Wednesday Thursday Friday
Yada Zhai
GHC 41xx hallway
5 - 7 p.m.
Andrew Zeng
GHC 41xx hallway
6 - 8 p.m.
Yanna Wu
GHC 41xx hallway
6:30 - 8:30 p.m.
Shannon Lee
GHC 41xx hallway
8:30 - 10:30 p.m.
Charlie Garrod
WEH 5101
2:30 - 3:30 p.m.
Aniruddh Chaturvedi
GHC 41xx hallway
3:30 - 5:30 p.m.
Harry Zeng
GHC 41xx hallway
6 - 8 p.m.
Charlie Garrod
WEH 5101
11 a.m. - noon

* Subject to change. Changes will be posted on Piazza.


Date Topic Additional Notes/Code Assignments Due
Jan 13 Course introduction and organization
Jan 14 Recitation Git + Java warmup
Jan 15 Encapsulation, polymorphism, equality extra examples
Jan 21 Modules, inheritance Inheritance example code hw0 Java warmup
Jan 22 Recitation Debugging and Java Semantics
Jan 23 Inheritance (continued), typechecking, and an introduction to behavioral contracts Extra slides: difficulty of satisfying behavioral contracts with inheritance
Jan 28 Exceptional control flow, parametric polymorphism hw1 Objects and interfaces
Jan 29 Recitation Object equality, self-documenting code, refactoring
Jan 30 Specifications
Feb 4 Testing (unit testing, coverage, build and test automation) hw2 Inheritance
Feb 5 Recitation Unit testing, build automation, continuous integration++
Feb 6 Bug reporting, verification, static analysis
Feb 11 Introduction to object-oriented design Extra slides: UML hw3 Testing and continuous integration
Feb 12 Recitation Behavioral subtypes and static analysis
Feb 13 Midterm exam 1 DON'T PANIC
Feb 18 Object-oriented analysis and Introduction to design patterns
Feb 19 Recitation GRASP + Design patterns
Feb 20 Design goals
Feb 25 Assigning responsibilities Extra slides: Design to implementation hw4a Design
Feb 26 Recitation Intro to GUIs
Feb 27 Design case study: GUIs
Mar 4 Design case study: Java Collections
Mar 5 Recitation GUIs++
Mar 6 Design case study: Stream I/O
Mar 11 Spring Break — No lecture
Mar 12 Spring Break — No recitation
Mar 13 Spring Break — No lecture
Mar 18 Design for reuse: Libraries & frameworks hw4b Design & implementation
Mar 19 Recitation Design pattern mining
Mar 20 Design for reuse: Libraries & frameworks (continued)
Mar 25 Concurrency (part 1) Sample concurrency code hw4c GUI implementation
Mar 26 Recitation Frameworks
Mar 27 Midterm exam 2 MOSTLY HARMLESS
Apr 1 Concurrency (part 2) hw5a Framework Design
Apr 2 Recitation API design presentations
Apr 3 Concurrency (part 3)
Apr 8 Distributed system design (part 1) Sample networking code hw5b Framework Implementation
Apr 9 Recitation Concurrency
Apr 10 Spring Carnival — No lecture
Apr 15 Distributed system design (part 2) hw5c Framework Plug-in Implementation
Apr 16 Recitation Distributed systems
Apr 17 Distributed system design (part 3)
Apr 22 Distributed system design (part 4)
Apr 23 Recitation Distributed systems, continued
Apr 24 Data consistency
Apr 29 PageRank and data consistency
Apr 30 Recitation Map/reduce problem solving
May 1 Software engineering beyond 15-214 (guest lecture) hw6 Concurrency and distributed systems
May 12 Final exam, 5:30 - 8:30 p.m., UC McConomy ... AND THANKS FOR ALL THE FISH


The 15-214 Toad is from a picture by Coneheadthebarbarian, and is available under the Creative Commons Attribute-Share Alike 3.0 Unported license.