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
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.

Course Calendar


Note that our course homework and lecture schedule is being substantially revised this year—especially early in the semester—so this schedule is subject to change somewhat more than in a typical year.
Date Topic Additional Notes/Code Assignments Due
Jan 13 Course introduction and Introduction to software design simulation example
Jan 14 RecitationCourse infrastructure warmup Java Quick Reference
Jan 15 Design for change, part 1 (subtype polymorphism, design patterns)
Jan 20 Design for change, part 2 (encapsulation, information hiding, contracts) KWIC case study hw1 Intro to design, course infrastructure
Jan 21 Recitation Unit testing, build automation, continuous integration++
Jan 22 Design for change, part 3 (unit testing, instanceof) Expr. problem example
Jan 27 Design for reuse (class level), part 1
Jan 28 Recitation Inheritance and modeling
Jan 29 Design for reuse (class level), part 2 hw2 Polymorphism, unit testing
Feb 03 Requirements, domain modeling, and system sequence diagrams
Feb 04 Recitation The Eclipse debugger and other tools
Feb 05 Responsibility assignment
Feb 08 No lecture: Sunday hw3 Inheritance and delegation
Feb 10 Design for robustness
Feb 11 Recitation Design process
Feb 12 Midterm exam 1 DON'T PANIC
Feb 17 Analysis
Feb 18 RecitationDesign patterns
Feb 19 Introduction to GUIs SwingWorker demo hw4a Designing complex software
Feb 24 Design case study: Java Swing
Feb 25 Recitation Intro to GUIs
Feb 26 Design case study: Java Collections
Mar 03 Design case study: Java I/O Java I/O examples
Mar 04 Recitation GUIs++
Mar 05 Design for large-scale reuse: Libraries & frameworks hw4b Design to implementation
Mar 17 Design for large-scale reuse: Libraries & frameworks (continued)
Mar 18 Recitation Frameworks
Mar 19 API design hw4c GUI implementation
Mar 24 Concurrency (part 1) Concurrency examples
Mar 25 Recitation Design pattern mining
Mar 26 Midterm exam 2 MOSTLY HARMLESS
Mar 31 Concurrency (part 2) hw5a Framework design
Apr 01 Recitation API design presentations?
Apr 02 Concurrency (part 3)
Apr 07 Distributed system design (part 1)
Apr 08 Recitation Concurrency
Apr 09 Distributed system design (part 2) hw5b Framework implementation
Apr 14 Distributed system design (part 3): MapReduce
Apr 15 Recitation Distributed systems hw5c Plugin implementation
Apr 16 No lecture: Carnival
Apr 21 Transactions and serializability
Apr 22 RecitationDistrbuted systems, continued
Apr 23 State: Finite State Machines, the State Pattern, and the Actor Model
Apr 28 Version control hw6 Mapping checkpoint
Apr 29 Recitation Collaborating with Git
Apr 30 People and process: toward 15-313 hw6 Concurrency and distributed systems
May 05 Final exam, 1pm, DH2210 ... AND THANKS FOR ALL THE FISH