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.
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.
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.
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.
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.
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.
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.
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:
Kelsey, Richard, Clinger, William, and Rees, Jonathan. Revised5 Report on the Algorithmic Language Scheme (February 20, 1998).
To any of you who are interested in seeing alternative approaches to the subject, I can recommend the following books:
Abelson, Harold, and Sussman, Gerald Jay, with Sussman, Julie. Structure and interpretation of computer programs (Cambridge, Massachusetts: MIT Press, second edition, 1996). The full text of this book is available on the World Wide Web (follow the link).
Dybvig, R. Kent. The Scheme programming language (Upper Saddle River, New Jersey: Prentice Hall PTR, second edition, 1996). The full text of this book is available on the World Wide Web (follow the link).
Felleisen, Matthias, Findler, Robert Bruce, Flatt, Matthew, and Krishnamurthi, Shriram. How to design programs: an introduction to computing and programming (Cambridge, Massachusetts: The MIT Press, 2001). The full text of this book is available on the World Wide Web (follow the link).
Friedman, Daniel P., and Felleisen, Matthias. The little Schemer (Cambridge, Massachusetts: The MIT Press, fourth edition, 1996).
Hailperin, Max, Kaiser, Barbara, and Knight, Karl. Concrete abstractions (Pacific Grove, California: PWS, 1999).
Springer, George and Friedman, Daniel P. Scheme and the art of programming (Cambridge, Massachusetts: The MIT Press, 1989).
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.
schemers.org front-door page
The Programming Languages Team (creators of DrScheme)
PLT Scheme libraries and extensions
Frequently asked questions about Scheme
Colleges, universities, and secondary schools that teach and use Scheme
Scheme requests for implementation
This document is available on the World Wide Web as
http://www.cs.grinnell.edu/~stone/courses/scheme/
created October 24, 1996
last revised December 12, 2001