CS 1410-20 — Computer Science I for Hackers

Note: The term hacker is used on this page in the traditional senseas in The Hacker’s Dictionary or Hacker Newsnot in the sense of circumventing computer security.


There’s no simple definition for the word hacker as intended here, but a good approximation might be “a programmer whose target audience is other programmers.”

Section 20 is an accelerated and systems-oriented version of CS 1410. The section covers the programing concepts of other sections of CS 1410, but through a different approach.

The official title of the course is Object-Oriented Programming, like all sections of CS 1410, and the section indeed covers object-oriented programming. Section 20 covers more, however, and the title Computer Science I for Hackers better captures the intent of the course.

A Two-Semester Sequence

Section 20 of CS 1410 is intended as the first part of a two-semester sequence, and a companion section of CS 2420 will be offered in the spring semester.

Enrolling in section 20 of CS 1410 does not oblige a student to enroll in the companion CS 2420 section. Students who finish section 20 of CS 1410 will be prepared for the standard sections of CS 2420, although they may have to learn some Java details to synchronize with students in the main track. (Books and other references on Java are plentiful.)

Enrolling in the companion CS 2420 section without having taken section 20 of CS 1410 is not recommended, since the course will build on concepts, terminology, and skills that are specific to section 20 of CS 1410.

For Hackers by a Hacker

The section 20 sequence is based on How to Design Programs (HtDP), a textbook for which the instructor is a co-author. Actually, the course starts with the draft second edition of HtDP. In the space of programming approaches, Racket and HtDP are considered high-level functional programming. The instructor, however, believes that the approach is also fundamentally the same as high-level object-oriented programming, and the course is designed to make that connection clear.

The section 20 sequence is also based on the instructor’s perspective from implementing the Racket language and run-time system, which ultimately requires low-level imperative programming. That perspective drives the emphasis on a machine model and machine-level algorithms in the CS 2420 part of the sequence.

Putting those pieces together, students in the section 20 sequence learn how to implement a high-level language using a low-level language, Implementing Lisp is a rite of passage for an aspiring hacker. which is a topic that is usually reserved for upper-division courses. At the same time, the concepts required for programming-language implementation serve many other kinds of programming tasks as well.


If you have any question about section 20 of CS 1410, contact Matthew Flatt (the instructor) at mflatt@cs.utah.edu.