CSE E81 532S: Advanced Multi-Paradigm Software Development

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

Fall 2015

This page is available through: http://classes.cec.wustl.edu/~cse532/
or at: http://www.cse.wustl.edu/~cdgill/courses/cse532/

Final Exam:
Wed Dec 16, 1-3pm, in Lab Sciences 250


Contents

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


Times and Locations

Discussions/Studios: Urbauer 218, Monday and Wednesday, 1-2:30pm


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 the first day of class and the days when reviews and the midterm exam are given, you will work in small groups on studio exercises that will emphasize two main areas: 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 second on successful use of software engineering patterns and idioms, in combination with those programming ideas.

Reading materials will be assigned and/or suggested 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.

Please note that the order of topics to be discussed is provisional, and that at least some rearragement of topics is likely during the semester, depending on a variety of factors including which issues and interests are raised in class. Sufficient advance notice of any changes will be given in such cases, so that readings and other preparations for class remain manageable.

Date
Patterns and Idioms
C++ Language and Libraries
Mon Aug 24
Course Introduction
(slides: in ppt format)
Wed Aug 26
(studio exercises)
Concurrent and Networked Objects
(slides: in ppt format)

Wrapper Facade Pattern
(slides: in ppt format)
 
Mon Aug 31
(studio exercises)
Thread-Specific Storage Pattern
(slides: in ppt format)
Concurrency and Threads in C++11
Assigned Reading: [Williams] Chapters 1 and 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)
Wed Sep 2
(studio exercises)

Lab 0
Assigned Wed 9/2/15
Due by 11:59pm Tue 9/15/15
Synchronization Patterns
(slides: in ppt and format)
Sharing Data Between Threads in C++11
Assigned Reading: [Williams] Chapter 3 and Appendix A.1
(optional: [Stroustrup] Chapter 42.3)
Mon Sep 7


Labor Day Holiday (no school)
Wed Sep 9
(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

Mon 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
Wed Sep 16
(studio exercises)


Lab 1
Assigned Wed 9/16/15
Due by 11:59pm Tue 10/6/15
  Memory Model and Operations on Atomic Types in C++11
Assigned Reading: [Williams] Chapter 5
(slides: in ppt format)

Mon Sep 21
(studio exercises)
  Designing Lock-Free Concurrent Data Structures in C++11
Assigned Reading: [Williams] Chapter 7
(slides: in ppt format)
Wed Sep 23
(studio exercises)

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

Mon Sep 28
(studio exercises)
  Advanced Thread Management in C++11
Assigned Reading: [Williams] Chapter 9
(slides: in ppt format)

Wed Sep 30
(studio exercises)
  Testing and Debugging Multithreaded Applications
Assigned Reading: [Williams] Chapter 10
(slides: in ppt format)
Mon Oct 5
(studio exercises)
Half-Sync/Half-Async and Leader/Followers Patterns
(slides: in ppt format)
 
Wed Oct 7
no additional exercises assigned: after design discussion and lecture, open time to catch up on studios or get started on lab 2 (both are optional)

Lab 2
Assigned Wed 10/7/15
Due by 11:59pm Sun 11/1/15 (please note new deadline)
Lab 2 Design Discussion
(slides: in ppt format)

A Concurrency and Synchronization Pattern Language
(slides: in ppt format)

Mon Oct 12
Review for Midterm Exam
(slides: in ppt format)

Wed Oct 14
Midterm Exam
1:10-2:30pm (during lecture/studio period)
Seigle Hall, Room 109 (on the ground floor level)
open book, open notes (hard copy only, no electronics)
Mon Oct 19

no additional exercises assigned: after grading review, open time to catch up on studios or work on lab 2 (optional)
Midterm Grading Review and Discussion

 
Wed Oct 21
(studio exercises)
From Concurrent to Networked Software Systems
(slides: in ppt format)

 
Mon Oct 26
(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
Wed Oct 28
Lab 3
Assigned Wed 10/28/15
Due by 11:59pm Fri 12/4/15 (please note new deadline)


(studio exercises)
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
Mon Nov 2
(studio exercises)
Proactor Pattern
(slides: in ppt format)
Optional Reading: [C++NPv2] Chapter 8
Optional Reading: [APG] Chapter 8
Wed Nov 4
no additional exercises assigned: after lecture, open time to catch up on studios or work on lab 3 (optional)
An Event Handling Pattern Language
(slides: in ppt format)
 
Mon Nov 9
(studio exercises)
Interceptor Pattern
(slides: in ppt format)
Optional Re-reading: [Williams] Chapter 9.2
Optional Reading: [C++NPv2] Chapter 3
Wed Nov 11
(studio exercises)
Component Configurator Pattern
(slides: in ppt format)
Optional Reading: [C++NPv2] Chapter 5
Optional Reading: [APG] Chapter 19
Mon Nov 16
Guest Lecturer: David Ferry
No additional exercises assigned, though if you'd like to try the optional enrichment exercises from the interceptor studio exercises, they will let you try out some basic ideas for the Extension Interface pattern.
Extension Interface
(optional: [POSA2, pp. 141-174])
(slides in ppt format)
 
Wed Nov 18
no additional exercises assigned: after lecture, open time to catch up on studios or work on lab 3 (optional):
A Service Access and Configuration Pattern Language
(slides: in ppt format)
 
Mon Nov 23
Course Summary and Review
(slides: in ppt format)


Wed November 25

Thanksgiving Break (no school)
Mon Nov 30
Open time to complete studio exercises and/or work on lab 3 (optional)
Wed December 2
Open time to complete studio exercises and/or work on lab 3 (optional)
Fri Dec 4
Deadline for posting answers to studio exercises is 11:59pm on
Friday Dec 4 (last day of Engineering Classes)
Wed Dec 16
Final Exam 1-3pm, in Lab Sciences 250
open book, open notes (hard copy only, no electronics)


Labs

There will be 4 lab projects this semester. Labs should be turned in via e-mail to the cse532@seas.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

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 midterm and final exams will be comprehensive, and 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 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 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
Midterm exam 15 percent
Final exam 25 percent
Participation 10 percent


Cheating

Put simply, from Stan Kwasny's statement on cheating:

"Cheating is the willful misrepresentation of someone else's work as your own, and will not be tolerated in this course."

For this course, examples of cheating include but are not limited to: collaboration on an exam, using unapproved sources of information during an exam, or sharing of significant portions of code or designs between programming teams.

This is a very serious matter. Anyone found cheating will at a minimum receive the negative value of the assignment in question (for example if an assignment is worth 10 percent, a score equivalent to -10 percent will be assigned), or possibly an F for the course. Further action may be taken in extreme cases, including referral to the Engineering School's formal academic integrity process.

Furthermore, our policy is that we will make the final determination on what constitutes cheating. If you suspect that you may be entering an ambiguous situation, it is your responsibility to clarify it before we detect it: if in doubt, please ask.