Home Assignments Lecture Blog Resources Discussion Group

91.204.201 Computing IV, Spring 2015
Section 201: Prof. Fred Martin, ⚠ (:html:)<a href="" onclick="'', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0, menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">click for fred's email</a>,(:htmlend:) MWF 10a–10:50a, Olsen 408

Office hours: W 11a–12p (OS208), R 2p–3p (Olney 524), F 11a–12p (OS208)

Section 202: Victor Grinberg (homepage), MWF 10a–10:50a, Olsen 311

Jing Xu, Office hours: T 9:30a–11:30a, Olsen 212A (201 grading)
Shan (Ivory) Lu, Office hours: TR 9a–10a, Olsen 212A (202 grading)
Note: Any student can meet with either TA.

Catalog Description


Advanced C++ programming, which deepens students' understanding of object-oriented analysis and design. Basic software engineering principles and practice, including work with APIs. Topics may include program translation, web software, parsing, and regular expressions.


Materials for this course will provided on this site and in links to other sites. We will not use a textbook.

Expected Learning Outcomes

At the end of this course, you will be able to:

  1. employ appropriate object-oriented (OO) techniques in C++ in the development of 500+ line programs
  2. analyze technical specifications for a variety of algorithms, and create working code based on specs provided
  3. use the Unix shell for C/C++ code development, including use of the gcc compiler and linker tools, and Makefiles
  4. use the C++ SFML (simple fast media library) for event handling, graphics, animation, and sound
  5. employ unit testing in your software development process
  6. use industry-standard C++ API libraries, including Boost (e.g. unit testing, regular expression, and date/time libraries)
  7. describe the value (and limitations) of coding standards, and use a static style checker to review your own code
  8. document your work for technical written presentations

Course Overview

  • We will be writing lots of code
  • We will be doing it in C++
  • We will be using some pretty cool APIs, including SFML, a free, open-source “simple fast media library“ for C++, which is available for Mac, Win, and Linux (translation: it's a gaming library)
  • Best of all, we'll be working through some awesome problem sets developed over the last 15 years at Princeton, led by Robert Sedgewick.

The Princeton stuff is great because it's all about how computing connects to the larger world.

It's not the usual stuff about using computing to do ever-more complicated things. This is necessary and valuable, but it's kind of self-referential and insular.

We will do the following:

  • PS0 Learn how to use to events, windows, and animation with the Simple Fast Media Library (SFML)
  • PS1 Use a recursive class definition to draw Sierpinski's triangle, as well as your own original recursive graphic designs (and learn how to use a code style checker)
  • PS2a PS2b Implement a linear feedback shift register (LFSR), and use it to cryptographically encode and decode an image (and learn about unit testing)
thanks Princeton
  • PS3a PS3b Use Newton's laws and the “leapfrog finite difference approximation” method to create a realistic, animated simulation of planetary motion in our solar system
thanks Princeton
  • PS4 Compare ASCII strings to compute their “edit distance”—a technique widely used in bioinformatics for DNA analysis—and perform space and time analyses of the dynamic programming algorithm employed in the solution
thanks Princeton
  • PSx (optional assignment) This assignment gives you a chance to resubmit a previous homework (for higher grade.)
  • PS5a PS5b Use a ring buffer to simulate the vibration of a guitar string, using the Karplus-Strong algorithm, and generate a set of audio files to make a computational synthesizer
thanks Princeton
  • PS6 Analyze a body of text to build a Markov model, and use that model to generate randomized but plausible text output—a practical implementation of Claude Shannon's classic work on information theory, which is used in many present-day applications, including speech recognition and predictive typing
thanks Princeton
  • PS7a PS7b In a partnership with Kronos (Chelmsford, MA), parse large error logs files generated by malfunctioning InTouch devices (their hardware time-clock unit) using regular expression and time-parsing libraries. Note: these log files are not neatly well-formed as is proper XML!
thanks Kronos

Based on the historical role of Computing IV in UMass Lowell's computer science curriculum:

  • You will become much more comfortable writing C++ code and using object-oriented methods.
  • You will gain experience architecting solutions to reasonably well-structured problems.
  • You will learn how to use some great C++ APIs (SFML; Boost).
  • You'll gain practice with critical and useful software engineering practices (coding standards, unit testing and test-driven development, and documentation).

Collectively, these things represent to us what is the most important learning outcome of the course, which is you progressing down your journey of becoming an effective and confident software engineer.

Also, we will use the Unix shell and Makefiles in your software development. This will be done in a Unix environment—either Linux or Mac. (Linux is recommended unless you are comfortable getting libraries working on your own.)

This is explicit learning outcome of the course, and it's required. If you're a Windows person, we'll be setting up for Linux development in the first week of the course.

You'll be seeing Emacs, the Unix shell, and Makefiles. You're welcome to use your own favorite text editor—as long as it's capable of helping you follow the coding standards we'll be using.

OK, that's the course overview! Now on to some more tactical things.

Course Structure and Grading

The class will have regular weekly assignments, which will be graded and returned.

These assignments are worth 50% of your overall grade.

Assignments will be accepted up to 1 week late with a 50% reduction in that assignment's value.

There will be two in-class exams during the semester. Each is worth 10% of your overall grade.

Instead of a written final, you will create a portfolio of your cumulative semester's work. This large document is 25% of your overall grade.

Classroom participation is 5% of your overall grade.

To summarize:
50% Weekly homeworks
20% Two exams
25% Final portfolio
5% Classroom participation

Discussion Group / E-Mail List

We will use a Discussion Group for class conversation and announcements. Critical information will be distributed via this list.

Lecture Blog and Capture

A daily summary of highlights of what happened in class each class meeting will be recorded in the Lecture Blog page.

In-class activity will be recorded using the University's Echo360 lecture capture system. This material is intended for your use if you must miss class, or if you want to go over again something that was presented/discussed in class.

Academic Integrity

You are welcome to discuss ideas in the class with your peers, but assignments must be completed individually. You may not look at each others' code, nor allow others to look at your code. When posting code on our own course forum for help, or a public forum, do not post more than an individual function.

If you received any help on a given assignment, you must discuss this in the assignment README file.

When turning in an assignment, you attest that, beyond any starter code I have provided or has been provided in standard API and reference documentation, you are the sole author the code that it includes.

Please be familiar with the university's policy on academic integrity.