The University of Chicago
Department of Computer Science

MCPS 51221 Course Syllabus

Applied Software Engineering II

Fall 2017


Instructor:        Mark Shacklette
Office:               Young 208B
Office Hours:    By Appt.

email:    mark@cs.uchicago.edu (read hourly or so)
              mshack@post.harvard.edu (read hourly or so)

 Teaching staff:

TA:  John Hadidian-Baugher (jhadidianbaugher-at-gmail-dot-com)

TA Office Hours: See Piazza

 
SUBJECT COURSE TITLE TIME BUILDING
324 51221 Applied Software Engineering II Tuesday, 5:30pm Young 106

 

I. TEXT AND MATERIALS
 

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

Building Microservices, Sam Newman, O'Reilly, 2015, ISBN: 9781491950357

Docker Containers, Christoper Negus, Prentice Hall, 2016, ISBN: 9780134136561

RabbitMQ in Action, Videla & Williams, Manning, 2012, ISBN: 9781935182979

Texts: Highly Recommended

Docker Cookbook, Miell & Sayers, Manning, 2016, ISBN: 9781491919712

Docker in Practice, Sebastien Goasguen, O'Reilly, 2016, ISBN: 9781617292729

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

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

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

Texts: Optional Texts

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

Texts: Recommended

Software Architecture in Practice, 3rd ed., Bass, Clements, Kazman, Addison Wesley, 2013, ISBN:  0321815734

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

UML Distilled, 3rd ed.,  Martin Fowler, Addison Wesley, 2003, ISBN: 0321193687

Object Oriented Analysis and Design, 3rd ed., Grady Booch, Addison Wesley, 2007, ISBN:  020189551X

Software Architecture:  Perspectives on an Emerging Discipline, Shaw & Garlan, Prentice Hall, 1996, ISBN: 0131829572

Refactoring to Patterns, Kerievsky, Addison Wesley, 2004, ISBN: 0321213351

Pattern-Oriented Software Architecture:  A System of Patterns, Buschmann, Meunier, et. al., Wiley, 1996, ISBN: 0471958697

Developing Software with UML, Bernd Oesterich, Addison-Wesley, 1999, ISBN: 0201398265

Building Enterprise Information Architectures, Melissa Cook, Prentice Hall, 1994, ISBN: 0134402561

Enterprise Service Oriented Architectures, McGovern, Sims, et. al., Springer 2006 ISBN: 140203704X

Developing Object Oriented Software, OOTC, Prentice Hall, 1996, ISBN: 0137372485

Object-Oriented Software Engineering, Ivar Jacobson, Addison Wesley, 1992, ISBN: 0201544350

The Unified Modeling Language Reference Manual , James Rumbaugh et. al., Addison Wesley, 1991, ISBN: 020130998X

The Unified Software Development Process , Ivar Jacobson et. al., Addison Wesley, 1999, ISBN: 0201571692

The Unified Modeling Language User Guide, 2nd ed , Grady Booch, et. al., Addison Wesley, 1999, ISBN: 0321267974

The Patterns Handbook,  Linda Rising, ed., Cambridge, Cambridge University Press, 1998

Refactoring:  Improving the Design of Existing Code, Martin Fowler, et. al., Addison Wesley, 1999, ISBN: 0201485672

Pattern Languages of Program Design, Vol. 1, James Coplien,  DougSchmidt, Reading, Mass: Addison-Wesley, 1995

AntiPatterns:  Refactoring Software, Architectures, and Projects in Crisis, Brown, et. al., Wiley, 1998, ISBN: 0471197130

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

The Timeless Way of Building, Christopher Alexander, New York: Oxford, 1979

A Pattern Language, Christopher Alexander, et. al., New York: Oxford, 1977

Software Architecture:  Perspectives on an Emerging Discipline, Shaw & Garlan, Prentice Hall, 1996, ISBN: 0131829572

Use Case Driven Object Modeling with UML , Doug Rosenberg, et. al., BAddison Wesley, 1999, ISBN: 0201432897
 

Language Related Texts:

JAVA:

Beginning Java 2 , Horton, Wrox Press, 1999, ISBN:  1861002238

Thinking in Java , Bruce Eckel, Prentice Hall, 1998, ISBN:  0136597238

Java I/O , Harold, O'Reilly, 1999, ISBN: 1565924851

The Well-Grounded Java Developer, Evans et. al., Manning, 2012, ISBN: 1617290068


C++

Modern C++ Design:  Generic Programming and Design Patterns Applied, Alexandrescu, Addison-Wesley, 2001, ISBN:  0201704315

Accelerated C++, Koenig & Moo, Addison-Wesley, 2000, ISBN:  020170353X

Programming:  Principles and Practice Using C++,  Stroustrup, Addison-Wesley, 2009 (beginner's introduction to C++ programming by l'homme lui-mÍme)

Modern C++ Design: Generic Programming and Design Patterns Applied, Andrei Alexandrescu, Addison-Wesley, 2001

Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference, Langer and  Kreft, Addison-Wesley, 2000

