Princeton University
Computer Science Dept.

Computer Science 333:
Advanced Programming Techniques

Spring 2000

Brian Kernighan


Sat May 6 11:38:26 EDT 2000

Final project submission requirements. Please read, and pass the word.

Thanks to everyone for working so hard on their presentations over the past couple of days. I really was pleased and impressed with the quality of the projects, and the talks were genuinely fun. (And myriad thanks to Steve Elgersma for setting up and maintaining the environment for us.)

Demo information.
Teamwork component of grading.
Third project handout. More schedule details, final submission requirements.
Preliminary information on project demo days.

Newsgroup

The Interface Hall of Shame might give you some ideas of things to avoid in your projects.
A Swing tutorial recommended by Ramesh Dharan.
Useful project links from Matthias Jacob.
Code from the Java lectures and other useful stuff can be found in this Code directory.

Second project handout, 3/19. This has further schedule information.
List of projects. This is a first draft and will be updated regularly.
Project planning slides, 2/28.
Initial project information, 2/14.

Lecture slides:    01/31    02/02    02/07    02/09    02/14    02/16    02/23    02/28    03/01    03/08    03/20    03/22    03/27    03/29 (Bjarne Stroustrup)    04/03    04/05    04/12    04/17    04/24

TA's for projects:
Matthias: Davidson, Duda, Eblen, Errecart, Hammell, Vomacka
Erich: Bulboff, AlexChou, Cohen, Halderman, Heitz, Wright
Chi: Alvi, Dharan, Sobel, Wu, Yun, Zook
Fengyun: JohnChou, Foti, Liang, Nyako, Schweikert, Winn

Assignment 5, due midnight, Sunday Mar 12. Last one!
Assignment 4, due midnight, Sunday Mar 5.
Assignment 3, due midnight, Thursday Feb 24.
Assignment 2, due midnight, Thursday Feb 17.
Assignment 1, due midnight, Thursday Feb 10.

Don Dinella's background reading: US Patent and Trademark Office, Franklin Pierce Law Center IP Mall, IBM IP Network.
David Zaret's home page.
Slides on Tcl/Tk.
Bjarne Stroustrup's home page
Jon Bentley's Programming Pearls.
Linus Torvalds's style rules
obsh.c and westley.c, from the IOCCC.
Survey


Check the newsgroup. Please use this forum to post questions about assignments or other course issues, so that everyone may benefit from the responses. For personal matters (such as grades, excuses, etc.), send mail to Rob Shillner, head TA.

Course Summary

This is a course about the practice of programming, an attempt to expose students to the development of real programs. Programming is more than just writing code. Programmers must also assess tradeoffs, choose among design alternatives, debug and test, improve performance, and maintain software written by themselves and others. At the same time, they must be concerned with compatibility, robustness, and reliability, while meeting specifications. Students will have the opportunity to develop these skills by working on their own code and in group projects.

COS 333 is about programming, not about a specific language. For the most part, the course will use the C programming language, with excursions into C++, Java, and scripting languages like shells, Awk, Perl, and Tcl. There will be significant emphasis on tools, both how to use them and how they are designed and built. The course will use Unix and Linux more than Windows, but not exclusively. Students should be fairly comfortable with C programming and Unix; COS 217 is a prerequisite.

Draft Syllabus

This syllabus is definitely subject to change. Each topic will take roughly one week.

This is not merely a laundry list of languages, however. Each section will also discuss issues of design, implementation, testing, performance, portability, and other software engineering concerns, and these will also be part of the programming assignments. With luck there will be a few guest lecturers as well.

Mechanics

There will be two lectures each week. During the first half of the semester, there will be a modest-sized programming assignment each week, which should take perhaps 5 hours to complete. During the second half of the semester, students will work in groups of 3 or 4 on a project that will involve significant design and implementation. The assignments and the project will determine course grade.

There are two required texts for the course: The Unix Programming Environment and The Practice of Programming, by Kernighan and Pike. Other readings will be handed out in class or found on the Web. These books are also worth looking at.

Note: This course has been taught for the previous three years by Andy Koenig, who emphasized C++. The focus and emphasis this time will be quite different, but Andy's course notes are excellent and will repay study.

Lectures:
Mondays and Wednesdays 1:30-2:50, Room 104, Computer Science Building (large auditorium).

Professor:
Brian Kernighan, 411 CS Building, 609-258-2089, bwk@cs.princeton.edu. Office hours: Monday 3-4pm or by appointment.

Teaching Assistants:
Rob Shillner, head TA, 216 CS Building, 609-258-5389, ras@cs.princeton.edu.
Fengyun Cao, 313 CS Building, 609-258-6126, fcao@cs.princeton.edu.
Matthias Jacob, 214 CS Building, 609-258-1793, mjacob@cs.princeton.edu.
Erich Schmidt, 216 CS Building, 609-258-5389, eschmidt@cs.princeton.edu.
Chi Zhang, 414 CS Building, 609-258-5388, chizhang@cs.princeton.edu.

For most questions about the course, check the newsgroup first; this will be monitored by the TA's, and their answers will be posted for everyone's benefit.

If you have a question about grading or assignment schedule, send mail to Rob Shillner.

Assignments

Five programming assigments will be assigned during the first half of the term; each is intended to take about five hours, but is sure to take longer unless you are careful. There will be a weekly question and answer session, likely on Monday evenings, during which the TA's will be available to answer questions about the current assignment.

Assignments are together worth about 40 percent of the course grade. Assignments are due by midnight on Thursdays unless there are extraordinary circumstances; each 12 hours or fraction of lateness thereafter incurs a 25% penalty (so assignments turned in after 1:00 PM Saturday receive no credit). You must complete all assignments to pass the course.

Project

The second half of the semester will be devoted to a group project; more details will be given soon. The project can be done in whatever combination of languages and techniques makes most sense; one of the goals of the project is to encourage careful tradeoffs among alternatives, and planning of interfaces to minimize dependencies. The project is thus a good place to explore personal interests further than can reasonably be covered in class.

The project will have checkpoints along the way for which you will have to turn in status reports, preliminary designs, and the like.

The project grade will be shared equally among group members.

Collaboration Policy

(This policy on collaboration is adapted from the CS 217 web page.) Programming, like composition, is an individual creative process. Individuals must reach their own understanding of the problem and discover a path to its solution. During this time, discussions with friends are encouraged. However, when the time comes to write the code that solves the problem, such discussions are no longer appropriate - the program must be your own work (although you may ask teaching assistants for help in debugging). If you have a question about how to use some language or operating system feature, you can certainly ask your friends or the teaching assistants.

These rules apply to each project group as well: group members can share everything among themselves, but groups may not collaborate with each other.

Do not, under any circumstances, copy another person's program. Writing code for use by another or using another's code in any form violates the University's academic regulations.

Examples of unacceptable behavior include:

The program you turn in must be your work. You may get help from the instructor or TA after you have started writing code, but not from other students. Computer science assignments are not like physics or math problem sets: there is no single right answer. Each student is expected to come up with his or her own individual solution.

If you plan to do something that you are not absolutely sure is legal, ask one of us first. Ignorance of this policy will not be accepted as an excuse for your actions.

You are responsible for ensuring that your files are not readable by your classmates. We recommend doing all your CS333 work in a private subdirectory, i.e.:

% mkdir cs333
% chmod 700 cs333