How to Design Programs: Difference between revisions

Content deleted Content added
Werieth (talk | contribs)
m clean up using AWB
m Disambiguating links to Object-orientation (link changed to Object-oriented programming) using DisamAssist.
 
(83 intermediate revisions by 36 users not shown)
Line 1:
{{Short description|Computer programming textbook by Matthias Felleisen and colleagues}}
{{Use mdy dates|date=July 2018}}
{{Infobox book
| name = How to Design Programs
| image = [[File:How to Design Programs (front cover).jpg|164px|Front cover]]
| caption =
| author = [[Matthias Felleisen]], [[Robert Bruce Findler]], [[Matthew Flatt]], [[Shriram Krishnamurthi]]
| cover_artist = =
| country = [[United States of America|USA]]
| subject = [[Computer programming]]
| genre = [[Textbook]]
| publisher = [[MIT Press]]
| pub_date = February 12, 2001
| media_type = print
| pages = 720
| isbn = 0-262-06218-6
| oclc = =
| dewey = =
| congress = QA76.6 .H697 2001}}
| website = {{URL|htdp.org}}
'''''How to Design Programs''''' ('''''HtDP''''') is a textbook by [[Matthias Felleisen]], [[Robert Bruce Findler]], [[Matthew Flatt]] and [[Shriram Krishnamurthi]] on the systematic design of [[computer programs]] published in 2001 by [[MIT Press]]. The book introduces the concept of a ''design recipe'', a six-step process for creating programs from the problem statement. While the book was originally used in conjunction with the '''TeachScheme!''' project (now [[ProgramByDesign]]), it has been adopted at a number of colleges and universities for the teaching of program design principles.
}}
 
'''''How to Design Programs''''' ('''''HtDP''''') is a textbook by [[Matthias Felleisen]], [[Robert Bruce Findler]], [[Matthew Flatt]], and [[Shriram Krishnamurthi]] on the systematic design of [[computer programsprogram]]s. [[MIT Press]] published the first edition in 2001, byand [[MITthe Press]]second edition in 2018, which is freely available online and in print. The book introduces the concept of a ''design recipe'', a six-step process for creating programs from thea problem statement. While the book was originally used in conjunctionalong with the 'education project ''TeachScheme!''' project (nowrenamed [[ProgramByDesign]]), it has been adopted at a number ofmany colleges and universities for the teaching of program design principles.
According to '''HtDP''', the design process starts with a careful analysis of the problem statement with the goal of extracting a rigorous description of the kinds of [[data]] that the desired program consumes and produces. The structure of these data descriptions determines the organization of the program.
 
According to '''HtDP''', the design process starts with a careful analysis of thea problem statement with the goal of extracting a rigorous description of the kinds of [[data]] that the desired program consumes and produces. The structure of these data descriptions determines the organization of the program.
The book therefore carefully introduces more and more complex kinds of data, which sets it apart from every other introductory programming book. It starts from ''atomic'' forms of data and then progresses to ''compound'' forms of data, including data that can be arbitrarily large. For each kind of data definition, the book explains how to organize the program in principle, thus enabling a programmer who encounters a new form of data to still construct a program systematically.
 
TheThen, bookthe thereforebook carefully introduces moredata and more complex kindsforms of data,progressively whichgrowing sets it apart from every other introductory programming bookcomplexity. It starts fromwith data of ''atomic'' forms of data and then progresses to ''compound'' forms of data, including data that can be arbitrarily large. For each kind of data definition, the book explains how to organize the program in principle, thus enabling a programmer who encounters a new form of data to still construct a program systematically.
Like ''[[Structure and Interpretation of Computer Programs]]'' ('''SICP'''), '''HtDP''' relies on a variant of the [[Scheme (programming language)|Scheme programming language]]. Indeed, it comes with its own programming environment, dubbed [[DrRacket]], which provides a series of programming languages. The first language supports only functions, atomic data and simple structures. Each language adds expressive power to the previous one. With the exception of the largest teaching language, all languages for '''HtDP''' are [[functional programming languages]].
 
