Princeton University |
Computer Science 333:
|
|
Thanks to everyone for putting on a good show for the demos --
there were a lot of interesting systems and neat ideas.
For submission, we would appreciate it if you could include
a pointer to your presentation slides if it's easy; that will
help us refresh our memory about how you presented the system.
Don't go to any extra work if it is not easy.
A couple of people have asked about installation and other aspects of project submission.
We are most interested in having access to a working version of the system so we can play with it; that's really important. You might find it useful to ask a friend to try it from a machine in the CS department and make sure there isn't some obvious problem; after that, you should be ok. If something does come up, we'll just send you mail and let you straighten it out.
The installation part is mostly to make sure that all the files that you created are included and there's enough of a roadmap that someone really dedicated (not me) could get it installed on a new system; it's partly a way to encourage you to be sure that you've included everything that's needed, either directly because it's code you wrote, or by reference if it's big packages like MySQL or some Java class library. One way to be sure that you have provided enough code and supporting info is to take your own installation package and move it to another machine and install it yourself as if you were a new developer. That's almost always a good check, and if that works, it should be fine for us too.
Lecture notes: Feb 5,7 Feb 7 Feb 12 Feb 14 Feb 19 Feb 21,26 Feb 28 Mar 5 Mar 7 Mar 12 Mar 14 Mar 26 Apr 2 Apr 4,9 Apr 15 Apr 23 Apr 25 Apr 30 May 2
Project: 1st project handout 2/19 project slides 3/7 proposal reminders MySQL info, lecture 4/16: demo information 4/30: further information
Reading:
2/26: Languages as their inventors see them:
Dennis Ritchie (C),
Bjarne Stroustrup (C++),
James Gosling (Java),
Larry Wall (Perl),
and
Guido van Rossum (Python).
Old stuff: survey Ousterhout on scripting spam, spam, spam
Dates: (Intermediate project dates are subject to minor revision.)
S M Tu W Th F S Feb 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 assignment 1 due 17 18 19 20 21 22 23 assignment 2 due; preliminary project info 24 25 26 27 28 assignment 3 due Mar 1 2 3 4 5 6 7 8 9 assignment 4 due 10 11 12 13 14 15 16 assignment 5 due; initial project proposal due 17 18 19 20 21 22 23 (spring break) 24 25 26 27 28 29 30 detailed project plan 31 Apr 1 2 3 4 5 6 7 8 9 10 11 12 13 project prototype 14 15 16 17 18 19 20 21 22 23 24 25 26 27 alpha test 28 29 30 May 1 2 3 4 beta test 5 6 7 8 9 10 11 project demos 12 13 14 15 16 17 18 Dean's date; project due 19 20 21 22 23 24 25 26 27 28 29 30 31
The 2002 version of this course will be similar to the Spring 2001 version.
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. The course will assume familiarity with the C programming language, and will include excursions into C++, Java, and Visual Basic, 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 must be comfortable with C programming and Unix, and able to write modest-sized programs that work. COS 217 is a prerequisite.
This is meant to be more than a laundry list, 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.
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 a significant amount of design and implementation.
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. The books listed in this bibliography are also worth looking at; they cover a wide variety of material related to programming.
Lectures:
Tuesday and Thursday 11:00-12:20, CS 103.
Professor:
Brian Kernighan,
311 CS Building, 609-258-2089,
bwk@cs.princeton.edu.
Office hours:
By appointment; just send mail.
Teaching Assistant:
Christine Lv,
214 CS Building, 609-258-1793,
qlv@cs.princeton.edu.
Office hours: 4:00-5:00 Tuesday, and by appointment.
For most questions about the course, check the newsgroup first; this will be monitored by the TA, and answers will be posted for everyone's benefit.
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.
Assignments are together worth about 30 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). For the record, extracurricular activities and heavy workloads in other classes don't count as "extraordinary", no matter how unexpected or important or time-consuming. You must complete all assignments and project requirements to pass the course.
The project will have frequent checkpoints along the way for which you will have to turn in status reports, preliminary designs, and the like.
The project will be worth about 60 percent of the course grade; it will be shared equally among group members, with the possibility of negative adjustments for group members who fail to contribute their fair share.
Groups are encouraged to share insights and information about how things work, how to get things done, and other aspects of programming knowledge. In general, code that is written for one project should not be used in another without compelling reasons; if this is likely to become an issue, please consult with the instructor.
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 your CS333 work in a private subdirectory, i.e.:
% mkdir cs333 % chmod 700 cs333