The University of Chicago
Department of Computer Science
MPCS 51205 Course Syllabus
Topics in Software Engineering
Fall 2023
Online Only
Instructor: Mark
Shacklette
Office:
Online only (zoom)
Office Hours: Monday 2:30 PM - 3:45 PM &
by appointment
email: mark@cs.uchicago.edu
mshack@post.harvard.edu
Teaching staff/Office Hours:
TA: Alan Salkanović TA Office Hours: See Above.
SUBJECT | COURSE | TITLE | TIME | BUILDING |
324 | 51205 | Topics in Software Engineering |
Monday, 4:10 PM |
ONLINE-ZOOM |
I. TEXT AND MATERIALS
Texts: Required (Programming Knowledge of Java or C++ or Python is assumed)
Domain-Driven Design:
Tackling Complexity in the Heart of Software, Eric Evans, Addison-Wesley, 2004, ISBN:
0321125215
Building Microservices, 2nd Ed.: Designing Fine-Grained Systems, Newman, O'Reilly, 2021, ISBN: 1492034029
Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy, Khononov, O'Reilly, 2021, ISBN: 1098100131
Fundamentals of Software Architecture:
An Engineering Approach, Richards & Ford, O'Reilly,
2020, ISBN: 9781492047841
Texts: Highly Recommended Supporting Texts
Microservices, Domain Driven Design &
General Architecture:
Software
Architecture: The Hard Parts, Ford et. al.,
O'Reilly, 2021, ISBN: 1492086894
Microservice
Patterns, Chris
Richardson, Manning, 2019, ISBN: 9781492053454
API Design & Web APIs:
Building Micro-Frontends, Mezzalira, O'Reilly, 2021, ISBN: 1492082996MongoDB and NoSQL:
MongoDB: The Definitive Guide, Powerful and Scalable Data Storage, Bradshaw, Brazil & Chodorow, O'Reilly, 2019, ISBN: 9781491954461Python:Practical Django 2 and
Channels 2, Marani,
Apress, 2019, ISBN: 9781484240984
Architecture Patterns with Python:
Enabling Test-Driven Development, Domain-Driven Design, and
Event-Driven Microservices, Percival & Gregory,
O'Reilly, 2020, ISBN: 9781492052203
Java/Spring:
Spring Microservices in Action,
John Carnell, Manning, 2017, ISBN: 97816172931986
Spring 5.0 Microservices,
Rajesh RV, Packt, 2019, ISBN: 9781787127685
MEAN/Node.js:
Getting MEAN with Mongo,
Express, Angular, and Node, Second Edition, Holmes,
Manning, 2019, ISBN: 9781617294754
Docker:
Docker Cookbook, Miell & Sayers, Manning, 2016, ISBN: 9781491919712
Docker in Practice, Sebastien Goasguen,
O'Reilly, 2016, ISBN: 9781617292729
Docker Containers,
Christoper Negus, Prentice Hall, 2016, ISBN: 9780134136561
Asynchronous
Communication/AMQP:
RabbitMQ in Action, Videla & Williams,
Manning, 2012, ISBN: 9781935182979
General:
Texts: Recommended
Code Complete, 2nd ed., Steve McConnell, Microsoft Press, 2004, ISBN: 9780735619678UML Distilled, 3rd ed., Martin Fowler, Addison Wesley, 2003, ISBN: 0321193687
Applying UML and
Patters: An Introduction to Object-Oriented Analysis
and Design and Iterative Development, 3rd ed., Craig
Larman, Prentice Hall, 2005, ISBN: 0131489062
Disciplined Agile Delivery: A
Practitioner's Guide to Agile Software Delivery in the
Enterprise, Ambler & Lines, IBM, 2012, ISBN:
0132810131
Design Patterns, Gamma, et. al., Addison Wesley, 1995, ISBN: 0201633612
II. PREREQUISITE:Solid familiarity with either Java or C++ will be assumed.
Students should have completed the MPCS Unix Bootcamp or have
equivalent experience.
III. COURSE DESCRIPTION
This course is an intermediate approach to applied software design and development methods for use in creating efficient, reusable, and modular software. Each time the course is offered the content and focus change from year to year. Some of the topics we have investigated include: microservices, event-driven architecture, Hybrid Transactional/Analytical Processing; software frameworks and container-based software development; and advanced techniques including multi-threading. A heavy focus is on design and creativity and what constitutes creative design.
TOPICS (Each year we will choose some of these for deep
dives):
TECHNOLOGIES (Each year we will choose some of these for
deep dives):
IV. LEARNING OBJECTIVES
This course will enable students to understand:
A. Develop a full command of the UML and object-oriented
design
B. Microservice Architecture & Design
C. Docker containerization and Microservice management
D. Design and develop a non-trivial system using best
practices in Microservice design and development
F. Become familiar with formal design tools for
contextual analysis and Microservice design
V. ACADEMIC INTEGRITY & GENERATIVE AI
Students are expected to have read and understood the
University's policy on Academic Integrity. See
Program
Policies | Masters Program in Computer Science | The University
of Chicago (uchicago.edu) under Academic Honesty &
Plagiarism Policy for more information.
GENERATIVE AI TOOLS: Problem solving is truly the
core skill that needs to be developed. This can only be achieved
through determination and perseverance; there are no shortcuts.
Finishing assignments on time and getting the correct answer are
meaningless if you do not fully understand what you are
submitting. In computer science, there are many ways to accomplish
the same task, and solutions will vary by levels of exposure,
experience, and expertise. By not allowing a natural progression
of skills you risk undermining your long-term success in this
field. THEREFORE: In this
course, we will be developing skills and knowledge that are
important to discover and practice on your own. Because
use of AI tools inhibits development of these skills and
knowledge, students are not allowed to use any AI tools,
such as (but not limited to) ChatGPT or DallE 2, in this
course. Students are expected to present work that is their
own without assistance from others, including automated tools.
If you are unclear if something is an AI tool, check
with Professor Shacklette or a TA. Using AI tools for
any purposes in this course will violate the University’s
academic integrity policy and will incur subsequent, and
likely severe, penalties.
VI. METHOD OF INSTRUCTION
Methods include lecture and homework assignments. All work will
be submitted using Subversion, a version-control system that
allows us to easily view files and folders that you create. You
will not have to e-mail your files to the instructor, TAs, or
grader, or even submit them online. Read this page in order to
learn about how all of this will work.
Note for this online course:
By attending course sessions, students acknowledge that:
A. They will not: (i) record, share, or disseminate University of
Chicago course sessions, videos, transcripts, audio, or chats;
(ii) retain such materials after the end of the course; or (iii)
use such materials for any purpose other than in connection with
participation in the course.
B. They will not share links to University of Chicago course
sessions with any persons not authorized to be in the course
session. Sharing course materials with persons authorized to be in
the relevant course is permitted. Syllabi, handouts, slides, and
other documents may be shared at the discretion of the instructor.
C. Course recordings, content, and materials may be covered by
copyrights held by the University, the instructor, or third
parties. Any unauthorized use of such recordings or course
materials may violate such copyrights.
D. Any violation of this policy will be referred to the Area Dean
of Students.
VII. OTHER COURSE INFORMATION
Attendance:
No formal attendance taken. Absences will affect your team and likely impact your peer evaluation. There may be information presented in class that is not in the texts. You will find the lectures helpful in doing the laboratory exercises.
Make-up Work:
Students are expected to read the assigned texts before class in
order to be able to full participate in the discussions and course
activities.
VIII. METHOD OF EVALUATING STUDENT PROGRESS
Assigned work evaluated as follows:
4 Iteration Deliverables (5
points each) |
20% |
5 Labs (5.0 points each) |
25% |
Project Faculty Evaluation of
Team Project |
29% |
Team Peer Evaluation (Instructions here) |
26% |
Total: |
100%
|
Grading scale (for all assignments excluding Peer
Evaluations. NOTE there is a separate scale for Peer Grading
located: here):
95-100: A
90-94: A-
87.6-89: B+
83-87.5: B
80-82.9: B-
76-79: C+
Iteration Deliverables will be graded on a 4-point basis. Deliverable due dates are noted on the syllabus below. All labs and homework are due by 5:00 pm on the due date.
All assignments are due as specified on
this syllabus and lab and iteration deliverables. This
includes the final project deliverables. Each team will be
evaluated on the basis of the presentation of iteration
deliverables and the final deliverable. Any and all
lateness will suffer penalties.
The penalty for late labs will be 1.0 points off for each 24-hour period the lab is late, through 5 days late (5*1.0 = 5.0). After six days from the due date, the lab will no longer be accepted for grading and will receive a 0. Note: Any penalty is taken off after the grade has been determined. For example, if you make a grade of 4.0/5.0 for a lab, but you turned it in 2 days late, you would receive a grade of: 5.0 - (1.0 * 2) = 3.0.
The
penalty for late Iterations will be 1.0 point off for each
24-hour period the lab is late, through 5 days late (5*1.0
= 5.0). After five days delay, the iteration
deliverable will no longer be accepted for grading and
will receive a 0. Note: As with labs, any
penalty is taken off after the grade has been
determined.
NB: The end of the quarter is the time at which the final grade you have earned through your work in the quarter is recorded with the registrar. There is no extra credit offered in this course, either at the beginning or at the end. If you are dissatisfied with the grade you have earned at the end of the quarter, your only options will be to retake the course the next time it is offered, or accept the grade you earned.
NB: The instructor reserves the right to alter the course contents, dates, times or percentage of credit based on time allowed and class progress through the course material. The instructor also reserves the right to curve grades if he deems it in the best interest of the majority of students.
IX. COURSE SCHEDULE
The course project will be due for all teams on December 4, 2023 for all students. The requirements for the course project are described here.
The following abbreviations reference the following works:
Abbreviation | Text |
SAM |
Building Microservices, Sam Newman |
LDDD |
Learning Domain-Driven Design, Khononov |
DIP |
Docker in Practice, Miell & Sayers |
DC |
Docker Containers, Negus |
MDG |
MongoDB: The Definitive Guide,
Bradshaw, Brazil & Chodorow |
Evans |
Domain-Driven
Design, Evans |
FSA |
Fundamentals of Software Architecture,
Richards & Ford |
Articles*:
Abbreviation |
Author
& Title |
Location (in addition to Mark's pub directory) |
Mei |
Sarah Mei, Why You Should Never Use MongoDB | http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/ |
Cavage |
Mark Cavage, There's Just No Getting around
It: You're Building a Distributed System* |
~mark/pub/51205/required.reading |
Cockburn |
Hexagonal Architecture |
https://alistair.cockburn.us/hexagonal-architecture/ |
Conway |
How Do Committees Invent |
committees.pdf (melconway.com) |
Fowler |
Microservices |
Microservices (martinfowler.com) |
Maccoby |
Michael Maccoby, "The
Innovative Mind at Work" (IEEE Spectrum, Volume: 28, Issue:
12, 1991), pp. 23 - 35 |
~mark/pub/51205/required.reading |
Evans |
Domain-Driven Design
(Article) |
http://domainlanguage.com/wp-content/uploads/2016/05/DDD_Reference_2015-03.pdf |
Metz |
Cade Metz, The Man Who Would Build a
Computer the Size of the Entire Internet |
https://www.wired.com/2013/09/docker/ |
Fielding |
Dissertation, Chapter 5:
Representational State Transfer |
https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm |
Hodges |
Hodges, Notes on Distributed Systems
for Young Bloods* |
~mark/pub/51205/required.reading |
Sheehy |
Sheehy, There is No Now* |
~mark/pub/51205/required.reading |
Fallacies |
Rotem-Gal-Oz, Fallacies of Distributed
Computing Explained |
http://www.rgoarchitects.com/Files/fallacies.pdf |
Lamport2 |
Lamport, Why We Should Build Software
Like We Build Houses |
https://www.wired.com/2013/01/code-bugs-programming-why-we-need-specs/ |
Mickens1 |
Mickens, The Saddest Moment |
https://www.usenix.org/system/files/login-logout_1305_mickens.pdf |
Andreessen |
Marc Andreessen, Why Software
is Eating the World |
https://a16z.com/2016/08/20/why-software-is-eating-the-world/ |
*Articles starred may be found on the cluster under my pub
directory (~mark/pub/51205/required.reading). All numbers
below refer to chapters in
texts, not pages, unless otherwise noted (as "pp.
1-99", for example).
Class/Date | Lecture Topics | Required Reading Schedule | Activities and
Deliverables |
Class 1 October 2 |
Course Introduction & Syllabus
Review Introduction to Course Project & Peer Grading Introduction (Client-Server Background & Microservices Concepts) |
Evans1-4 SAM 1,3 LDDD 1 FSA: 1-3, 10 Cavage Fowler Conway |
Team Formation
Iteration Watch the async lecture on Intro to UML |
Class 2 October 9 |
Domain Driven Design Fundamentals Designing Microservices Microservices Continued: Hexagonal Architecture Architectural Considerations and the API Gateway |
Evans 5-6, 14-15 SAM 2 LDDD: 2,14 FSA: 4-5,17,19, 21 Cockburn Hodges Lamport2 |
Iteration
I: Initial Requirements Landscape Watch the async lecture on Advanced UML and Tools |
Class
3 October 16 |
RESTful APIs:
API First Introduction and Testing with Postman Introduction to Docker & Containers |
Evans 7 SAM 4 LDDD: 3-4 FSA: 7-8,13 Maccoby Andreessen Fielding |
Lab 1 - Docker Intro Watch the async lecture on Intro to Docker and Async Intro To Analysis And Building Blocks Team Reviews with TAs: w/ Alan: Auction Architects, BitMasters, Java Saves Us w/ John: ChiPy, Crerar Creators |
Class 4 October 23 |
Technology Foundations 1: Synchronous Communication: Remote Procedure Calls (RMI/gRPC) | SAM 5 DC: 1-6 Evans: 8-13 LDDD: 5 FSA: 9 Fallacies Sheehy Metz |
Iteration II:
High Level Architecture & Team Update Lab 2 - Docker RPC Watch the async lecture on Advanced Docker Build and Compose Team Reviews with TAs: w/ John: Auction Architects, BitMasters, Java Saves Us w/ Alan: ChiPy, Crerar Creators |
Class 5 October 30 |
Technology Foundations 2: Asynchronous Communication: AMQP & RabbitMQ |
SAM 6-7 LDDD: 6-7 DIP: 4 DC: 7-10 FSA: 14, 16 |
Lab 3 - Dockerized RabbitMQ Watch the async lecture on CRC Cards Team Reviews with TAs: w/ Alan: Auction Architects, BitMasters, Java Saves Us w/ John: ChiPy, Crerar Creators |
Class 6 November 6 |
NoSQL Data Storage with MongoDB |
SAM 8-9 LDDD: 8-9 MDG: 1-4, 8 Mickens1 |
Iteration III: Team
Planning & Team Update Lab 4 - Dockerized MongoDB Team Reviews with TAs: w/ John: Auction Architects, BitMasters, Java Saves Us w/ Alan: ChiPy, Crerar Creators |
Class
7 November 13 |
SQL Data Storage with PostgresSQL | SAM 10-11 LDDD: 10-12 Evans: 16-17 Mei |
Lab 5
- Dockerized PostgresSQL Team Reviews with TAs: w/ Alan: Auction Architects, BitMasters, Java Saves Us w/ John: ChiPy, Crerar Creators |
NO CLASS November 20 Thanksgiving Break |
LDDD: 13,15-16 |
||
Class 8 November 27 |
Preliminary Team Project Reviews (faculty
only). See schedule for time slots and rooms. Instructions for Team Meetings with TAs |
SAM 12-13 |
Iteration IV: Team Planning & Team Update |
Class 9 December 4 |
Final Team Project
Presentations (presentations to entire class) Instructions for Final Team Presentations |
Team Final Project Presentations (click here for instructions) |
EVERYONE: Our discussion platform is Ed via Canvas. Please access Ed here. An Ed Discussion Quickstart guide is located here.