Computer Science Program
Student Handbook



January 11, 1996


Contents




Preface

This handbook has been prepared for the use of Oberlin College students interested in computer science. While we have tried to present our advice as clearly and as fully as is possible within a short document, this handbook is not a substitute for direct contact with the faculty. Each student's needs and interests are unique. One of the advantages of a school such as Oberlin is that its faculty is interested in working with undergraduates, and students are encouraged to make full use of this opportunity. All members of the Computer Science Program faculty are happy to talk with any students, not just those assigned to them as advisees, about our Program.

What is Computer Science?

A task force of the Association for Computing Machinery, the professional society for academic computer science, has recently issued a report on the core of the discipline. This report provides the following short definition:

"The discipline of computing is the systematic study of algorithmic processes that describe and transform information, their theory, analysis, design, efficiency, implementation, and application. The fundamental question underlying all of computing is, "What can be (efficiently) automated?" (Report of the ACM Task Force on the Core of Computer Science), New York, The Association for Computing Machinery, 1989.)

Computer science is not programming! Of course, most computer scientists are adept programmers. Most of our courses teach programming techniques along with other material. Our courses emphasize concepts, not programs. The main focus of Computer Science is the study of problem solving. In computer science courses we discuss all aspects of problem solving, from carefully stating problems so that they have well-defined solutions, to design strategies that will lead one step by step to solutions, to analytical techniques that allow one to evaluate and compare solutions. Along the way our students become skilled programmers, because programming is the medium that we use to discuss these concepts. Computer science is an attractive discipline for anyone interested in learning techniques for stating, solving, and analyzing problems.

Academic Programs

Major and Minor Requirements

Requirements for the Minor in Computing in the Liberal Arts

The Minor in Computing in the Liberal Arts consists of at least 15 hours of courses selected from the list below. Three of these courses are required: CS 102, CS 235, and CS 339. In special cases a student can transfer up to three credit hours, not listed below, from another department or program to this minor if the instruction involved is computer intensive and relevant to the student's area of expertise, and if the Computer Science Program approves the transfer. Advanced Placement credit may be applied to this minor in appropriate situations.

Courses for the Minor in Computing in the Liberal Arts

CS 101 Introduction to Computers and Computer Usage
CS 102 Computer Concepts and Applications
CS 110 Fifth Generation Computing
CS 115 Cryptology
CS 135 Object-Oriented Programming
CS 157 Introduction to Graphics
CS 185 Colloquium: The Limits of Computation
CS 235 Computer Application Development
CS 299 Seminar: Mind and Machine
CS 339 Projects in Computer Application Development

For a more complete description of this minor, see the Oberlin College Third Stream Computing Online Learning Center .

Requirements for the Minor in Computer Science

Computer Science courses that are applicable to the minor are listed in the mini-catalog . The minor consists of five such courses, including at least one course numbered 300 or above.

A typical minor includes CS 150, CS 151, CS 275, either CS 210 or CS 280, and an additional 300-level course that reflects the interests of the student. Although they are not explicitly required, Mathematics 133 and 220 are taken by most students to satisfy the prerequisites for CS 275.

Requirements for the B.A. in Computer Science

Courses that are applicable to the major are listed in the mini-catalog . The major consists of 10 such courses, including Computer Science 210, 275, 280, and 383, and at least three other computer science courses numbered 300 or above. Private Reading courses for fewer than three hours do not normally count towards the major. In addition, majors are required to successfully complete Mathematics 133, 220, and 232. Students may substitute Mathematics 331 for one of the elective 300-level computer science courses.

Getting Through the Major Requirements

Most of our advanced courses are given on an alternate-year basis. This means that some attention must be paid to scheduling in order to meet the prerequisites for these courses when they are offered. The following is a recommended 8-semester sequence for a typical student who starts taking computer science courses in the fall of his or her freshman year. Of course, these are minimal recommendations; those who are planning a career in the field would be well advised to take more than the minimum requirements.

