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 12:00 - 1:20 p.m. in DH 2315
jbloch@gmail.com
WEH 5126
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
We are expecting greater-than-usual changes to the course this semester. The schedule below is merely a draft (based on previous instances of the course) and is likely to change.
Date | Topic | Additional Notes/Code | Assignments Due |
---|---|---|---|
Aug 30 | Course introduction | ||
Aug 31 | RecitationCourse infrastructure warmup | ||
Sep 01 | Introduction to Java | ||
Sep 06 | Introduction to Object-oriented Programming in Java | readingSee Piazza | |
Sep 07 | Recitation Unit testing, build automation, continuous integration++ |
||
Sep 08 | Introduction to Java; Specification and Testing | hw1 Intro to OO, course infrastructure | |
Sep 13 | Delegation, Inheritance, and Behavioral Subtyping | ||
Sep 14 | Recitation Behavioral Subtyping | ||
Sep 15 | Introduction to Design Patterns | Handwritten notes for Design Patterns lecture | readingSee Piazzahw2 Polymorphism, unit testing |
Sep 20 | Design Patterns (continued) and Parametric Polymorphism | Handwritten notes for decorator pattern | reading See Piazza |
Sep 21 | Recitation Inheritance and Delegation |
Sep 22 | Object-oriented analysis: Modeling a problem domain | ||
Sep 25 | No lecture: Sunday | hw3 Inheritance and delegation | |
Sep 27 | Object-oriented design: Responsibility assignment | ||
Sep 28 | Recitation Design process | ||
Sep 29 | Midterm exam 1 | DON'T PANIC | |
Oct 04 | ’tis a Gift to be Simple: Midterm 1 and Homework 3 Post-Mortem | ||
Oct 05 | RecitationDesign patterns | ||
Oct 06 | Class invariants, immutability, and testing | hw4a Designing complex software | |
Oct 11 | A Brief Introduction to Multithreading and GUI Programming | ||
Oct 12 | Recitation Intro to GUIs | ||
Oct 13 | How to Design a Good API and Why it Matters - Part 1 | ||
Oct 18 | How to Design a Good API and Why it Matters - Part 2 | ||
Oct 19 | Recitation GUIs++ | ||
Oct 20 | The Design of the Java Collections Framework | hw4b Design to implementation | |
Oct 25 | Design for large-scale reuse: Libraries & frameworks | ||
Oct 26 | Recitation Frameworks | ||
Oct 27 | I/O and Reflection | hw4c GUI implementation | |
Nov 01 | Concurrency (part 1) | ||
Nov 02 | Recitation Design pattern mining | ||
Nov 03 | Midterm exam 2 | MOSTLY HARMLESS | |
Nov 08 | Concurrency (part 2) | hw5a Framework design | |
Nov 09 | Recitation Concurrency | ||
Nov 10 | Concurrency (part 3) - java.util.concurrent | ||
Nov 15 | Concurrency (part 4) - parallelism | hw5b Framework and plugin implementation | |
Nov 16 | Recitation Framework presentations | ||
Nov 17 | Introduction to networks and distributed systems | ||
Nov 22 | Distributed system design: MapReduce | hw5c Plugins for others' frameworks | |
Nov 23 | No recitation Thanksgiving | ||
Nov 24 | No lecture: Thanksgiving | ||
Nov 29 | Serializability and transactions | ||
Nov 30 | Recitation Distributed systems | ||
Dec 01 | 23 Patterns in 80 Minutes: a Whirlwind Java-centric Tour of the Gang-of-Four Design Patterns | hw6 Checkpoint (Friday 5 p.m.) | |
Dec 06 | Functional Constructs in Java 8: Lambdas and Streams | ||
Dec 07 | RecitationStreams | ||
Dec 08 | Finale | hw6 Concurrency and distributed systems | |
Dec 16 | Final exam, 5:30-8:30 p.m. | ... AND THANKS FOR ALL THE FISH |