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
Disclaimer: All information on this web page is tentative and subject to change until the start of the semester.
10-11AM Mon, Wed
Oct 1, in class
Nov 5, in class
Dec 13, 4–6 pm (ATL 1113)
How to Design Programs, 2nd edition, Felleisen, et al.