Typical 4 year curriculum
FallSpring
Year 1 Math 133
CS 150
Math 220
CS 151
Year 2 CS 210
CS 275
Math 232
CS 280
Year 3 CS Elective
CS Elective
CS 383
Year 4 2 more CS electives.
3 of the 4 electives must be at the 300-level.

It is possible to complete the major by starting in the fall of the sophomore year. The main effect of the later start is to limit the number of advanced electives that are available to the student. The following schedule shows a typical 6-semester sequence that fulfills all the requirements for the major.

Typical 6-semester sequence
FallSpring
Year 1 Math 133
CS 150
Math 220
CS 151
Year 2 CS 210
CS 275
Math 232
CS 280
CS Elective
Year 3 CS Elective
CS Elective
CS 383
CS Elective
3 of the 4 electives must be at the 300-level.

In general, we suggest that students aim to finish the requirements as early as possible. The intermediate level courses in particular are valuable for introducing the student to a wide range of concepts that are used throughout the discipline. Students should take most, if not all, of these before starting the advanced courses.

Beyond the Requirements: How to prepare for the hereafter

Many of our students eventually attend graduate school in computer science. A Bachelor's degree in computer science is essentially a programming degree; it gets one jobs in programming and system administration. A Master's degree is a design degree; with it one can get jobs as a software designer or as a project leader. A doctorate is a research degree; it is necessary for those who want to develop new techniques and new hardware. Note that in computer science many, if not most, of the researchers are employed outside of academia. A Ph.D. in computer science will not lock you into a job as a college professor, though that is an option as well.

Even if you choose not to attend a graduate program, as a professional computer scientist you will be expected to keep up with the changes in your field. Computer science is possibly the most rapidly evolving of all the professional disciplines. Today's research will be mainstream information in a few years. To remain current you must be well-grounded in the discipline. This suggests three principles for planning a major:

If you plan to look for a job in the computing profession, there are a few classes you should be sure to take. Most entry level jobs in the profession involve heavy programming responsibilities, so you should concentrate on courses that will help to prepare you for this work as you will see in an industrial setting. CS 268: Software Development and CS 341: Operating Systems, are particularly helpful. Among our other offerings CS 331: Compilers, CS 357: Computer Graphics, and CS 364: Artificial Intelligence all present material that will be useful in the software industry.

Those planning to attend graduate school immediately after Oberlin should try to gain as much experience as possible. The Honors program is particularly useful for applicants to graduate schools, and entrance to this program requires completing a substantial number of advanced courses by the end of the junior year. Graduate programs are placing an increasing emphasis on research experience for their applicants. The Honors program is one way to acquire significant research experience. Another way is through summer internships and research programs, such as the NSF-sponsored REU (Research Experience for Undergraduates) programs. Those students who are considering graduate work in computer science should begin discussions with the faculty on how to best prepare themselves early in their Oberlin careers.

The Honors Program

Each spring the Program invites juniors to apply for the Honors program by proposing a research project to be conducted under the direction of a member of the faculty. Honors candidates spend their senior years working on these projects. A thesis describing the honors project is expected of each student. An informal presentation on the project is given to the Program faculty in January, and a public lecture on the project is given at the end of the spring term. At the end of the year an examiner from outside the College is invited to give the Honors candidates both a written examination and an oral examination over undergraduate computer science. After consulting with this examiner, the Program faculty assign degrees of Honors, High Honors and Highest Honors to those candidates found worthy.

The Honors project is expected to be an intense, demanding project -- a focal point of the student's career at Oberlin. Most projects combine theory, design, implementation and analysis; they are not just large programming projects. Many factors are considered in the Program's decision of who to invite into the Honors program; among these factors are grades in computer science courses, overall grade point average, and a general evaluation of each student's ability to sustain interest in a difficult project for nine months or more. Of course, we evaluate the proposed project in terms of both its feasibility and its inherent interest. Those interested in Honors should arrange to complete most of the requirements for the major, including at least two or three advanced courses, by the end of the junior year.

The following is a list of topics of some recent honors theses:

Student Activities

Majors' Committee

