Instructor: P.
Hatcher
Office: Kingsbury N215B
E-mail:
hatcher@unh.edu
Office Hours:
Mon/Wed 9:40-11am,
or by appointment (send e-mail to request an appointment).
Teaching Assistant: Stephen Ball
Office: Kingsbury W240
E-mail:
sjx32@wildcats.unh.edu
Office Hours:
Fri 10-11am in Kingsbury N218 and 1-3pm in the Programming Assistance
Center, Kingsbury N216.
The prerequisite for this course is CS515.
The key goals for the course are to understand program and data representation, to become familiar with assembly language, machine language and C programming, to understand the impact on software of basic computer architecture concepts such as the memory hierarchy, and to study fundamental system software such as assemblers and linkers. There is also a focus on multithreaded programming.
I was kind of freaked out when I realized that there are people graduating with CS degrees who'd never written C. They started in Java and they stayed there. That just seemed bizarre and wrong. —Jamie Zawinski, early Netscape/Mozilla developer, quoted in Coders at Work: Reflections on the Craft of Programming by Peter Seibel.
I see people that are really smart—I would say they're good programmers—but say they only know Java. The way they think about solving things is always within the space they know. They don't think end-to-end as much. I think it is really important to know the whole stack even if you don't operate within the whole stack. … In practice, nothing works. There are all these beautiful abstractions that are backed by sh*t. The implementation of libraries that look like they could be beautiful are sh*t. And so if you're the one responsible for the cost of buying servers, or reliability—if you're on call for pages—it helps to actually know what's going on under the covers and not trust everyone else's libraries, and code, and interfaces. —Brad Fitzpatrick, creator of Livejournal, quoted in Coders at Work: Reflections on the Craft of Programming by Peter Seibel.
The University is committed to providing students with documented disabilities equal access to all university programs and facilities. If you think you have a disability requiring accommodations, you must register with Disability Services for Students (DSS). Contact DSS at (603) 862-2607 or visit them in MUB 118. If you have received Accommodation Letters for this course from DSS, please provide me with that information privately so that we can review those accommodations.
Laboratory sessions are 50 minutes long and will be held on Fridays in Kingsbury N218. Each programming assignment will have two labs associated with it. Laboratory grades will be based upon attendance and correctness of your laboratory submission.
If you attend all of the lab, you will receive 70% of the lab points, with the other 30% being awarded based upon the correctness of your submission. If you do not attend, then your grade will be based only upon the correctness of your submission. For example, if you attend all of the lab and you get 50% of the assigned functionality correct, then you will receive an 85% for the lab. But, if you do not attend lab and you get 50% of the functionality, then you will receive a grade of 50% for the lab.
All labs are due no later than 8am the day after the lab (i.e. at 8am on Saturday). No late submissions will be accepted for labs.
The purpose of the first lab for a programming assignment is to help you get started on the assignment. The purpose of the second lab is to encourage you to complete a substantial portion of the functionality of the associated programming assignment.
The programming assignments are (with tentative due dates):
The programming assignments must be done in C.
Each programming assignment will be worth 100 points. All programming assignments are due on a Tuesday. There is a grace period until 8am on Wednesday when no late penalty will be assigned. Assignments submitted between 8am on Wednesday and 8am on Thursday will be charged a 15% late penalty. Assignments submitted between 8am on Thursday and 8am on Friday will be charged a 30% late penalty. No assignments will be accepted after 8am on Friday.
The grading of programming assignments will be based primarily upon demonstrated correct functionality. That is, you will be awarded points for what your program actually does. Some test cases may be public but others will be hidden, so careful testing will be required.
Points will be deducted from your programming assignment grade if your work is not adequately documented and structured. You must follow the following guidelines:
In addition, lines should not exceed 80 characters when printed using a tabstop width of 8. It is best to not put tabs in your files. Have your editor automatically expand tabs into spaces. It is also best to use a small indentation amount, like 2.
If you have any questions about these rules for program layout, see me in advance, not after your first program submission.
The final exam will be comprehensive.
Students receiving at least 55% of the course points are guaranteed at least a D-. Students receiving at least 65% of the course points are guaranteed at least a C-. Students receiving at least 75% of the course points are guaranteed at least a B-. Students receiving at least 85% of the course points are guaranteed at least an A-.
On reserve in the Kingsbury library:
The purchase of this book is not required, so the local bookstores will not have it. However, if you want your own copy, they are readily available from on-line retailers.
You might also want to consult a C reference. My favorite is C: A Reference Manual by Harbison and Steele.
Also you can get on-line access to C references via the UNH library's license for Safari Tech Books. See the website for the Kingsbury Library for more information. Once in Safari, search for "Programming in C".
If you are serious about building your software development skills, I heartily recommend Coders at Work: Reflections on the Craft of Programming by Peter Seibel. The book contains interviews with fifteen master programmers.
Note that this "no collaboration" policy does not distinguish between the "giver" and the "taker". I consider both parties equally guilty.
In addition, submitting programs that are based upon code retrieved from Internet sources is also explicitly forbidden and will be considered "cheating".
Be aware that I use tools for automatic plagiarism detection that analyze both current and prior-year assignment submissions.
Because so much of your course grade is based upon the programming assignments, I will treat cases of cheating severely. If caught cheating on an assignment, you can expect to (at least) receive a failing grade for the course.
In addition, of course, collaboration is also not allowed on the midterm exam or the final exam.
Comments and questions should be directed to hatcher@unh.edu