CSE E81 532S: Advanced Multi-Paradigm Software Development

The Faculty of the McKelvey School of Engineering have approved a special motion regarding counting classes taken pass/fail this semester towards degree requirements. For this course any overall weighted score of 70 or better will be given a grade of pass if the course is being taken pass/fail.

Professor: Chris Gill
e-mail: cdgill@wustl.edu
phone: (314) 935-7538
office: Jolley 518 (office hours are by appointment)

Spring 2020

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

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

Exam 1: Wednesday February 19th 8:30am to 9:50am in Jolley 309

Exam 2: Released Wednesday April 15th, due Thursday April 16th by 11:59pm


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

Discussions/Studios: Urbauer 218, Monday and Wednesday, 8:30-9:50am


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 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
Mon Jan 13
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
Wed Jan 15
(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)
Intro to Generic Programming in C++
(optional: Wikipedia article on generic programming)
Mon Jan 20


Martin Luther King Jr. Day (no course meeting)
Wed Jan 22
(studio exercises)

Lab 0 Assigned
Due 11:59pm Tue Feb 4
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)
Mon Jan 27
(studio exercises)
Concurrency Patterns
Monitor Object Pattern
(slides: in ppt format)

Event Handling Patterns
Asynchronous Completion Token Pattern
(slides: in ppt format)
Synchronizing Concurrent Operations in C++11
Assigned Reading: [Williams] Chapter 4 and Appendix A.5
Wed Jan 29
(studio exercises)

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

Wed Feb 5
(studio exercises)

Lab 1 Assigned
Due by 11:59pm Fri Mar 6 (note new deadline)
  Designing Lock-Free Concurrent Data Structures in C++11
Assigned Reading: [Williams] Chapter 7
(slides: in ppt format)
Mon Feb 10
(studio exercises)

  Designing Concurrent Code in C++11
Assigned Reading: [Williams] Chapter 8
(slides: in ppt format)

Wed Feb 12
(studio exercises)
  Advanced Thread Management in C++11
Assigned Reading: [Williams] Chapter 9
(slides: in ppt format)

Mon Feb 17
Review for Exam 1
(slides: in ppt format)

All studios in the course so far are due by 11:59pm Tue Feb 18
Wed Feb 19
Exam 1
8:30am to 9:50am in Jolley 309
open book, open notes (hard copy only, no electronics)
Mon Feb 24
(studio exercises)
  Testing and Debugging Multithreaded Applications
Assigned Reading: [Williams] Chapter 11
(slides: in ppt format)
Wed Feb 26
(studio exercises)
Half-Sync/Half-Async and Leader/Followers Patterns
(slides: in ppt format)
 
Mon Mar 2
No additional exercises assigned: after the design discussion, open time to catch up on studios or get started on lab 2

Lab 2
Assigned Mon 3/2/20
Due by 11:59pm Sun Apr 5 (note new deadline)
Lab 2 Design Discussion
(slides: in ppt format)
 
Wed Mar 4
No additional exercises assigned: after the exam grading review and the lecture, open time to catch up on studios or work on lab 2
Exam 1 Grading Review and Discussion A Concurrency and Synchronization Pattern Language
(slides: in ppt format)

Mon Mar 9, Wed Mar 11, Mon Mar 16, and Wed Mar 18


Extended Spring Break (no course meetings)
Mon Mar 23
(studio exercises)
From Concurrent to Networked Software Systems
(slides: in ppt format)

 
Wed Mar 25
(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
Mon Mar 30
(studio exercises)

Lab 3
Assigned Mon 3/30/20
Due by 11:59pm Fri 5/1/20

Acceptor/Connector Pattern
(slides: in ppt format)

Lab 3 Design Discussion
(slides: in ppt format)
Optional Reading: [C++NPv2] Chapter 7
Optional Reading: [APG] Chapter 7.6
Optional Re-reading: [Williams] Chapter 9.2
Wed Apr 1
(studio exercises)
Interceptor Pattern
(slides: in ppt format)

Extension Interface
(slides in ppt format)
Optional Reading: [C++NPv2] Chapter 3
Optional Reading: [POSA2, pp. 141-174]
Mon Apr 6
(studio exercises)
Component Configurator Pattern
(slides: in ppt format)
Optional Reading: [C++NPv2] Chapter 5
Optional Reading: [APG] Chapter 19
Wed Apr 8
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)
 
Mon Apr 13
Exam 2 Review
(slides: in ppt format)

All studios since the first exam are due by 11:59pm Tue Apr 14
Wed Apr 15
Exam 2: take home, open book, open notes
Exam copy: in doc and pdf formats.
Due via electronic submission by 11:59pm St. Louis time (CDT, GMT-5) Thu April 16

Mon Apr 20 and Wed Apr 22
Open time to work on lab 3, virtual office hours during scheduled class times


Labs

There will be 4 lab projects this semester. Labs should be turned in via e-mail to the eng-cse532@email.wustl.edu account, and will be graded and returned to you electronically as well. Each lab assigment will contain 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

The Faculty of the McKelvey School of Engineering have approved a special motion regarding counting classes taken pass/fail this semester towards degree requirements. For this course any overall weighted score of 70 or better will be given a grade of pass if the course is being taken pass/fail.

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, labs, etc.

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 (see below). Cheating also degrades the value of the degree earned by those who complete their work with integrity.

Academic integrity is a serious matter in this course, and anyone found to be cheating or helping someone else cheat will receive a negative score equal in magnitude to the value of the assignment in question (e.g., cheating on an assignment worth 10% of the course grade would result in -10% being assigned for a total loss of 20% from the course grade, which is twice as large a loss as simply not turning in the assignment). The instructor will determine what constitutes cheating in this course. If in any doubt, please ask 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.