All handouts will be distributed on the course web page. This will include lecture notes/slides, assignments and other handouts. You are responsible for all material and announcements posted on the class web page, so please check it regularly. If this is a problem for anyone, feel free to come talk to the instructors. For time critical announcements, we will use e-mail.
This course couples work on program design, analysis, and verification with an introduction to the study of data structures that are important in the construction of sophisticated computer programs. Students are expected to program in the object-oriented programming language Java. Students will learn to design complex and reliable software engineering systems through writing code modules that are easy to read, debug, test, verify, analyze, and modify.
This course is divided into three rough modules (each roughly corresponding to a checkpoint):
We will have roughly weekly assignments. Most will be programming assignments, though some may also have an experimental component and/or a short writeup especially on ethical issues.
Each week there will be a short, group assignment. You must attend your group sessions and complete the group assignment. These group assignments will be low-stakes and will only be graded based on participation (i.e., showing up and contributing).
We will start each Thursday class with a short (approximately 5 minutes) quiz. The quizzes will be 1-2 problems related to the previous class or two. The quizzes are meant to encourage you to stay up to date with the material as well as to give you practice on exam-like questions to help prepare you for the midterm/final. I will drop your lowest quiz score.
We will have two in-class exams (a midterm and a final) which are shown on the schedule on the course web page. Among other topics, exams will involve writing code on paper, not at a computer. To prepare for this, we recommend practicing writing code on paper (or on the whiteboards in the lab) throughout the class. The final will be cumulative
We understand that sometimes things get busy, things come up, you get sick, etc. To help in these situations, you may submit two assignments late by up 24 hours. Beyond this, except under very extenuating circumstances, we will not accept late assignments.
We take academic honesty very seriously.
You are encouraged to get together in small groups to discuss material from the lectures and text. However, the work that you turn in must be done independently, unless an assignment is explicitly designated as one in which collaboration is allowed.
In particular, your work must not be based on information obtained from sources other than those approved for the course (i.e., the text, web pages linked from the course web page, and materials provided in lecture). You should never copy another students code or solutions, exchange computer files, or share your code or solutions with anyone else in the class until after an assignment is due. You may, however, use any code that we provide to you or that comes from the textbook, as long as you acknowledge the source. Additionally, the tutors are allowed to help you with your code.
A few rules to follow for this course to keep you out of trouble:
If you are ever unsure about what constitutes acceptable collaboration, please ask!
For more information see the Computer Science Department's Academic Honesty Policy and the college's policy.
You may use your own laptop or the Computer Science department computers for this course. If you use the CS computer labs (which I encourage you to do), please read about the Computer Systems Policies.
If you need accommodations please contact the Disability Coordinator on your home campus. The process for Pomona students is available here.
Due to the nature of this course, extensions or alternative deadlines on assignments will not in general be allowed—extensions would lead to more stress due to overlapping deadlines.