Menu:

Instructor:
Morwaread Farbood

Announcements

November 4, 2011
Reminder: Quiz 2 on Tuesday, November 8.

October 19, 2011
Lecture schedule and problem set deadlines have been updated. Final project guidelines now available.

September 15, 2011
Note that the date/time for final project presentations has been posted: Tuesday, December 20, 1-4pm.

September 9, 2011
Sample .bashrc and .bash_profile from "Getting Started" document available for download.

Fall 2011 Syllabus

MPATE-GE 2618: C Programming for Music Technology is an intensive, graduate-level introductory course in programming concepts and computer science with a focus on software design, algorithms, and data representation for digital signal processing and other audio applications. Assignments consist of extensive programming in C.

Topics include:

Prerequisites

No prior programming experience is required.

Schedule

The following is the course schedule, subject to change:

Unit 1

Tuesday, September 6
Bits and binary; ASCII encoding; UNIX; programming; source code; compilers; object code; structure of a standard C program.

Thursday, September 8
Statements, variables; types; casting; format strings for output; relational operators; precedence; boolean expressions; conditional statements; logical operators; note on style.

Monday, September 12 - First lab meets

Tuesday, September 13
Loops; for, while, do-while; overflow.

Unit 2

Thursday, September 15
Switch statements; constants; arrays.

Tuesday, September 20
Arrays continued; strings; standard libraries; ASCII revisited; input.

Tuesday, September 20: Problem Set 1 due at 8pm

Thursday, September 22
Functions; scope; command-line arguments; ciphers.

Unit 3

Tuesday, September 27
Typdefs and enums; const; structs; file I/O; random number generation; Monte Carlo simulation.

Thursday, September 29
Recursion.

Thursday, September 29: Problem Set 2 due at 8pm

Tuesday, October 4
Quiz 1 on Units 1-2.

Unit 4

Thursday, October 6
Arrays in memory; pointers; pointer arithmetic.

Thursday, October 6: Problem Set 3 Part I due at 8pm

Monday, October 10
NO LAB (Columbus Day holiday)

Tuesday, October 11
NO CLASS (Columbus Day holiday)

Thursday, October 13
Preprocessor macros for .h files; linking revisited; multi-file projects, Make; gdb; computational complexity; Big-O notation; searching; sorting.

Thursday, October 13: Problem Set 3 Part II due at 8pm

Tuesday, October 18
Sorting continued; binary file I/O; IFF chunks and AIFF.

Thursday, October 20
Greedy algorithms; exhaustive searches; dynamic programming; memoization;

Monday, October 24: Problem Set 4 Part I due at 8pm

Unit 5

Tuesday, October 25
Stack frames; automatic vs. static variables; Dynamic memory allocation and deallocation.

Thursday, October 27
Structs revisited; break and continue; single-linked lists.

Thursday, October 27: Problem Set 4 Part II due at 8pm

Tuesday, November 1
Linked lists continued; hash tables.

Thursday, November 3
Binary search trees; tries; assembly; volatile; extern; unions.

Tuesday, November 8
Quiz 2 on material through Unit 4

Unit 6

Thursday, November 10
Intro to audio programming library; PortAudio.

Friday, November 11: Problem Set 5 Part I due at 8pm

Monday, November 14: Problem Set 5 design.txt due at 8pm

Tuesday, November 15
Audio programming continued; libsndfile.

Unit 7

Thursday, November 17
Twos complement; floating point representation; bitwise operators.

Thursday, November 17: Problem Set 5 Part II due at 8pm

Tuesday, November 22
Huffman encoding and decoding; tree traversal.

Thursday, November 24
NO CLASS (Thanksgiving holiday)

Monday, November 28: Problem Set 6 due at 8pm

Tuesday, November 29
Spell-checker competition.

Tuesday, November 29: Final project idea due at 8pm

Thursday, December 1
Review; additional topics TBA.

Thursday, December 1: Problem Set 7 design.txt due at 8pm

Monday, December 5: Final project full proposal due at 8pm

Tuesday, December 6
Review; additional topics TBA.

Thursday, December 8
Review; additional topics TBA.

Thursday, December 8: Problem Set 7 due at 8pm

Sunday, December 11: Final project design and framework due at 8pm

Tuesday, December 13
Quiz 3

Thursday, December 15
Review; additional topics TBA.

Final Project