Like ''[[Structure and Interpretation of Computer Programs]]'' ('''SICP'''), '''HtDP''' relies on a variant of the programming language [[Scheme (programming language)|Scheme programming language]]. It Indeed, it comes withincludes its own programming [[integrated development environment]] (IDE), dubbednamed [[DrRacket]], which provides a series of programming languages. The first language supports only functions, atomic data, and simple structures. Each language adds expressive power to the previousprior one. WithExcept the exception offor the largest teaching language, all languages for '''HtDP''' are [[functional programming languages]] languages.
In the 2004 paper [[The Structure and Interpretation of the Computer Science Curriculum]],<ref>{{Citation | url = http://www.ccs.neu.edu/scheme/pubs/jfp2004-fffk.pdf | title = The Structure and Interpretation of the Computer Science Curriculum | year = 2004 | publisher = NEU | format = [[PDF]]}}, a paper in which the authors compare and contrast '''HtDP''' with '''SICP'''.</ref> the authors distinguish the pedagogical focus of '''HtDP''' from that of '''SICP''', and show how '''HtDP''' was designed as a textbook to address certain issues that some students and teachers had with '''SICP'''.
 
==Pedagogical basis==
==References==
In the 2004 paper, The Structure and Interpretation of the Computer Science Curriculum,<ref>{{Citation
<references/>
|url=http://www.ccs.neu.edu/scheme/pubs/jfp2004-fffk.pdf
|title=The Structure and Interpretation of the Computer Science Curriculum. Journal of Functional Programming, Volume 14, Issue 4 (July 2004) Pages: 365 - 378
|year=2004
|publisher=NEU
|url-status=live
|archive-url=https://web.archive.org/web/20080511171056/http://www.ccs.neu.edu/scheme/pubs/jfp2004-fffk.pdf
|archive-date=May 11, 2008
}} a paper in which the authors compare and contrast HtDP with SICP.</ref> the same authors compared and contrasted the pedagogical focus of ''How to Design Programs'' (HtDP) with that of ''[[Structure and Interpretation of Computer Programs]]'' (SICP). In the 14-page paper, the authors distinguish the pedagogic focus of HtDP from that of SICP, and show how HtDP was designed as a textbook to address some problems that some students and teachers had with SICP.
 
The paper introduces the pedagogical landscape surrounding the publication of SICP. The paper starts with a history and critique of SICP, followed by a description of the goal of the [[computing]] curriculum. It then describes the principles of teaching behind HtDP; in particular, the difference between implicit vs. explicit teaching of design principles. It then continues on to describe the role of [[Scheme (programming language)|Scheme]] and the importance of an ideal [[Computer programming|programming]] environment, and concludes with an extensive evaluation of content and student/faculty reaction to experience with SICP vs. HtDP.
==External links==
* {{official website|http://htdp.org/}}
* {{Citation | url = http://www.ccs.neu.edu/home/matthias/HtDP2e/ | edition = draft of 2nd | publisher = NEU | title = HtDP}}.
 
One of the major focuses of the paper is the emphasis on the difference in required [[___domain knowledge]] between SICP and HtDP. A chart in the paper compares major exercises in SICP and HtDP, and the related text describes how the exercises in the former require considerably more sophisticated ___domain knowledge than those of HtDP. The paper continues on to explain why this difference in required ___domain knowledge has resulted in certain students having confused ___domain knowledge with program design knowledge.
[[Category:2001 books]]
 
The paper claims the following four major efforts that the authors of HtDP have made to address perceived issues with SICP:
#HtDP addresses explicitly, rather than implicitly, how programs should be constructed.
#To make programming easier, the book guides students through five different knowledge levels corresponding to data definition levels of complexity.
#The book's exercises focus on program design guidelines, rather than ___domain knowledge.
#The book assumes less ___domain knowledge than that of SICP.
 
The paper then distinguishes between structural [[recursion]], where the related data definition happens to be [[self-referential]], requiring usually a straightforward design process, and generative recursion, where new problem data is generated in the middle of the problem-solving process and the problem solving method is re-used, often requiring ''ad hoc'' mathematical insight, and stresses how this distinction makes their approach scalable to the [[Object-oriented programming|object-oriented]] (OO) world.
 
Finally, the paper concludes with a description of responses from various faculty and students after having used HtDP in the classroom.
 
== References ==
{{Reflist}}
 
== External links ==
* {{Official website|htdp.org}}, 2018 2nd edition, 2003 1st edition
{{Lisp programming language}}
 
[[Category:2001 non-fiction books]]
[[Category:Computer science books]]
[[Category:2001MIT Press books]]
[[Category:Computer programming books]]
[[Category:Scheme (programming language)]]
[[Category:Creative Commons-licensed books]]