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

CMSC 131A: Systematic Program Design I

Fall, 2018

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.

Staff

Name

Office

E-mail

Hours

David Van Horn

3439 AVW

dvanhorn@cs.umd.edu

3:30-5:30PM Mon

Samuel Barham

1112 AVW

sbarham@cs.umd.edu

10-11AM Mon, Wed

William Daseking

1112 AVW

wdasekin@terpmail.umd.edu

1-3PM Fri

Deena Postol

1112 AVW

dpostol@umd.edu

1-3PM Wed

Fikko Soenanta

1112 AVW

fsoenant@terpmail.umd.edu

10AM-12PM Tues

Location

 

3117 CSI

Time

 

MWF 11:00am–11:50am

Midterm 1

 

Oct 1, in class

Midterm 2

 

Nov 5, in class

Final exam

 

Dec 13, 4–6 pm (ATL 1113)

Textbooks

 

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