How to Design Programs: An Introduction to Programming and Computing (The MIT Press) second edition
Many professions require some form of programming. Accountants program spreadsheets; musicians program synthesizers; authors program word processors; and web designers program style sheets. When we wrote these words for the ﬁrst edition of the book (1995–2000), readers may have considered them futuristic; by now, programming has become a required skill and numerous outlets—books, on-line courses, K-12 curricula—cater to this need, always with the goal of enhancing people’s job prospects.
The typical course on programming teaches a “tinker until it works” approach. When it works, students exclaim “It works!” and move on.
Sadly, this phrase is also the shortest lie in computing, and it has cost many people many hours of their lives. In contrast, this book focuses on habits of good programming, addressing both professional and vocational programmers.
By “good programming,” we mean 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. To emphasize the point, we speak of systematic program design and systematically designed programs. Critically, the latter articulates the rationale of the desired functionality. Good programming also satisﬁes an aesthetic sense of accomplishment; the elegance of a good program is comparable to time-tested poems or the black-and-white photographs of a bygone era. In short, programming differs from good programming like crayon sketches in a diner from oil paintings in a museum.
No, this book won’t turn anyone into a master painter. But, we would not have spent ﬁfteen years writing this edition if we didn’t believe that
everyone can design programs
everyone can experience the satisfaction that comes with creative design.
Indeed, we go even further and argue that program design—but not programming—deserves the same role in a liberal-arts education as mathematics and language skills.
A student of design who never touches a program again will still pick up universally useful problem-solving skills, experience a deeply creative activity, and learn to appreciate a new form of aesthetic. The rest of this preface explains in detail what we mean with “systematic design,” who beneﬁts in what manner, and how we go about teaching it all.
Systematic Program Design
A program interacts with people, dubbed users, and other programs, in which case we speak of server and client components. Hence any reasonably complete program consists of many building blocks: some deal with input, some create output, while some bridge the gap between those two. We choose to use functions as fundamental building blocks because everyone encounters functions in pre-algebra and because the simplest programs are just such functions. The key is to discover which functions are needed, how to connect them, and how to build them from basic ingredients.
In this context, “systematic program design” refers to a mix of two concepts: design recipes and iterative reﬁnement. The design recipes are acreation of the authors, and here they enable the use of the latter.
Design Recipes apply to both complete programs and individual functions. This book deals with just two recipes for complete programs: one for programs with a graphical user interface (GUI) and one for batch programs. In contrast, design recipes for functions come in a wide variety of ﬂavors: for atomic forms of data such as numbers; for enumerations of different kinds of data; for data that compounds other data in a ﬁxed manner; for ﬁnite but arbitrarily large data; and so on.
The function-level design recipes share a common design process. Figure 1 displays its six essential steps. The title of each step speciﬁes the expected outcome(s); the “commands” suggest the key activities. Examples play a central role at almost every stage. For the chosen data representation n step 1, writing down examples proves how real-world information is encoded as data and how data is interpreted as information. Step 3 says that a problem-solver must work through concrete scenarios to gain an understanding of what the desired function is expected to compute for speciﬁc examples. This understanding is exploited in step 5, when it is time to deﬁne the function. Finally, step 6 demands that examples are turned into
|Download Ebook||Read Now||File Type||Upload Date|
|November 3, 2019|
Do you like this book? Please share with your friends, let's read it !! :)How to Read and Open File Type for PC ?