CSE E81 532S: Advanced Multi-Paradigm Software Development

Professor: Chris Gill cdgill@cse.wustl.edu
(314) 935-7538
  Office hours: Jolley 514 (by appointment)
Teaching Assistant: Justin Wilson wilsonj@cse.wustl.edu
(314) 935-7535
  Office hours: Jolley 515 (by appointment)

Fall 2011

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


Contents

  1. Times and Locations
  2. Course Description
  3. Prerequisites
  4. Forum   (Click here to go directly to the CSE532 Messageboard.)
  5. Discussions/Lectures
  6. Labs
  7. Coding Standards
  8. Textbooks and Other Resources
  9. Grading
  10. Cheating


Times and Locations

Discussions/Lectures: Lopata 400 Linux Lab, Monday and Wednessday, 10:00-11:30 am


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


Forum

Please note that the posting on the course forum is a vital part of your CSE 532 experience. Participation there (i.e., quantity and quality of your posts) as well as in class will be considered as part of your participation grade.

Please submit ALL questions and concerns of a public nature to the CSE532 Messageboard, which can be found on the web at http://classes.engineering.wustl.edu/cse532/bb/. To use the CSE 532 Messageboard, you should first click on the Register link found on that page, and follow the instructions you are given. You are encouraged answer each other's questions there!

Do not e-mail technical questions to the professor or teaching assistant: instead, please post for all to see, consider, and respond.


Studios

This semester the course will be offered for the first time 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 exams are given, you will work in small groups on studio exercises that will emphasize two main areas: generic programming techniques in C++, which we will cover first as review and for enrichment of core concepts, and then second on successful use of patterns and idioms, in combination with those generic programming ideas.

Reading materials will be 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.

Date
Patterns and Idioms
Generic Programming with C++
August
31
Course Introduction
[slides: in ppt format]
September
5

Labor Day Holiday (no school)
7
studio exercises
Concurrent and Networked Objects
[C++NPv1 Chapters 0, 1, and 2]
(optional: [POSA2, Chapter 1])
[slides: in ppt format]
Wrapper Facade
[C++NPv1 Chapter 3]
(optional: [POSA2, pp. 47-74])
[slides: in ppt format]
 
12
studio exercises
  Intro to Generic Programming in C++
(optional: Wikipedia article on generic programming)
[slides: in ppt format]

