How to Design Programs, Second Edition
This book focuses on habits of good programming, addressing both professional and vocational programmers.
Publication date: 06 May 2020
ISBN-10: n/a
ISBN-13: n/a
Paperback: n/a
Views: 22,148
Type: Book
Publisher: The MIT Press
License: Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Generic
Post time: 31 Aug 2016 07:30:00
How to Design Programs, Second Edition
Matthias Felleisen wrote: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 first edition of the book (1995–2000), people 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.
With “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 designand systematically designed programs. Critically, the latter articulates the rationale of the desired functionality. Good programming also satisfies 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.
About The Author(s)
Matthias Felleisen is a Trustee Professor in the College of Computer and Information Science at Northeastern University in Boston, Massachusetts. In the past he has taught at Rice University after receiving his PhD from Indiana University under the direction of Daniel P. Friedman. Felleisen's interests include programming languages, including software tools, program design, software contracts, and many more.
Matthias Felleisen is a Trustee Professor in the College of Computer and Information Science at Northeastern University in Boston, Massachusetts. In the past he has taught at Rice University after receiving his PhD from Indiana University under the direction of Daniel P. Friedman. Felleisen's interests include programming languages, including software tools, program design, software contracts, and many more.
Robert Bruce Findler is an associate professor of electrical engineering and computer science at Northwestern University. He is also a member of the PLT group and, as such, responsible for the creation and maintenance of DrRacket. In addition to DrRacket, Findler has contributed numerous components to Racket and supervises its Web-based software library, called PLaneT. Findler is also a leading team member of the ProgramByDesign project.
Robert Bruce Findler is an associate professor of electrical engineering and computer science at Northwestern University. He is also a member of the PLT group and, as such, responsible for the creation and maintenance of DrRacket. In addition to DrRacket, Findler has contributed numerous components to Racket and supervises its Web-based software library, called PLaneT. Findler is also a leading team member of the ProgramByDesign project.
Matthew Flatt is a professor of computer science at the University of Utah in Salt Lake City. He is also a member of the core development team for the Racket programming language.
Shriram Krishnamurthi is Professor of Computer Science at Brown PLT, Computer Science Department, Brown University.
Shriram Krishnamurthi is Professor of Computer Science at Brown PLT, Computer Science Department, Brown University.