Monday, December 19 - Final project implementation and documentation due at 8pm

Tuesday, December 20, 1-4pm
Final project presentations.

Class Times

Lectures take place in the Education building (35 W. 4th St), 6th Floor Conference Room, on Tuesday and Thursday 1-2:15 and the lab portion of the class meets Monday 1-2:15.

Problem Sets

Seven problem sets will be distributed during the semester. Each will be due via electronic submission on Blackboard. You have seven "late days" that you may use during the semester, each of which provides you with an extension of 24 hours. The extensions can be distributed in any way you like--e.g. you can use all seven days on one problem set or one day on each problem set, etc. No reason needs to be given; whether you are ill, too busy with other things, or just don't feel like turning it in, it doesn't matter--how you use them is up to you. Lateness of electronic submissions will be determined down to the minute by the submission timestamps on Blackboard. If the problem set is due at 2pm and you submit it at 2:01pm, you will lose a late day. If you've run out of late days, your assignment will be accepted with a 25% grade reduction per day late except in the case of an emergency. "Technical difficulties" do not constitute emergencies. Also note that some of the problem sets have mutliple parts that are due on different dates. Each day an individual part is late counts as a late day. You may not use any late days on the course's final project. When computing your final grade, your lowest score on these problem sets will be dropped and your six highest scores will be weighted equally.

Quizzes

The course will have three hour-long quizzes. These quizzes will be "closed-book." However, you may utilize during each quiz one two-sided page (8.5" x 11") of notes, typed or written, and a pen or pencil, but nothing else. You should expect the second and third quizzes to be cumulative, but their content will be based mostly on lectures subsequent to those covered by the first and second quizzes, respectively. When computing your final grade, your lowest score on these quizzes will be dropped and your two highest scores will be weighted equally.

Final Project

The final project will be your opportunity to put your programming skills to use and implement your own software application. As long as your project is written (mostly) in C, the nature of your project is entirely up to you, albeit subject to the instructor's approval. You are welcome to utilize external libraries and hardware provided that the instructor has access to all of these things and you are able to present it in class at the end of the semester.

Students in the music technology program are encouraged to choose a project topics such as writing MAX/MSP externals, developing plug-ins, or using audio/MIDI APIs.

You may work together with up to two other students, however work is expected to be distributed equally among project partners and the project itself must be commensurate in scope. Each student is expected to contribute approximately 2000 lines of code to a project, whether working alone or with a group. If multiple students are working on a project, the code must be thoroughly documented to indicate which student wrote or contributed to each part.

Extensions on the final project will not be granted, except in cases of emergency. Work submitted late without extension will be penalized as follows: projects submitted up to one hour late will incur a penalty of 5%; projects submitted up to two hours late will incur a penalty of 10%; projects submitted up to three hours late will incur a penalty of 25%; projects submitted up to four hours late will incur a penalty of 50%; projects submitted more than four hours late will incur a penalty of 100%. Lateness of submissions will be determined down to the minute by timestamps.

Final Exam

This course does not have a final exam.

Books

Required text

Programming in C, Third Edition by Stephen Kochan

Optional text for students less comfortable with programming

Absolute Beginner's Guide to C, Second Edition by Greg Perry

Optional recommended audio programming text:

The Audio Programming Book, R. Boulanger and V. Lazzarini (Eds.)

Grades

Final grades will be determined using the following weights.

Problem Sets (best 6 out of 7):65%
Quizzes (best 2 out of 3):20%
Final Project: 15%

Platforms

Assignments are designed to be implemented on a UNIX-based system such as Mac OS X or Linux, however it possible to use Windows. In the case of Windows, UNIX tools such as the Cygwin library would have to be installed.

Academic Honesty

All work you do for the class is expected to be your own. Collaborating with others unless explicitly allowed as well as copying material in any form from an individual, book, website, or any other source is strictly prohibited, as is allowing another student to copy or use your own work in any way. You are welcome to discuss the course's material with others in order to better understand it. You may even discuss problem sets with classmates, but you may not share or write code together. The only possible exceptions to this is the final project, if you are working together with other students or utilizing an outside library or API. If you have any questions about what kinds of communication/sharing/recycling of code are acceptable, contact the instructor.

Acknowledgements

This class owes much of its structure and content to Harvard's Computer Science 50, a course that the instructor took as an undergraduate (many) years ago.