This course is an accelerated introduction to college-level computer science. Our Anticipated Frequent Questions explains how you get into the course.

In this course, we’ll be using a programming language called Pyret, in which we will practice functional programming. (We don’t assume you know anything about either, and will teach you both from scratch.) We will actually use only a tiny sliver of Pyret, not exposing you—much as we’d love to!—to its many powerful features, because this isn’t a course about Pyret. Rather, it’s a course about software construction, which means: being able to design programs, and being able to translate designs into implementations. Designing software means making wise choices about data structures, algorithms, and program organization. Implementing means more than just writing code: it means making wise decisions about systems and interfaces.

We use Pyret for many reasons. First, linguistically, Pyret—a descendant of Racketis a strong counter-point to Java (which you’ll see a lot more of at Brown) in terms of both syntax and semantics, so it exposes you to a diversity of ideas. Second, its idiomatic style is spartan where Java’s is baroque, so you learn to approach programing differently. Third, lots of smart people think it’s valuable for you to know more than just Java:
Fourth, assuming you had some typical high-school computer science, if all we did was repeat what you learned in high school, what would have been the point of attending college? Finally, getting accustomed to programming functionally will help you better prepare for massively-parallel programming on numerous cores.“Every reader should ask himself periodically “Toward what end, toward what end?” — but do not ask it too often lest you pass up the fun of programming for the constipation of bittersweet philosophy.”—Alan Perlis

Spartan doesn’t mean we won’t have fun! We will write programs with images and animation; we’ll write games; and we’ll see how all these things can be done using just simple concepts. Indeed, it is precisely by engaging with these real-world computing platforms and phenomena with simple tools that you can best study the essence of the important ideas of computer science.