Course Outline

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 Email
Office Hours W1–3

Description

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.

Learning Outcomes

  1. Apply a systematic design method to move from problem statements to well-tested programs.
  2. Work with multiple forms of data, including numbers, strings, and images, and understand that computation is not limited to arithmetic on numbers.
  3. Define functions, compose them, and use constants to write programs that are readable and easy to change.
  4. Build interactive, graphical programs using world state, event handlers, and rendering, the same ideas behind every modern user interface.
  5. Use data definitions, intervals, enumerations, and structures to model real-world information as data a program can work with.
  6. Develop a foundation in program design that supports more advanced work in algorithms, data structures, and computer science broadly.

Readings

  • Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurth. How to Design Programs, 2nd ed. MIT Press, 2014. On Populi.
  • Paul Graham. Hackers and Painters: Big Ideas from the Computer Age. O’Reilly, 2004.

Evaluation

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.

  1. Class Schedule : Schedule of topics and homework
  2. Etherpad : Information sharing
  3. DrRacket: Our development environment, to be installed on your machine
  4. Spacewar!: The first video game (1962)
  5. Asteroids: Inspired by Spacewar!
  6. Games as Cultural Artifacts : Spacewar! is at the top of the list.
  7. Bouncing Ball Program: From a long time ago

Racket

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.

  1. 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 Mac
    • racket-9.x-x86_64-macosx-cs.dmg on an Intel Mac
    • racket-9.x-arm64-win32-cs.exe on a PC
    • racket-9.x-x86_64-win32-cs.exe on an Intel PC
    • racket-9.x-x86_64-linux-buster-cs.sh on Debian Linux
  2. Install 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.

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

Course Policies

  1. Outline: This outline is subject to arbitrary change. I shall announce any changes in class; if you are not present, you are still responsible for finding out what I announce.
  2. Missed Midterm: There is no makeup midterm. If you have a documented medical or compassionate reason for missing the midterm, the weight of your final examination will be prorated.
  3. Attendance: Come to class. Three unexcused absences is a marginal pass; four is a failure, even if your other work is fine. Excused absences don’t count.
  4. Laptops and Cell Phones: Don’t use mobile technology in class unless I specifically permit it.
  5. AI Tools: Don’t use generative AI for any assignments unless I explicitly allow it. If I do allow it, you must cite exactly how you used it according to Chicago style.
  6. Office hours: Office hours are first-come-first-serve, unless you have an appointment. If you want to schedule something, email me a few times that work for you.
  7. College Policies: Be familiar with the college rules on attendance and academic integrity as articulated in the Student Handbook
  8. Grading: If you opt for a letter-grade, your mark in the course will be translated according to the following scale: A+ (90–100), A (85–89), A– (80–84), B+ (77–79), B (73–76), B– (70–72), C+ (67–69), C (63–66), C– (60–62), D (50–59), F (0–49). If you do not opt for a letter-grade, the scale is as follows: Pass (65–100), Marginal Pass (50–62), Fail (0-49).

A Note on Liberal Arts Learning

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.