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ć
Office:               Online Only (see Canvas for TA Zoom meeting rooms)
Office Hours:    Sundays, 10 AM - 12 PM CST
email:                zekija816-at-gmail-dot-com    

TA:                    John Hadidian-Bauger
Office:               Online Only (see Canvas for TA Zoom meeting rooms)
Office Hours:    Thursdays, 6-8 PM CST
email:                jhadidianbaugher-at-gmail-dot-com    
               


EVERYONEOur discussion platform is Ed.  Please access Ed here.  An Ed Discussion Quickstart guide is located here.

CANVAS:  The course canvas page can be found here.

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:

Microservices in Action, Bruce & Pereira, Manning, 2019, ISBN: 9781617294457

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: 1492082996

The Design of Web APIs,
Laurent, Manning, 2019, ISBN: 9781617295102

MongoDB 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:

A Practical Guide to Ubuntu Linux, Mark Sobell, Prentice Hall2015, 2016, ISBN: 9780133927313

Disciplined Agile Delivery:  A Practitioner's Guide to Agile Software Delivery in the Enterprise, Ambler & Lines, IBM, 2012, ISBN:  0132810131

Texts: Recommended

Code Complete, 2nd ed.,  Steve McConnell, Microsoft Press, 2004, ISBN: 9780735619678

UML 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+

A separate peer grading scale is implemented in addition to the above.  Every student is responsible for knowing and understanding this additional scale that will be used in the Team Peer Evaluation.  The separate peer grading scale is described here.

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)


Final Presentation Schedule

EVERYONEOur discussion platform is Ed via Canvas.  Please access Ed here.  An Ed Discussion Quickstart guide is located here.