CS 135: Designing Functional Programs

Course Philosophy

CS 135 is in part inspired by Math 135, a course that does not simply seek to teach facts about a list of topics, but instead introduces ways of thinking about mathematics. The goal of CS 135 is to introduce ways of thinking about computation, and ways of learning in a university environment. This course will not tell students how to do any given task in a rote fashion; it will try to show students how they can figure out possible means of accomplishing tasks. Thus, though students may not be programming in the specific language and environment of this course in the future, the skills they have learned will be applicable to new languages and environments. This also means that the same course can effectively serve both students intending to major in CS and students who will later use computers in their chosen areas of study.

The course is built around a strong textbook, so lectures will elaborate on the framework provided by the text, giving an overview of topics enriched by additional examples and explanations. We have deliberately chosen a "lightweight implementation", avoiding excessive structuring and interdependencies in course activities and materials. This will allow students to develop their own strategies for approaching and mastering concepts, and will let future instructors and tutors tailor their delivery to their own particular strengths while remaining consistent with the central themes of the course. In this respect, CS 135 resembles many upper-year CS courses, and we hope it will provide a representative look at the process of studying computer science.

External Links

  • Racket homepage
  • Lambda the Ultimate, a community weblog on research in programming languages. There's more to life than Java and C++!
  • A project at Carnegie-Mellon University on closing the gender gap in computer science education. This was part of the motivation for the development of CS 135/136.
  • Scheme testimonials (mostly from high school teachers, but some college/university links as well). Racket is based on Scheme, which is a functional programming language.
  • The Perils of Java Schools, an article on the popular Joel on Software blog arguing that students need to learn Scheme and C. Some of the arguments here are debatable, but the general theme of going beyond the mundane is worth considering.

Last modified on Wednesday, 07 January 2015, at 16:49 hours.