Principles of Software Construction Objects, Design, and Concurrency

Overview

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:

Coordinates

Tu/Th 12:00 - 1:20 p.m. in DH 2315

Professor Charlie Garrod
charlie@cs.cmu.edu
WEH 5101
Professor Jonathan Aldrich
aldrich@cs.cmu.edu
WEH 4216

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

Schedule

Date Topic Additional Notes/Code Assignments Due
Sep 01 Course introduction and Introduction to software design simulation example
Sep 02 RecitationCourse infrastructure warmup
Sep 03 Design for change, part 1 (subtype polymorphism, design patterns)
Sep 08 Design for change, part 2 (encapsulation, information hiding, contracts) reading Larman ch. 14 and 16
hw1 Intro to design, course infrastructure
Sep 09 Recitation Unit testing, build automation, continuous integration++
Sep 10 Design for change, part 3 (unit testing, instanceof)
Sep 15 Design for reuse (class level), part 1 reading Larman ch. 15
Sep 16 Recitation Inheritance and modeling
Sep 17 Design for reuse (class level), part 2 reading Larman ch. 20
hw2 Polymorphism, unit testing
Sep 22 Requirements, domain modeling, and system sequence diagrams reading Larman ch. 9 and 10
Sep 23 Recitation Behavioral subtypes
Sep 24 Responsibility assignment reading Larman ch. 17 and 18
Sep 27 No lecture: Sunday hw3 Inheritance and delegation
Sep 29 Design for robustness reading Larman 36.1-36.4
Sep 30 Recitation Design process
Oct 01 Midterm exam 1 DON'T PANIC
Oct 06 Analysis
Oct 07 RecitationDesign patterns
Oct 08 Introduction to GUIs hw4a Designing complex software
Oct 13 Design case study: Java Swing reading Larman ch. 26
Oct 14 Recitation Intro to GUIs
Oct 15 Design case study: Java Collections
Oct 20 Design case study: Java I/O
Oct 21 Recitation GUIs++
Oct 22 Design for large-scale reuse: Libraries & frameworks hw4b Design to implementation
Oct 27 Design for large-scale reuse: Libraries & frameworks (continued)
Oct 28 Recitation Frameworks
Oct 29 API design hw4c GUI implementation
Nov 03 Concurrency (part 1)
Nov 04 Recitation Design pattern mining
Nov 05 Midterm exam 2 MOSTLY HARMLESS
Nov 10 Concurrency (part 2) hw5a Framework design
Nov 11 Recitation API design presentations?
Nov 12 Concurrency (part 3)
Nov 17 Distributed system design (part 1)
Nov 18 Recitation Concurrency
Nov 19 Distributed system design (part 2) hw5b Framework implementation
Nov 24 Distributed system design (part 3): MapReduce hw5c Plugin implementation
Nov 25 No recitation Thanksgiving
Nov 26 No lecture: Thanksgiving
Dec 01 MapReduce, part 2
Dec 02 Recitation Distrbuted systems
Dec 03 Transactions and serializability hw6 Checkpoint (Friday 5 p.m.)
Dec 08 Version Control
Dec 09 Recitation Collaborating with Git
Dec 10 Lambdas and Streams in Java 8 streams examples hw6 Concurrency and distributed systems
Dec 17 Final exam 8:30-11:30 a.m. ... AND THANKS FOR ALL THE FISH