Fall 2013



This course introduces students to abstract problem solving through the design of computer programs. Students are not expected to have had any prior programming experience. I have a lot of fun teaching this class and my goal is for everyone to have fun learning this material. Whether you do or not is entirely up to you. However, I will guarantee that if you learn to love the challenges presented in this course and you are willing to invest the time necessary to overcome those challenges, you will do well.

The skill of designing programs transcends specific programming languages. As much as we want to think in abstractions however, we must use an actual concrete language in order to practice the skills we are learning. In this course, we use a series of languages written in the language Racket, which is wonderfully simple yet powerful and is ideal for full-blown commercial applications as well as for a beginning student's first language. The languages we will use have only a hand-full of syntactic elements and we will learn them early in the semester. The simplicity of the language lets us quickly reach a stage where we can write programs that do interesting and fun things. We will be writing network and/or web applications as well as animated simulations before the end of the semester.

By the end of the semester, you will be reasonably fluent in Racket-like languages and prepared to learn any one of the many other programming languages or to continue in Racket. We will model the course after learning a foreign language by immersion. For most class meetings, we will introduce some new material and use that to write programs -- sometimes together, sometimes in pairs, sometimes individually.

I offer students the option of in-course honors. Contact me if you are eligible for and interested in taking CS010 for in-course honors.

Course Materials