91.204.201 Computing IV, Spring 2015
Section 201: Prof. Fred Martin, click for fred's email, MWF 10a10:50a, Olsen 408
Section 202: Victor Grinberg (homepage), MWF 10a10:50a, Olsen 311
email@example.com. Office hours: T 9:30a11:30a, Olsen 212A (201 grading)
firstname.lastname@example.org. Office hours: TR 9a10a, Olsen 212A (202 grading)
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:
- employ appropriate object-oriented (OO) techniques in C++ in the development of 500+ line programs
- analyze technical specifications for a variety of algorithms, and create working code based on specs provided
- use the Unix shell for C/C++ code development, including use of the gcc compiler and linker tools, and Makefiles
- use the C++ SFML (simple fast media library) for event handling, graphics, animation, and sound
- employ unit testing in your software development process
- use industry-standard C++ API libraries, including Boost (e.g. unit testing, regular expression, and date/time libraries)
- describe the value (and limitations) of coding standards, and use a static style checker to review your own code
- document your work for technical written presentations
- 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:
- 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)
- 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
- PS4 Compare ASCII strings to compute their edit distancea technique widely used in bioinformatics for DNA analysisand perform space and time analyses of the dynamic programming algorithm employed in the solution
- 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
- 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
- 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!
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 environmenteither 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.
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.
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.