Each fall the computer science students elect a majors' committee. This committee presents student concerns to the faculty, oversees the course evaluation process at the end of each semester, and participates in the interviews of prospective faculty members. The committee also organizes social events for both students and faculty.

The Student ACM Chapter

The Association for Computing Machinery (ACM) is the dominant professional organization for computer scientists. Oberlin has a student ACM chapter, which all of our majors are encouraged to join. The chapter organizes talks through the ACM's Lectureship Program, disseminates technical information, and provides discounts on subscriptions to ACM journals and conference registrations. For more information, talk to any of the chapter members, or to Rhys Price Jones, the faculty advisor to the chapter.

Student Groups

There are two groups of students that manage software on the computer science systems. The "gnusoft" group supervises, updates, and installs the products of the Free Software Foundation, such as gnu-emacs, our main text editor. The "public" group installs and maintains software of interest to students, such as our games directory. Advanced students (sophomores and up) can join these groups by sending mail to gnusoft and public.

The ACM Programming Context

Each year the ACM and AT&T sponsor regional and international programming contests. In these contests teams of student programmers attempt to solve a series of problems; the results are graded on both speed and accuracy. Oberlin usually has a local contest to determine the team which is sent to the regional meet. In 1982 and 1990 Oberlin won the East Central Regional contest; we have had three teams go on to the international contests. In 1993, having placed second in the East Central regional contest, Oberlin went on to earn sixth place in the International Contest.

Miscellaneous Information

Computing Facilities

Click here to see a list of our computing resources.

Our network is available to all of our students. We view the computing environment as supporting our educational program, and try to put as few restrictions as possible on student use of the system. However, with over 250 users it is necessary to have a few rules. These are the major ones:

Serious violations of these rules will be sent to the campus Judicial Board for disciplinary actions. Punishment may include loss of computing privledges, and in extreme cases banishment from our system.

Research Opportunities

There are a number of opportunities for students to participate in research projects in computer science. Successful experience with such projects is attractive to both graduates schools and employers; students are encourage to explore these possibilities.

No research opportunity will come to find you without any effort on your part. The best way to start looking for possibilities is to discuss this with the Program faculty. The Office of Career Development and Placement may have some information. Both the bulletin board inside the Computer Science office and the bulletin board near the Mathematics office occasionally have announcements of research opportunities for undergraduates.

Non-Local Jobs

Computer science students are fortunate in having programming skills that are in demand in the workplace. Finding any job takes time and effort, but with persistence many of our students have found summer jobs that make use of their skills, pay well, and provide good experience. Our graduates have had similar experiences in looking for professional employment. There are three offices on campus that may be of help to those looking for either summer or long-term jobs. The first place to visit is obviously the Office of Career Development and Placement. Perry Boyle, who directs the College's Business Initiatives Program, has many contacts in industry and has been of great help to our students. The Alumni Office is sometimes able to put students into contact with Oberlin alumni who have positions to fill. This can be especially useful to those looking for summer internships.

One item that students often overlook is getting recommendations from summer employers. The Career Development Office has forms for this purpose, and will keep letters on file for you. If you have a summer job that uses your skills in computing, and if you have reason to believe that your supervisor is happy with your job performance, you should ask that supervisor to write a letter of reference for you at the end of your period of employment. You may decide later to not use the reference; the important thing is having the option. It is virtually impossible to obtain a meaningful letter of recommendation from a former supervisor who has not seen you in six months or more.

Local Jobs

During the academic year the Computer Science Program hires students to act as graders, tutors, system administrators, and consultants. The pay for these jobs is comparable to that for most student jobs; the work is educational and a good experience. In addition to being a source of income, assisting with a course can be a valuable learning experience. One way to make yourself known to the faculty is to do a reliable, conscientious job as a grader or assistant.

Graduate Programs

Many of our majors go on to graduate school in computer science, sometimes immediately upon graduation, and sometimes after several years of work experience. There are a few things you should know about graduate programs in computer science.

Mini-catalog

Click here to visit the list of courses offered by the Program. More complete information is available in the Oberlin College course catalog.

webmaster@cs.oberlin.edu