Fundamentals of computer science I

This course is a general introduction to the fundamental ideas of computer science: algorithms, data structures, and abstraction. It includes computer programming (algorithm design, documentation, coding, testing, and debugging) in a high-level programming language, Scheme.

This is an interactive, lab-based course, taught in a collaborative workshop style: You'll spend most of each session working at computers, in groups of two or three, on exercises and projects. Frequently we'll spend a few minutes at the beginning discussing the day's reading and a few minutes at the end reviewing the lab.

The class meets in the MathLAN lab, Science 2417. There are four sessions a week -- Mondays at 9 a.m., Tuesdays at 10 a.m., Wednesdays at 9 a.m., and Fridays at 9 a.m. I've prepared a tentative schedule of topics. Since I'll probably revise it often during the semester, you should re-examine it frequently.

Class news

Results of a ``prisoner's dilemma'' tournament among players submitted by members of the class are now available.

I have added a list of frequently asked questions to the course Web site -- contributions are welcome.

Requirements

Class sessions

The purpose of the lab exercises and projects is for you to explore some ideas and techniques and to experiment with them. I don't directly assess the programs you write in class unless you e-mail them to me and ask for comments -- that's entirely up to you. The requirement for class sessions is simply that you prepare for each one (by studying the assigned reading) and then attend.

Programming assignments

The written work for the course comprises several programming assignments, which call for you to design, document, write, and test Scheme programs and to submit them for evaluation.

You may submit solutions to programming assignments in hard copy or by electronic mail (to stone@cs.grinnell.edu), including both the text of your Scheme program and one or more test runs, showing the results that your program generates. The on-line document ``Submitting solutions by e-mail'' guides you through the process, step by step.

I have arranged the programming assignments in a sequence. You are eligible to receive credit for an exercise only after you have submitted a complete and and correct solution for all the previous exercises. You may turn in as many incomplete or tentative solutions as you like; I shall make comments and suggestions on them, but award credit only for solutions that are complete, correct, and in sequence.

The deadline for all programming assignments is 5 p.m. on Tuesday, December 18.

The final examination

There will be a three-hour, cumulative, final examination at the end of the course. The registrar has scheduled it for Wednesday, December 19, from 9 a.m. to noon. This examination involves little or no programming, but consists rather of computational problems and topical questions to be answered in English prose.

I have prepared a set of sample examination questions, which you may use in preparing for the final. Some of you may find it helpful to take the list of sample questions as a practice exam, allowing yourself the same three-hour period that you'll have on examination day.

Grading

I use a point system for grading, awarding

I also occasionally award extra points for ingenious, entertaining, and helpful contributions to the course. (For example: writing a well-formed classical sonnet on functional programming; developing a Scheme program to balance chemical equations and making it available as free software; using the tool in DrScheme's Help Desk to submit a bug report to the Programming Languages Team.)

The number of points that you accumulate during the semester determines your final grade, as follows:

Any of these grades may be modified, at my discretion, by the addition of a plus or a minus.

Individual and collaborative work

Since you will receive credit on the basis of your individual performance on the programming assignments and the final examination, it would be unethical to submit any work that is not your own or to collaborate on solutions, arrogating the results of other people's intellectual effort. If I encounter any indications of plagiarism, the Committee on Academic Standing will deal with them.

However, the rule against collaboration does not apply (in this course) to labs, which I'd encourage you to do in pairs, or to group study and discussion, except in connection with the programming assignments.

Readings

There are no textbooks for this course. The required readings are all available on the World Wide Web. In addition, you'll want to have a look from time to time at the document that defines Scheme:

To any of you who are interested in seeing alternative approaches to the subject, I can recommend the following books:

The instructor

John David Stone

Office: Science 2418
Telephone: extension 3181
E-mail: stone@cs.grinnell.edu
Office hours: Mondays, 2:15 to 4:15 p.m.; Tuesdays, 2:15 to 4:15 p.m.; Thursdays, 9 to 11 a.m.; and by appointment.

Interesting links

schemers.org front-door page

The Programming Languages Team (creators of DrScheme)

PLT Scheme libraries and extensions

Scheme home page at MIT

Frequently asked questions about Scheme

The Scheme Underground

Colleges, universities, and secondary schools that teach and use Scheme

Scheme requests for implementation

Previous versions of the course

Spring, 2000

Spring, 1998

Fall, 1997

Spring, 1997


This document is available on the World Wide Web as

http://www.cs.grinnell.edu/~stone/courses/scheme/

Validated as XHTML
1.1 by the World Wide Web Consortium Style information validated as
CSS2 by the World Wide Web Consortium

created October 24, 1996
last revised December 12, 2001

John David Stone (stone@cs.grinnell.edu)