Algorithms and Ranges
(optional: SGI's Introduction to the Standard Template Library)
(optional: Wikipedia article on the Standard Template Library)
[slides: in ppt format]
14
studio exercises
Lab 0 Assigned
Teams Declared by 11:59pm Sunday 9/18/11
Solutions Due by 11:59pm Friday 9/30/11
  Iterators
[slides: in ppt format]
19
Guest Lecturer: Justin Wilson
studio exercises
  Function Objects
[slides: in ppt format]
21
studio exercises
  Containers
[slides: in ppt formats)
26
studio exercises
Event Handling Patterns
[C++NPv2 Chapter 1]
(optional: [POSA2, pp. 175-177])
Asynchronous Completion Token
[C++NPv2 pp. 63, 64, 263, 291]
(optional: [POSA2, pp. 261-284])
[slides: in ppt format]
 
28
studio exercises
Lab 1 Assigned
Teams Declared by 11:59pm Sunday 10/2/11
Solutions Due by 11:59pm Friday 10/21/11
Reactor
[C++NPv1 Chapter 7]
[C++NPv2 Chapters 3, 4]
(optional: [POSA2, 179-214])
(optional: APG Chapter 7)
[slides: in ppt format]
 
October
3
studio exercises
Acceptor/Connector
[C++NPv2 Chapter 7]
(optional: [POSA2, pp. 285-322])
(optional: APG Chapter 7.6)
[slides: in ppt format]
 
5
optional enrichment exercises
Proactor
[C++NPv2 Chapter 8]
(optional: [POSA2, 215-260])
(optional: APG Chapter 8)
[slides: in ppt format]
 
10
An Event Handling Pattern Language
[slides: in ppt format]

Lab 1 Design Discussion
[slides: in ppt format]
 
12
studio exercises
Synchronization Patterns
[C++NPv1 Chapter 10]
(optional: [POSA2, Chapter 4])
(optional: APG Chapters 12.2, 12.3, 14.1, and 14.2)
[slides: in ppt and format]
 
17
 
19
Lab 2 Assigned
Teams Declared by 11:59pm Sunday 10/23/11
Solutions Due by 11:59pm Friday 11/18/11 Please note new deadline!
Review for Midterm Exam

[slides: in ppt format]
24
Midterm Exam
(during lecture/studio period, in Bryan 509C)
open book, open notes (hard copy only, no electronics)
26
Midterm Grading Review and Discussion

Lab 2 Design Discussion
[slides: in ppt format]

31
studio exercises
Concurrency Patterns
[C++NPv1 Chapters 5, 6, 9]
(optional: [POSA2, pp. 365-367])
[slides: in ppt format]

Monitor Object
[C++NPv1 pp. 133, 224]
[C++NPv2 pp. 165]
(read again after the lecture, and later as needed)
(optional: [POSA2, pp. 399-422])
[slides: in ppt format]
 
November
2
studio exercises
Active Object
[C++NPv2 Chapter 6]
(optional: [POSA2, pp. 369-398])
(optional: APG Chapter 15)
[slides: in ppt format]

Thread-Specific Storage
[C++NPv1 pp. 130, 186, 187, Section 9.4]
(optional: [POSA2, pp. 475-504, Chapters 6-8])
(optional: APG Chapter 14.3)
[slides: in ppt format]
 
7
studio exercises
Half-Sync/Half-Async
[C++NPv1 pp. 16, 112, 113, 122, 206]
[C++NPv2 pp. 155, 156, ]
(read again after the lecture, and later as needed)
(optional: [POSA2, pp. 423-445])
(optional: APG Chapter 16.2)
[slides: in ppt format]
 
9
Guest Lecturer: Justin Wilson
Leader/Followers
[C++NPv1 pp. 112, 113]
[C++NPv2 pp. 99, 100]
(read again after the lecture, and later as needed)
(optional: [POSA2, pp. 447-474])
(optional: APG Chapter 16.3)
[slides: in ppt format]
 
14
Concurrency and Synchronization Pattern Language I
[slides: in ppt format]
 
16
Lab 3 Assigned
Teams Declared by 11:59pm Sunday 11/20/11
Solutions Due by 11:59pm Friday 12/16/11
Concurrency and Synchronization Pattern Language II
[slides: in ppt format]
 
21
Lab 3 Design Discussion
[slides: in ppt format]
 
23

Thanksgiving Holiday (no school)
28
Guest Lecturer: Justin Wilson
studio exercises
Service Access and Configuration Patterns
(optional: [POSA2, pp. 43-45])
Component Configurator
[C++NPv2 Chapters 2, 5]
(optional: [POSA2, pp. 75-107])
(optional: APG Chapter 19)
[slides: in ppt format]
 
30
Guest Lecturer: Justin Wilson
studio exercises
Interceptor
(optional: [POSA2, pp. 109-140])
[slides: in ppt format]
 
December
5
Extension Interface
(optional: [POSA2, pp. 141-174])
[slides: in ppt format]
 
7
A Service Access and Configuration Pattern Language
[slides: in ppt format]
 
12
Course Summary and Review
[slides: in ppt format]
Take Home Final Exam handed out
19
Deadline for posting answers to studio exercises is 4pm on Monday December 19

Take Home Final Exam Due by 4pm on Monday December 19
Hand in completed exams to Jayme in the CSE Department Office, Bryan 509 (if she's not there please put it in Dr. Gill's CSE Department Office mailbox)
or hand in to Dr. Gill in his office, Jolley 514


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. An e-mail turn-in process (via make) that submits your files for grading will be provided, though each assignment will have a more detailed description of other acceptable ways to e-mail your solution.

Labs will be performed in teams of 2 or 3: teams may be different for each lab assignment or may remain the same for all labs. Team members may choose one-another and post their chosen teams to the course forum according to the instructions in the lab assignments: people who do not identify a team by the designated cut-off will be assigned to teams arbitrarily.

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 extenuating circumstances.

You may discuss your lab projects with other students outside your team only during lecture or on the course forum. 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.


Coding Standards

Many organizations impose coding standards on programmers. These standards can be very strict. In this class, the most important standard is to be consistent and show good encapsulation and modularity. As the course progresses, we may identify specific coding guidelines that must be followed.

If you'd like to look at some coding standards, the guidelines that the ACE developers use is a good place to start. It's reasonably concise and very relevant to C++ coding activities both when using the CSE 532 ACE builds for Linux or Windows, and in other development contexts.


Textbooks and Other Resources

Required texts:

We'll use the required textbooks both for class material and as references. The lecture schedule will be augmented with references to revelant portions of the required texts. Please read each assigned section before the class meeting where it will be discussed.

Optional texts:

Other information sources:

If you're looking to build your library (in order of relevance):


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, and on the course forum.

Labs 55 percent
   Lab 0:  5 percent
   Lab 1:  10 percent
   Lab 2:  15 percent
   Lab 3:  25 percent
Midterm exam 15 percent
Final exam 25 percent
Participation   5 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 a 0 for the assignment in question, or possibly an F for the course. Further action may be taken in extreme cases.

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.