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:
- Be comfortable with object-oriented concepts and with programming in the Java language
- Have experience designing medium-scale systems with patterns
- Have experience testing and analyzing your software
- Understand principles of concurrency and distributed systems
Coordinates
Tu/Th 9:00 - 10:20 a.m. in DH 2210
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.