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