On this page:
CMSC 131A:   Systematic Program Design I

CMSC 131A: Systematic Program Design I

Fall, 2017

Program design is the study of systematic thought, planning, and universally useful problem-solving skills applied in the setting of programming and computation.

CMSC 131A is an introduction to computing and programming. Its major goal is to introduce students to the principles of systematic problem solving through programming and the basic rules of computation.

Caveat: Note that CMSC 131A is being offered on a trial basis as an alternative introductory course sequence. If you take CMSC 131A you must take CMSC 132A as a subsequent course. This course will not prepare you for the traditional CMSC 132 (no "A") course. However, students who complete the 131A-132A sequence will be fully prepared for all subsequent courses that list 131-132 as prerequisites.

By the end of the course, majors in computer science will have a sense for difference between a programmer and a well-trained software developer. Students from all majors will have a sense of the complexities involved in developing solid software (highly useful in case they ever collaborate with such professionals) and they ought to be able to use the principles of programming to solve many non-computational problems in a systematic manner.

Masterful programmers design programs the way Jacques Pépin makes an omellete: with systematic technique, honed creativity, and a strong aesthetic (“There’s the Wrong Way and Jacques Pépin’s Way,” New York Times, Oct. 18, 2011).

This course exposes students to the fundamental techniques of program design: “an approach to the creation of software that relies on systematic thought, planning, and understanding from the very beginning, at every stage and for every step” (HtDP/2e, Preface). While taking this course will not make you a great programmer, you cannot become a great programmer without mastering these skills. More importantly, even if you never program again, a student of design “will still pick up universally useful problem-solving skills, experience a deeply creative activity, and learn to appreciate a new form of aesthetic.”

Assumptions: The course does not assume any prior programming experience. It is therefore suitable for all freshman students—majors and non-majors alike—who wish to explore the intellectual ideas of the discipline. It does assume familiarity with (high school) arithmetic and algebra, and it demands curiosity, self-discipline, and willingness to work with others.

Disclaimer: All information on this web page is tentative and subject to change until the start of the semester.




E-mail (@cs.umd.edu)

Office Hours

David Van Horn

3439 AVW



Nicholas Labich

4103 AVW



Cameron Moy

1120 AVW



Austin Bourgerie

1120 AVW



Thomas Harris

1120 AVW





1115 CSI



MWF 11:00am–11:50am

Midterm 1


Oct 2, in class

Midterm 2


Nov 6, in class

Final exam


TBD by Registrar



How to Design Programs, 2nd edition, Felleisen, et al.