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 3:00 - 4:20 p.m. in DH 2315
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.
Recitation
- A Wed. 9:30-10:20 a.m. WEH 5310 Shannon Lee (s...@andrew.cmu.edu)
- B Wed. 10:30-11:20 a.m. WEH 5310 Andrew Zeng (a...@andrew.cmu.edu)
- C Wed. 11:30-12:20 p.m. WEH 5310 Andrew Zeng (a...@andrew.cmu.edu)
- D Wed. 12:30-1:20 p.m. WEH 5310 Aniruddh Chaturvedi (a...@andrew.cmu.edu)
- E Wed. 1:30-2:20 p.m. WEH 5310 Harry Zeng (z...@andrew.cmu.edu)
- F Wed. 1:30-2:20 p.m. BH 235B Yada Zhai (y...@andrew.cmu.edu)
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 |
---|---|---|---|---|---|
Charlie Garrod
charlie@cs.cmu.edu WEH 5101 2:30 - 3:30 p.m. |
Charlie Garrod
charlie@cs.cmu.edu WEH 5101 11 a.m. - noon |
* Subject to change. Changes will be posted on Piazza.
Schedule
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 |
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.