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: 9780133927313Texts: 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
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+
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 |
EVERYONE: Sign up
on Piazza here!