The University of Chicago
Department of Computer Science

MPCS 51205 Course Syllabus

Topics in Software Engineering

Fall 2019


Instructor:        Mark Shacklette
Office:               Crerar 398-F
Office Hours:    Monday 3:30 PM - 5:30 PM & by appointment

email:    mark@cs.uchicago.edu
              mshack@post.harvard.edu

 Teaching staff/Office Hours:

Terry Lynch (terrencelynch-at-icloud-dot-com):  Saturdays, 10 AM - 12 PM (Crerar 352)
John Hadidian-Baugher (jhadidianbaugher-at-gmail-dot-com):  Wednesdays, 5 PM - 7 PM (Gleacher Center Cafe)
Alan Salkanović (zekija816-at-gmail-dot-com):  Sundays, 10 AM - 12 PM (Crerar 352)

Graders:

Zhenghong Zhang (zhzhang135-at-gmail-dot-com)

TA Office Hours: See Piazza

 
SUBJECT COURSE TITLE TIME BUILDING
324 51205 Topics in Software Engineering
Monday, 5:30 PM
JCL 298

 

I. TEXT AND MATERIALS
 

Texts: Required (Programming Knowledge of Java or C++ or Python is assumed)

Microservice Patterns, Chris Richardson, Manning, 2019, ISBN: 9781617294549

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

Domain-Driven Design:  Tackling Complexity in the Heart of Software, Eric Evans, Addison-Wesley, 2004, ISBN:  0321125215

Texts: Highly Recommended Supporting Texts

Python:

Practical Django 2 and Channels 2, Marani, Apress, 2019, ISBN: 9781484240984

Java/Spring:

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:

Designing Data-Intensive Applications, Martin Kleppmann, O'Reilly, 2017, ISBN: 9781449373320

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

Refactoring:  Improving the Design of Existing Code, 2nd Ed., Fowler, Addison Wesley, 2019, ISBN:  9780134757599

Object-Oriented Software Construction, Second Edition , Bertrand Meyer, Prentice Hall, 1997, ISBN: 0136291554

II. PREREQUISITE:

Solid familiarity with either Java or C++ will be assumed.   

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

•    Designing software to meet non-functional requirements for quality, security, reliability, scalability, extensibility, testability, supportability, fault tolerance and disaster recovery
•    Architecture Governance—what is it and how do you do it?
•    Microservice Architecture
•    What does “ideation to implementation” mean?
•    Continuous Integration and Continuous Delivery
•    RESTful APIs and testing
•    Software Development Life Cycle integrating Agile methodologies
•    Containerization

TECHNOLOGIES (Each year we will choose some of these for deep dives):

•    Java Development including Spring Framework and Spring Microservices
•    Event-based design
•    Microservices and RESTful APIs
•    SQL and NoSQL databases
•    Fast access and compute architectures including In-memory databases and data grids
•    Hybrid Transactional/Analytical Processing (HTAP) technologies such as Hadoop, Spark, Storm
•    Container-based software design using Docker, Apache Mesos, and Cloud Foundry.
•    Version control systems such as Subversion, GIThub, etc.
•    Continuous Integration and Delivery using JUnit and Bamboo
•    Collaborative tools such as Crucible

IV. LEARNING OBJECTIVES

This course will enable students to understand:

A. Develop a full command of the UML and object-oriented design
B. Object abstraction: objects, classes, inheritance and composition
C. Unit testing and Test Driven Design
D.  Design and develop a non-trivial system using best practices in software design and development
E. Understand the benefits of object-oriented analysis and design, concepts and processes
F. Become familiar with formal design tools for object orientated analysis and design
G. Become conversant with a number of common design patterns
 

V. ACADEMIC INTEGRITY

Students are expected to have read and understood the University's policy on Academic Integrity. This policy is detailed in the Student Manual of University Policies and Regulations, available online at http://www.uchicago.edu/student/manual/academic_honesty.html.
 

VI. METHOD OF INSTRUCTION

Methods include lecture and project-related assignments. Your team work should be stored using a version-control system that allows us to easily view files and folders that you create.  One possibility is to use Subversion.
 

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:

5 Iteration Deliverables (4 points each)
20%
5 Labs (3.0 points each)
15%
Project Faculty Evaluation of Team Project
39%
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 .50 points off for each 24-hour period the lab is late, through 6 days late (6*.50 = 3.0).  After six days delay, 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 2.5/3.0 for a lab, but you turned it in 2 days late, you would receive a grade of:  2.5 - (.50 * 2) = 1.5.

The penalty for late Iterations will be 1.0 point off for each 24-hour period the lab is late, through 4 days late (4*1.0 = 4.0).  After four 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 2, 2019 for all students.  The requirements for the course project are described here.

The following abbreviations reference the following works:
 
Abbreviation Text
MP
Microservice Patterns, Richardson
DIP
Docker in Practice, Miell & Sayers
DC
Docker Containers, Negus
MIA
Microservices in Action, Bruce & Pereira
Evans
Domain-Driven Design, Evans

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
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/
Avram
Domain-Driven Design Quickly
http://www.infoq.com/resource/minibooks/domain-driven-design-quickly/en/pdf/DomainDrivenDesignQuicklyOnline.pdf
Evans2
Eric Evans:  DDD and Microservices, QCon London 2016
https://www.infoq.com/presentations/ddd-microservices-2016
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 (Rescheduled)
Sunday, October 6
1:00 PM - 4:00 PM
JCL 390
Introduction (Client-Server Background & Microservices Concepts)
Introduction to Course Project & Grading
Evans1-4
MP 1-2
MIA 1

Cavage
Hodges
Team Formation
Class 2
October 7
Domain Driven Design Fundamentals

Microservices Continued: Architectural Considerations and the API Gateway
Evans 5-6, 14-15
MP: 3
MIA 2-3

Evans2
Lamport2

Class 3
October 14
RESTful APIs:   Introduction and Testing with Postman

Introduction to Docker & Containers
Evans 7
MP 4
MIA 4-5

Maccoby
Andreessen
Fielding
Iteration I:  Initial Requirements Landscape
Class 4
October 21, 2019 - NO CLASS

IP: 1-3
DC: 1-6
Evans: 8-13

Metz
Iteration II:  High Level Architecture & Team Update

Lab 1 - Docker Intro
Class 5
October 28
API First
Agile Ceremonies & Process
User Stories and Epics
Agile Testing
DevOps:  CI & CD
DIP: 4
DC: 7-10

Avram
Iteration III:  Team Planning & Team Update
Class 6
November 4
Intro and UML Refresher

Technology Foundations 1:  Synchronous Communication:  RPCs (RMI/gRPC)
MP 5-6
MIA 6-7
DIP: 5

Fallacies
Sheehy


Lab 2 - Docker RPC
Class 7
November 11
Technology Foundations 2:  Asynchronous Communication:  AMQP & RabbitMQ RIA 1-4, 8-10

Mickens1
Lab 3 - Dockerized RabbitMQ

Class 8
November 18
NoSQL Data Storage with MongoDB
MIA 8-9
Evans: 16-17

Mei
Iteration IV:  Team Planning & Team Update

Lab 4 - Dockerized MongoDB
Class 9
November 25
SQL Data Storage with PostgresSQL
MIA 10

Lab 5 - Dockerized PostgresSQL
Class 10
December 2
Final Team Project Presentations
Team Final Project Presentations (click here for instructions)

Class 11
December 9
Advanced Topics

Iteration V:  Post-mortem

Final Presentation Schedule

EVERYONE:  Sign up on Piazza here