Williams College Computer Science Department

Computer Science

Williams College

Introductory Courses

The Department offers five introductory courses requiring no prerequisites:

These courses should be of interest to those looking for an introduction to some of the ideas of computer science. In addition, to obtain a more complete introduction to the skills of algorithm design and implementation, students who have completed Computer Science 134 (or have equivalent programming experience) may take Computer Science 136: Data Structures & Advanced Programming.

Among our introductory courses, there are some courses which emphasize digital communication and the development and implementation of computer programs and other courses that concentrate on some particular application of computing such as graphics or artificial intelligence. Courses in the latter group are intended for students who would like some understanding of the nature of computers and computer science, but who are unlikely to pursue more advanced study of our discipline. The courses that emphasize program development provide the preparation students need to enroll in more advanced courses in our department. The main difference between the courses in this group is the level of background assumed. We have included some placement advice for those trying to select one of these courses.

Introductory Courses that Emphasize Program Development

The combination of Computer Science 134 and Computer Science 136 provides a solid introduction to design of algorithms and their implementation as computer programs. Completion of this sequence is required for almost all advanced courses in the department and recommended for any student who wishes to have an introduction to programming and general problem solving on the computer.

These courses combine the introduction of basic programming techniques with the presentation of methods for designing and implementing well-structured programs.

The first of these courses, Computer Science 134: Introduction to Computer Science, assumes no prior programming experience.

Students planning to take Computer Science 136 are urged to take Math 251 before or concurrently with Computer Science 136. While 251 is not a prerequisite for Computer Science 136, students will benefit greatly from the way in which the courses complement one another. Math 251 is required for the Computer Science major and is a prerequisite for many of the advanced courses in Computer Science.

Successful completion of Quantitative Studies 100 or 101 or the demonstration of basic proficiency in the diagnostic test is required for all of the courses discussed in this section. The vast majority of entering freshmen place out of these course during freshman days, so most students need not worry about this.

Placement in Introductory Programming Courses

Placing students into the correct introductory programming course can be somewhat of a challenge since students have a wide variety of computing backgrounds before arriving at Williams. The easiest case to deal with is that in which a student has had an Advanced Placement Course in Computer Science and has taken the Computer Science AB Placement exam. If you think that you have a strong background in computer science (whether or not you have had the AP course), your best bet is to take the AP exam if possible. We have found that it provides very good information on students' backgrounds. Our general policy is that students who get a 4 or 5 on the AB exam are placed in Computer Science 136 with no questions asked. We talk carefully to those who get a 3 about their background. In most cases these students are encouraged to try Computer Science 136, with the understanding that if they find themselves over their heads, we can easily switch them back to Computer Science 134. Those who get a 1 or 2 are encouraged to enroll in Computer Science 134. The A exam in computer science does not cover all of the material in Computer Science 134, so a good score on that exam does not automatically result in placement in Computer Science 136.

We are quite flexible about placement within the first few weeks of the semester. If a student is familiar with the material in the first few weeks of a course and has doubts about whether he or she should be placed in the successor course, we will often encourage them to sign up for the more advanced course. This way, even if a decision is later made to drop back, the student will not have missed anything that he or she did not already know. Even after the end of the official period for adds and drops, we are usually able to move students into more appropriate courses during the first month of the semester. We encourage students not to waste one of their limited number of courses at Williams (and their or their parents' money) on a course whose material is already familiar to them.

Introductory Courses that Survey Sub-fields of Computer Science

For those students interested in learning more about important new ideas and developments in Computer Science, but who are not necessarily interested in developing extensive programming skills, the department offers several courses that introduce students to interesting problems in our field. These courses provide an accessible introduction to facets of computer science that are normally only discussed in courses requiring several prerequisites. While these courses obviously cannot cover material in the same depth as the upper division electives, they provide the student with the opportunity to sample some of the most exciting ideas in computer science.

Go up to Courses Offered
Go forward to Core Courses