MPCS 51221 Applied Software Engineering II (Autumn 2017)

Section 1
Instructor(s) Shacklette, Mark (jmshackl)
Location Young 106
Meeting Times Tuesday 5:30pm - 8:30pm
Website: https://www.classes.cs.uchicago.edu/archive/2017/fall/51221-1/syllabus.html
Fulfills

Syllabus

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.

 

Course Contents

 

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, functional, 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

 

Coursework

 

Lectures: Students are responsible for all material presented in lectures. Class participation is highly encouraged.

 

Laboratories: Weekly labs are assigned. Students are responsible for all material covered at the problem sessions.

 

Student Presentations:  Students will be required to present on a topic related to the course and their particular interests.

 

Exams: Some years may include exams on materials.  This will depend on particular course content for that year.

                      

Course Project:  Some years may include a course project.  This will depend on particular course content for that year. 

 

Course grade

 

The course grade will be based on labs, exams and a final project:

 

    Labs: 20%

    Presentation: 10%

    Exams: 30%

    Final Project: 40%.

 

Textbooks

 

Contents and texts will vary year by year, but examples include:

 

·      Building Microservices by Sam Newman (ISBN 978-1491950357)

·      Designing Data-Intensive Applications by Martin Kleppmann (ISBN 978-1449373320)

·      Advanced Analytics with Spark: Patterns for Learning from Data at Scale by Sandy Ryza, et. al. (ISBN: 978-1491912768)

·      Next Generation Databases by Guy Harrison (ISBN 978-1484213308)

·      Hadoop Application Architectures: Designing Real-World Big Data Applications by Mark Grover (ISBN 978-1491900086)

·      Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation by Jez Humble (ISBN 978-0321601919)

·      Docker in Practice by Ian Miell (ISBN 978-1617292729)

Course Prerequisites

Core Programming

Other Prerequisites

Programming knowledge of Java. Knowledge of python and Scala are helpful but not required.

Overlapping Classes

This class is scheduled at a time that conflicts with these other classes:

  • MPCS 55001-1 -- Algorithms
  • MPCS 53001-1 -- Databases
  • MPCS 52011-2 -- Introduction to Computer Systems
  • MPCS 51033-1 -- Backends for Mobile Applications
  • MPCS 53112-1 -- Advanced Data Analytics