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 9:00 - 10:20 a.m. in DH 2210

Professor Charlie Garrod
charlie@cs.cmu.edu
WEH 5101
Professor Jonathan Aldrich
jonathan.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
Aug 26 Course introduction and Introduction to object-oriented concepts Simulation code
Aug 27 Recitation Git + Java warmup Java Quick Reference
Aug 28 Design goals and process
Sep 02 Software specification and testing IntSet code and tests hw0 Course infrastructure warmup
Sep 03 Recitation Unit testing, build automation, continuous integration++
Sep 04 Domain modeling and specifying system behavior
Sep 09 Interaction diagrams (modeling continued) and Inheritance Inheritance example code
Sep 10 Recitation Inheritance and modeling
Sep 11 System sequence diagrams and behavioral contracts hw1 Objects, interfaces, and testing
Sep 16 Assigning Responsibilities to Objects
Sep 17 Recitation The Eclipse debugger and other tools
Sep 18 Formal specification, behavioral subtyping, and assertions hw2 Introduction to design
Sep 23 Information hiding and dependency analysis
Sep 24 Recitation Behavioral subtypes and static analysis
Sep 25 Introduction to design patterns hw3 Design with inheritance
Sep 30 Midterm exam 1 DON'T PANIC
Oct 01 RecitationDesign patterns
Oct 02 Introduction to design patterns, continued
Oct 07 Design case study: GUIs hw4a Designing complex software
Oct 08 Recitation Intro to GUIs
Oct 09 Design case study: Collections
Oct 14 Design case study: Stream I/O Stream I/O design patterns
Oct 15 Recitation GUIs++
Oct 16 Design for reuse: Libraries & frameworks
Oct 21 Design for reuse: Libraries & frameworks (continued) hw4b Design & implementation
Oct 22 Recitation Frameworks
Oct 23 API design
Oct 28 Concurrency (part 1) hw4c GUI implementation
Oct 29 Recitation Design pattern mining
Oct 30 Midterm exam 2 MOSTLY HARMLESS
Nov 04 Concurrency (part 2) SE minor details
Concurrency examples
hw5a Framework design
Nov 05 Recitation API design presentations
Nov 06 Concurrency (part 3)
Nov 11 Distributed system design (part 1)
Nov 12 Recitation Concurrency
Nov 13 Distributed system design (part 2) hw5b Framework implementation
Nov 18 Distributed system design (part 3): MapReduce
Nov 19 Recitation Distributed systems
Nov 20 Transactions and serializability hw5c Framework plug-in implementation
Nov 25 OO History: Smalltalk and Simula
Nov 26 No recitation Thanksgiving
Nov 27 No lecture: Thanksgiving
Dec 02 Lambdas and Streams in Java 8 Stream code hw6 Mapping checkpoint
Dec 03 Recitation TBD
Dec 04 Beyond Java: the Scala Language hw6 Concurrency and distributed systems
Dec 08 Final exam, 8:30 a.m., Porter Hall 100 ... AND THANKS FOR ALL THE FISH

Acknowledgments

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