CSC 151: Fundamentals of computer science I

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.


The instructor

John David Stone

Office: Science 2418

Telephone: extension 3181

E-mail: stone@cs.grinnell.edu

Office hours: Mondays, 10 a.m. to noon; Tuesdays, 2:15 to 4:05 p.m.; Thursdays, 1:15 to 3:05 p.m.; and by appointment.


Readings

I have ordered two textbooks for this course:

We shall also study an ethics code for professional software engineers, drawn up by members of the Institute of Electrical and Electronic Engineers (IEEE) and ACM (the Association for Computing Machinery):

In addition, you'll want to look from time to time at the document that defines the Scheme programming language:

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:


Requirements

Class sessions

The class meets in the MathLAN lab, Science 2417. There are four sessions a week -- Mondays, Tuesdays, Wednesdays, 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.

The requirement for class sessions is simply that you prepare for each one, by studying the assigned reading and formulating questions about it, 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.

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.

As you develop your programs, I recommend that you use the DrScheme programming environment, which 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 (Classic or X), Linux, Solaris, and some other operating systems.

The final examination

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 Friday, May 14, from 9 a.m. to noon. Plan your travel schedule accordingly.

Grading

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.)

Individual and collaborative work

Since you will receive credit on the basis of your individual performance, 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.


Previous versions of the course


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 Cascading Style Sheet validated by the World Wide Web Consortium

created October 24, 1996
last revised January 14, 2004

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