C++ Cookbook, Stephens et. al., O'Reilly, 2006

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.  This course is offered annually but content and focus change from year to year.  Methods we investigate include: classes, inheritance, and polymorphism; design patterns; advanced programming techniques using 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?
•    Vendor and Technology assessment techniques and documenting roadmaps
•    What does “ideation to implementation” mean?
•    Continuous Integration and Delivery
•    Architecture Documentation:  Conceptual and Solution Architecture Artifacts
•    Software Development Life Cycle integrating Agile methodologies
•    Alternative architecture/design approaches – object oriented, structured, component based and corresponding tools

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

•    Java Development including J2EE, JavaScript, ExtJS, JSON, AJAX, Spring Framework and MVC, Hibernate, JFC, JDBC
•    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
•    Continuous/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:

4 Iteration Deliverables (5 points each)
20%
5 Labs (3.0 points each)
15%
Project Faculty Evaluation
40%
Team Peer Evaluation (Instructions here)
25%
Total:
100%    

Grading scale:
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 seperate peer grading scale is described here.

Iteeration Deliverables will be graded on a 5-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 .25 points off for each 24-hour period the lab is late, through ten days late (10*.25=2.5).  After ten days delay, the lab will no longer be accepted for grading and will receive a 0.

The course project will be due for all teams on November 28, 2017 for all students.  The requirements for the course project are described here.

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 disatisfied 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 following abbreviations reference the following works:
 
Abbreviation Text
BM
Building Microservices, Newman
DIP
Docker in Practice, Miell & Sayers
DC
Docker Containers, Negus
RIA
RabbitMQ in Action, Videla & Williams


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/
Google Bigtable
Chang et. al., Bigtable: A Distributed Storage System for Structured Data
http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf
Amazon Dynamo
DeCandia et. al., Dynamo: Amazon’s Highly Available Key-value Store
https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf
Cassandra
Lakshman & Malik, Cassandra - A Decentralized Structured Storage System
http://pages.cs.wisc.edu/~akella/CS838/F12/838-CloudPapers/Cassandra.pdf
Cavage
Mark Cavage, There’s Just No Getting around It: You’re Building a Distributed System*
~mark/pub/51221/reqiured.reading
Maccoby
Michael Maccoby, "The Innovative Mind at Work" (IEEE Spectrum, Volume: 28, Issue: 12, 1991), pp. 23 - 35
~mark/pub/51221/reqiured.reading
Evans
Domain-Driven Design Reference
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
Hodges
Hodges, Notes on Distributed Systems for Young Bloods*
~mark/pub/51221/reqiured.reading
Sheehy
Sheehy, There is No Now*
~mark/pub/51221/reqiured.reading
Fallacies
Rotem-Gal-Oz, Fallacies of Distributed Computing Explained
http://www.rgoarchitects.com/Files/fallacies.pdf
Lamport1
Lamport, et. al.  The Byzantine Generals Problem
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/12/The-Byzantine-Generals-Problem.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/51221/reqiured.reading).  All numbers refer to chapters in texts, not pages, unless otherwise noted.
 
Class/Date Lecture Topics Required Reading Schedule Activities and Lab Deliverables
Class 1 (Rescheduled)
October 3
Introduction (Process, Technologies and Languages)
Brooks, No Silver Bullet*
Ambler:  1
Team Formation & Role Assignments
Intro Lab and Environment Setup
Class 2
October 10
Process, Methodology & Notation
DIP: 1-2
DC: 1-2

Class 3
October 17
Software Architecture & Design Thinking
Introduction to Service Oriented Architecture
DIP: 3
DC: 3-6
Maccoby
Standish Group Chaos Report Updatae*
Lamport2
Andreessen
Iteration I:  Initial Requirements Landscape

Class 4
October 23
Introduction to Microservices Architecture and Docker BM: 1-6
DIP: 4
DC: 7-10
Metz
Evans
Avram
Lab 1 - Docker Intro
Class 5
October 31
Microservices Architecture and Docker Continued  BM:  7- 10
DIP: 5
Evans2
Iteration II:  High Level Architecture & Team Update
Lab 2 - More Docker
Class 6
(Makeup Class)
Sunday, November 5 (1:00 PM - 4:00 PM)
Makeup Classroom:  Young 302 (third floor)
Data:  SQL Databases and Microservice Architecture
Tech Dive:  MySQL
Google Bigtable
Mei
Lab 3 - Dockerized MySQL
Class 7
November 7
Topics in Distributed Systems:  Messaging RIA 1-4, 8-10
BM:  11-12
Cavage, Hodges
Sheehy, Fallacies, Lamport1
Mickens1

Lab 4 - Dockerized RabbitMQ
Class 8
November 14
Data:  Next Generation Databases  and Microservice Architecture
Tech Dive:  MongoDB
Amazon Dynamo
Cassandra
Iteration III:  Team Planning & Team Update
Lab 5 - Dockerized MongoDB
Class 9
November 21
In-class Team Project Laboratory

Iteration IV:  Team Planning & Team Update
Class 10
November 28
Final Team Project Presentations

Team Final Project Presentations (click here for instructions)
Class 11
December 5
Advanced Topics

Iteration V:  Post-mortem

Final Presentation Schedule

EVERYONE:  Sign up on Piazza here