This page contains the syllabus for CS 164.
| Name | Office | Phone | Office Hours | ||
| Instructor | George Necula | 783 Soda | 643-1481 | username necula, hostname cs.berkeley.edu | Tu 10-11 |
| T.A. | Gautam Altekar | 467 Soda | 643-7359 | username galtekar, hostname cs.berkeley.edu | W 4-5 Th 10-11 |
| T.A. | Tachio Terauchi | 565 Soda | 642-9542 | username tachio, hostname cs.berkeley.edu | M 1-2 F 1-2 |
| Lectures | 1 | TuTh 12:30-2:00 | 60 Evans | Necula |
| Discussion Sections | 101 | F 10:00-11:00 | 75 Evans | Altekar |
| 102 | F 11:00-12:00 | 75 Evans | Altekar | |
| 103 | F 2:00-3:00 | 4 Evans | Terauchi | |
| 104 | F 3:00-4:00 | 4 Evans | TBA |
The TAs' section notes are available here.
CS 164 is designed to acquaint students with the design and implementation of high-level programming languages. The course consists of a theoretical component, which stresses general underlying concepts, and a practical component, which consists of a significant course project. Students have a choice of writing the project in C++ or Java.
CS 61A, CS 61B, and CS 61C or equivalent. Also required is the ability to program in C++ or Java on a UNIX system.
| Recommended | A. Aho , R. Sethi , and J. D. Ullman , " Compilers: Principles, Techniques, and Tools ", 1st edition, Addison-Wesley, 1986. You can also use the second edition. |
| Recommended | Flex, Bison, JLex , Java Cup, and Spim . Reader available at Copy Central on |
| Andrew Appel , "Modern Compiler Implementation in Java". This book has been put on reserve at the library. It is optional but helpful reading. |
Copies of the lecture notes will also be made available on the course home page.
Another book you might find useful is " Unix in a Nutshell (System V Edition) " by Gilly , published by O'Reilly & Associates. As its name suggests, the book is a short guide to working on a Unix system, including descriptions of common Unix commands and utilities. The book is available in local bookstores and costs about $10.
Most weeks there will be a written assignment covering material presented in lecture and the readings. The written assignments are to be completed individually. Written assignments will be graded on a simple credit/no credit basis and will not be weighted heavily; the purpose of the assignments is to give you practice with the theoretical material of the course. Spending time on the written assignments pays off on the exams.
Written assignments are due by 12:30 p.m . on the date in the course schedule. Write your name, email address, and section on your assignment. Assignments may be turned in either in class (before the lecture) or in the CS 164 Homework Drop in 283 Soda . To ensure that we know where assignments are, use only these two locations to hand in assignments.
Please do not bring assignments to staff offices.
The course project consists of six programming assignments. Taken together, the six assignments form a complete implementation of Cool, the Classroom Object Oriented Language .
Start the programming assignments early! Completing the course project is a large, complex, and rewarding task, which is made much easier by giving adequate forethought to design. The course schedule allows ample time to complete the assignments---take advantage of it. The project components are assigned in roughly increasing order of size and difficulty; proportionately more time is allotted for the later assignments. Later assignments will be weighted more heavily in the final grade. Programs will be evaluated for correctness, organization, and documentation.
Documentation and structuring should be incorporated into programs from the beginning. Neither the instructors, teaching assistants, or readers will help with incomprehensible programs.
Programming assignments may be done individually or in teams of two. (The first programming assignment will be done individually, however.) Teamwork imposes burdens of communication and coordination, but has the benefits of more thoughtful designs and cleaner programs. Team programming is also the norm in the professional world.
Students on a team are expected to participate equally in the effort and to be thoroughly familiar with all aspects of the joint work. Both members bear full responsibility for the completion of assignments. Partners turn in one solution for each programming assignment; each member receives the same grade for the assignment. If a partnership is not going well, the teaching assistants will help to negotiate new partnerships. Teams may not be dissolved in the middle of an assignment.
Programming assignments are due at 11:59 p.m. on the date in the course schedule. Programming assignments will be turned in electronically; the exact method will be announced with the first assignment. All programming will be done in C++ or Java on Solaris workstations in Cory and Soda Halls using your individual accounts.
Each student gets an automatic extension of 96 hours. You can use the extension on any programming assignment(s) during the semester (in increments that are rounded up to the nearest integer). For instance, you can hand in one assignment 96 hours late, or each of four assignments 24 hours late. For group project assignments, the slip time will be deducted from each team member's remaining slip time. When you hand in a late assignment, you must identify in the README file the following: (i) how late this assignment is, and (ii) how much of the total slip time you have left. No assignment will be accepted more then 96 hours late. After you have used up your slip time, any assignment handed in late will be marked off 1% per hour. This policy does not apply to the written assignments.
There is a 1% penalty for each hour, or partial hour, that a programming assignment is late. That is if you turn in the programming assignment at 8am the next day (i.e. 8 hours late) your grade for that assignment will be multiplied by a factor of 0.92.
Late written assignments will receive no credit.
There will be two midterm examinations and a final. The midterms will be held in class on February 23 and April 11.
The final exam is scheduled for Wednesday 5/17/06 at 5-8PM (final exam group 15).
There will be no early or make-up exams. Please plan accordingly!
Regrade requests will only be accepted for programming assignments and exams. In either case, all regrade requests must be received within one week upon receiving your score. For exams, we will only consider regrades if we made a mistake in the grading of your exam. Note that we reserve the right to regrade the entire exam. For programming assignments, we will only consider regrades if we made a mistake in the grading of your project or if there was a small bug in your project that caused you to lose at least 10 points. A small bug is one that can be fixed by changing very few lines of code without affecting the design or the algorithm in a significant way. All such requests must be made to your TA (not to the readers). If we accept the regrade request we will re-run the autograder and will give you 50% of the score difference.
Students are expected to attend discussion sections. Relevant material, especially the details of the programming assignments and software tools, will be covered only in discussion sections.
It is impossible to pass the course without doing the programming assignments. The relative weight of the components of your grade will be approximately:
| Written assignments | 5% |
| Course project I | 2% |
| Course project II | 6% |
| Course project III | 6% |
| Course project IV | 10% |
| Course project V | 10% | Course project VI | 6% |
| Midterm I | 15% |
| Midterm II | 15% |
| Final | 25% |
It is expected that all students understand University policies on academic honesty. Cheating on assignments or exams is very serious and will not be tolerated. In this course, we will use a variation of the standard policy. In this class, it is permissible to talk to other students about assignments, to discuss particular solutions, and even to receive partial solutions (including code) from others. However, all assistance and cooperation must be cited in the assignment write-up . If you receive any assistance from anyone other than course staff or your partner on an assignment, you must acknowledge in the write-up for that assignment who gave assistance and what assistance was given. Grading will take into account how much help a student received from others (the more help, the lower the grade). Failure to acknowledge sources is plagiarism and will be treated as a serious breach of academic honesty. No assistance may be given or received on exams.
You should know that fairly sophisticated plagiarism detection software will be used on the programming assignments.
In addition to being passed out in class, handouts will be available on-line on the class home page. The course readers will be made available from Copy Central on
The material presented in class will correspond roughly but not exactly to the material covered in the readings. The assigned readings for the latter part of the course are tentative.
The class home page for this semester is http://www-inst.eecs.berkeley.edu/~cs164 . All course handouts, answers to frequently asked questions, lecture notes, and updates on assignments will be posted. The class newsgroup is ucb.class.cs164 . It should be accessible from any Unix machine on campus via any newsreader (such as ` rn ' or `tin'). Please check the home page and newsgroup regularly for important course information. Students are responsible for changes to assignments posted on the home page or in the newsgroup.