This course is a general introduction to the fundamental ideas of theoretical computer science: algorithms, data structures, and abstraction. It includes some computer programming (algorithm design, documentation, coding, testing, and debugging) in a high-level programming language, Scheme.
Office: Science 2418
Telephone: extension 3181
E-mail: stone@cs.grinnell.edu
Office hours: Mondays, 10 a.m. to noon; Tuesdays, 9 to 11 a.m.; Thursdays, 2:15 to 4:15 p.m.; and by appointment.
The readings for this course are all on line.
You'll want to look from time to time at the document that defines the Scheme programming language:
and at the manual for the main software tool that we'll be using to create and execute our programs:
If any of you are interested in seeing alternative approaches to the subject, I can recommend the following books:
Here are some additional links that you may find interesting:
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 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.
You should, however, do each day's reading before coming to class and prepare questions about it in advance.
The class meets in the MathLAN lab, Science 2417. There are four sessions a week -- Mondays, Tuesdays, Wednesdays, and Fridays at 2:15 p.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.
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.
I prefer to receive the programs that you write by electronic mail. Send your submission 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.
The DrScheme programming environment is available both on MathLAN workstations and on many lab computers around campus. If you have a computer of your own, you can download a copy of DrScheme from http://download.plt-scheme.org/drscheme/. There is no charge. DrScheme is distributed under the terms of the GNU Lesser General Public License. This license imposes no restrictions whatever on users of DrScheme; it simply sets out the (extremely generous) conditions under which one can modify or redistribute the software. DrScheme runs under Windows, MacOS , Linux, Solaris, and some other operating systems.
There will be a three-hour, cumulative, final examination at the end of the course. This examination involves little or no programming, but consists rather of computational problems and topical questions to be answered in English prose. It is an open-book, open-note examination, and you may if you like use calculators, but not computers.
The registrar has scheduled the final examination in this course for Thursday, May 19, from 2 to 5 p.m. Plan your travel schedule accordingly.
Your grades on the programming assignments make up seven-tenths of the final grade. Your grade on the final examination contributes one-fifth, and class attendance the remaining tenth. I occasionally award extra credit 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.)
Since you will receive credit on the basis of your individual performance, it would be unethical to submit a programming assignment or an examination that is not your own, or to collaborate on work submitted under your name alone, 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.