CSE E81 532S: Advanced Multi-Paradigm Software Development

Professor: Chris Gill
e-mail: cdgill@wustl.edu
office: McKelvey 1039 (office hours outside of class meetings are by appointment)

Fall 2021

Course web page: http://www.cse.wustl.edu/~cdgill/courses/cse532/

Course Piazza page: https://piazza.com/wustl/fall2021/cse532s/home

Exam 1: 10:00am to 11:20am Tuesday October 5th in McKelvey 1020

Exam 2: 10:00am to 11:20am Thursday November 18th in McKelvey 1020


Contents

  1. Times and Locations
  2. Course Description
  3. Prerequisites
  4. Discussions/Studios
  5. Labs
  6. Textbooks and Other Resources
  7. Grading
  8. Academic Integrity


Times and Locations

Lectures/Discussions/Studios: Urbauer 216, 10-11:20am Tuesdays and Thursdays


Course Description

Developing high quality software is hard; developing high quality software that is reusable under a range of requirements is harder still. Advanced software development paradigms, such as Generic Programming, Object-Oriented Programming, Patterns, and Frameworks, help to constrain accidental complexities of development, and thus aid in producing higher quality, more reusable solutions.  In many development settings more than one paradigm may be applied to best address the requirements at hand, and the interactions between the paradigms are of fundamental importance.  To apply multiple development paradigms effectively, developers must learn through experience how the strengths and limitations of each approach can be managed to develop high quality reusable software.


Prerequisites


Discussions/Studios

This course is offered in a studio/lab format, to emphasize active learning through hands-on participation. Except for a few open lab sessions, and the days when exams reviews and the exams themselves are held, you will work in small groups on studio exercises that will emphasize two main topics: (1) programming techniques in C++, which we will cover first as review and for enrichment of core concepts (especially with respect to the C++11 standard), and then (2) successful use of software engineering patterns and idioms, in combination with those programming techniques.

Reading materials will be assigned for many of the topics. It is to your advantage to go over the readings prior to class time, and to ask questions about anything that may be unclear. Supplemental resources including web materials and additional books that may be helpful will also be suggested.

Date
Patterns and Idioms
C++ Language and Libraries
Tue Aug 31
Course Introduction
(slides: in ppt format)

(studio exercises)

Concurrent and Networked Objects
(slides: in ppt format)

Wrapper Facade Pattern
(slides: in ppt format)
Assigned Reading: [Williams] Chapter 1
Thu Sep 2
(studio exercises)
Thread-Specific Storage Pattern
(slides: in ppt format)
Concurrency and Threads in C++11
Assigned Reading: [Williams] Chapter 2
(optional: [Stroustrup] Chapter 42.1-42.2)
(slides: in ppt format)

Intro to Generic Programming in C++
(optional: Wikipedia article on generic programming)
(slides: in ppt format)
Tue Sep 7
(studio exercises)

Lab 0 Assigned
Due 11:59pm Mon Sep 20
Synchronization Patterns
(slides: in ppt format)
Sharing Data Between Threads in C++11
Assigned Reading: [Williams] Chapter 3 and Appendix A.1
(optional: [Stroustrup] Chapter 42.3)
Thu Sep 9
(studio exercises)
Event Handling Patterns
Asynchronous Completion Token Pattern
(slides: in ppt format)

Concurrency Patterns
Monitor Object Pattern
(slides: in ppt format)
Synchronizing Concurrent Operations in C++11
Assigned Reading: [Williams] Chapter 4 and Appendix A.5
Tue Sep 14
(studio exercises)

Active Object Pattern
(slides: in ppt format)
Designing Lock-Based Concurrent Data Structures in C++11
Assigned Reading: [Williams] Chapter 6
Thu Sep 16
(studio exercises)
  Memory Model and Operations on Atomic Types in C++11
Assigned Reading: [Williams] Chapter 5
(slides: in ppt format)
Tue Sep 21
(studio exercises)

Lab 1 Assigned
Due by 11:59pm Wed Oct 13
  Designing Lock-Free Concurrent Data Structures in C++11
Assigned Reading: [Williams] Chapter 7
(slides: in ppt format)
Thu Sep 23
(studio exercises)

  Designing Concurrent Code in C++11
Assigned Reading: [Williams] Chapter 8
(slides: in ppt format)
Tue Sep 28
(studio exercises)
  Advanced Thread Management in C++11
Assigned Reading: [Williams] Chapter 9
(slides: in ppt format)
Thu Sep 30
Review for Exam 1
(slides: in ppt format)

All studios in the course so far are due by 11:59pm Mon Oct 4
Tue Oct 5
Exam 1
10:00am to 11:20am in McKelvey 1020
open book, open notes (hard copy only, no electronics)
Thu Oct 7
(studio exercises)
  Testing and Debugging Multithreaded Applications
Assigned Reading: [Williams] Chapter 11
(slides: in ppt format)
Sat Oct 9 through Tue Oct 12


Fall Break (no course meetings)
Thu Oct 14
(studio exercises)

Lab 2 Assigned
Due by 11:59pm Mon Nov 8
Half-Sync/Half-Async and Leader/Followers Patterns
(slides: in ppt format)

Lab 2 Design Discussion
(slides: in ppt format)
 
Tue Oct 19
No additional exercises assigned: after the lecture presentation and discussion, open time to catch up on studios or work on lab 2
  A Concurrency and Synchronization Pattern Language
(slides: in ppt format)
Thu Oct 21
No additional exercises assigned: after the exam grading review, open time to catch up on studios or work on lab 2
Exam 1 Grading Review and Discussion
 
