Introduction to Computer Science 1: Spacewar!
| Professor | Dr K Darcy Otto |
| Title | Introduction to Computer Science 1: Spacewar! |
| Code | CS 2139 |
| Credits | 4 |
| Term | Fall 2026 |
| Times | Tuesday/Friday 10h30–12h20 |
| Location | Dickinson 239 |
| Delivery | Fully in-person |
| Contact | |
| Office Hours | W1–3 |
In 1962, a group of programmers at MIT created Spacewar!, one of the first video games ever made. By the end of this course, you’ll build your own version of it. Along the way, you’ll learn what computer science actually is, which turns out to be less about coding and more about systematic design.
We use Racket, a language designed for learning, where images, strings, and numbers are all things you can compute with. That means you can work with pictures just as naturally as you can add numbers. Within the first few weeks, you’ll be writing programs that produce images and respond to keyboard and mouse input. No prior programming experience is required. Instead of memorizing syntax, you’ll learn a systematic design method: a repeatable way of moving from a problem statement to a working program, one careful step at a time.
The ideas you’ll encounter, including functions, control structures, data structures, and event-driven programs, are foundational to all of computer science. But they’ll also teach you something broader: how to take a messy real-world problem, figure out what information matters, and build a clear solution. This course is a prerequisite for CS2: Designing Worlds.
| Midterm | 40% | Comprehensive |
| Final Examination | 40% | Comprehensive |
| Presentations | 20% | Exercises |
Midterm and Final Examination: Both tests will cover everything we’ve discussed in class and read about. You’ll see conceptual questions, design challenges, and programming problems.
Presentations: In many classes, you will be asked to present a solution to a homework problem on the board, with nothing but chalk.
We use Racket in this course because it stands in the tradition of languages like Lisp and Scheme: languages created to explore the deepest ideas of computer science, not just to follow industry trends. Learning Racket is like learning the piano instead of just memorizing a song. It teaches you about computation at the most fundamental level. As Paul Graham argues in “Beating the Averages” (*Hackers and Painters, Chapter 12), using a language with the expressive power of Racket changes how you think, because it gives you conceptual tools you wouldn’t otherwise have. At the same time, Racket is practical: it has a gentle learning curve, an excellent development environment (DrRacket) with superb documentation, and emphasizes clarity of thought.
Download Racket from here. There are versions for all modern Macs, Linux machines, and Windows. The file name will look something like:
racket-9.x-aarch64-macosx-cs.dmg on an Apple Silicon Macracket-9.x-x86_64-macosx-cs.dmg on an Intel Macracket-9.x-arm64-win32-cs.exe on a PCracket-9.x-x86_64-win32-cs.exe on an Intel PCracket-9.x-x86_64-linux-buster-cs.sh on Debian LinuxInstall Racket: On a Mac, open the .dmg file and drag the Racket folder to Applications. On a PC, run the .exe installer and follow the prompts. On Linux, open a terminal and run: sh racket-9.x-x86_64-linux-buster-cs.sh.
Start DrRacket: On a Mac: this is in the Racket folder of your Applications list. If your computer complains that DrRacket is not from a “trusted developer,” go into the Finder, then Applications, right-click DrRacket, and click “Open” to bypass this. You only need to do this once. On a PC: this is in the Racket folder of your Applications list. On Linux: after installation, you can usually start DrRacket from your Applications menu. If not, open a terminal and run: drracket &
Lab computers in Dickinson have DrRacket pre-installed, if you prefer not to install it on your personal machine. You can also use them as a backup if your installation runs into problems.
An overarching objective of this course is to help you develop as a student of the liberal arts. True students of the liberal arts are able to reflect on the context in which they live, and reason about what it means to live a meaningful and happy life. Thus, they are able to be more than just children of their own time. But this means we must be willing to put our ideas to the test, see our own errors, and develop intellectual courage and humility. It also helps not to take ourselves too seriously.