Applied Software Engineering II

Title Applied Software Engineering II (51221)
Quarter Autumn 2017
Instructor Mark Shacklette (jmshackl@uchicago.edu)
Website

https://www.classes.cs.uchicago.edu/archive/2017/fall/51221-1/syllabus.html

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)

Prerequisites (Courses)

Core Programming

Prerequisites (Other)

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

Satisfies

Elective
Software Engineering Specialization

Time

Tuesday 5:30-8:30 pm

Location

Young 106