Tue Oct 26
(studio exercises)
From Concurrent to Networked Software Systems
(slides: in ppt format)
 
Thu Oct 28
(studio exercises)
Reactor Pattern
(slides: in ppt format)
Optional Reading: [C++NPv1] Chapter 7
Optional Reading: [C++NPv2] Chapters 3 and 4
Optional Reading: [APG] Chapter 7
Tue Nov 2
(studio exercises)
Acceptor/Connector Pattern
(slides: in ppt format)
Optional Reading: [C++NPv2] Chapter 7
Optional Reading: [APG] Chapter 7.6
Optional Re-reading: [Williams] Chapter 9.2
Thu Nov 4
(studio exercises)
Extension Interface Pattern
(slides in ppt format)

Interceptor Pattern
(slides: in ppt format)
Optional Reading: [C++NPv2] Chapter 3
Optional Reading: [POSA2, pp. 141-174]
Tue Nov 9
(studio exercises)

Lab 3 Assigned
Due by 11:59pm Fri Dec 10
Component Configurator Pattern
(slides: in ppt format)

Lab 3 Design Discussion
(slides: in ppt format)
Optional Reading: [C++NPv2] Chapter 5
Optional Reading: [APG] Chapter 19
Thu Nov 11
no additional exercises assigned: open time to catch up on studios or work on lab 3
A Service Access and Configuration Pattern Language
(slides: in ppt format)
 
Tue Nov 16
Exam 2 Review
(slides: in ppt format)
Thu Nov 18
Exam 2
10:00am to 11:20am in McKelvey 1020
open book, open notes (hard copy only, no electronics)
Tue Nov 23
Open time to work on studios or lab 3, office hours in Urbauer 216 during scheduled class time

All studios since the first exam are due by 11:59pm Tue Nov 23 (note new deadline)

Wed Nov 24 through Sun Nov 28


Thanksgiving Break (no course meetings)
Tue Nov 30
Open time to work on lab 3, office hours in Urbauer 216 during scheduled class times

Thu Dec 2
Tue Dec 7
Exam 2 Grading Review and Discussion After the exam grading review, open time to work on lab 3, office hours in Urbauer 216 during scheduled class time
Thu Dec 9
Open time to work on lab 3, office hours in Urbauer 216 during scheduled class time (held by James Orr, Guest Lab Facilitator)


Labs

There will be 4 lab projects this semester, which will be turned in via Canvas, and will be graded and returned to you electronically as well. Each lab assigment will give details of the procedure for turning in the lab. Labs will increase in length, value, and difficulty throughout the semester. The exact due date will be specified in each lab description.

Each lab will require a lab report. Report format and length and content requirements will be described in each lab assignment. The actual report will be submitted via e-mail, as well, so it must go into a file.

Labs will be performed in teams of 1, 2 or 3 people (but not more than 3): teams may be different for each lab assignment or may remain the same for all labs. Each team should submit its solution and lab report for each project.

Labs submitted within 24 hours after the posted deadline will be accepted with a 10% penalty up front, and labs submitted between 24 and 48 hours after the posted deadline will be accepted with a 20% penalty up front. Labs submitted after that will not be graded except in the case of extenuating circumstances approved by the professor.

You may discuss your lab projects with other students outside your team only during course meeting times. Discussion of lab projects within a team, is encouraged at any time. Each team must design and implement its own solution, and prepare its own report.

The following labs have been assigned so far in the course:


Textbooks and Other Resources

Required text:

We'll use the required textbook both for class material and as a reference. Revelant portions of the required text will be assigned throughout the semester: please read each assigned section before the course meeting where it will be discussed.

Optional texts:

Other information sources:


Grading

Labs will constitute a major portion of the grade in this course. This reflects the course's emphasis on hands-on exploration of the material.

The in-semester exams will be roughly proportioned to cover the material in both of the tracks in the course. The best way to study for the exams is to keep up with the readings, studio exercises, and labs during the semester. The first exam will cover the material up to that point in the course, and the second exam will cover the material after the first exam.

The last grading component is an evaluation of your participation in the class, and an evaluation of your application of the tools and techniques discussed in class and used in the studios and labs. This component is separated out to:

  1. broaden the evaluation criteria,
  2. reduce the weight of the exams a bit, and
  3. encourage active participation in discussions/lectures, studios, labs, etc.

Completing and submitting the assigned studio exercises by the specified deadlines will constitute a significant baseline for the participation grade.

Labs 50 percent
   Lab 0:  5 percent
   Lab 1:  10 percent
   Lab 2:  15 percent
   Lab 3:  20 percent
Exam 1 20 percent
Exam 2 20 percent
Participation 10 percent


Academic Integrity

Each studio and lab assigned in this course is expected to be completed collaboratively by up to three people (and not more than that). Student teams may change from assignment to assignment, but the sharing of code between teams without prior permission of the instructor is strictly prohibited, and you must acknowledge and document in detail all contributions that anyone has made to the work.

Exams must be completed individually without assistance from any other person and without reference to materials or devices, except as specifically allowed by the instructor (documentation of what is allowed will be described in class, provided in the corresponding exam review slides, and written on the font page of the exam).

Cheating costs everyone something. Someone who cheats misses out on the intended opportunity to improve through the assigned work, and like anyone helping them cheat is at risk of diminished reputation as well as specific sanctions. Cheating also degrades the value of the degree earned by those who complete their work with integrity. If you have any doubt about whether something is allowed under the academic integrity policy for this course, please ask your instructor first.

Academic integrity is itself worth studying and thinking about as a key component of your education. Please read, familiarize yourself with, and reflect on the McKelvey School of Engineering's and Washington University's undergraduate and graduate policies on academic integrity.