{"id":7725,"date":"2004-07-26T23:35:53","date_gmt":"2004-07-26T21:35:53","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/2004\/07\/26\/how-to-design-programs\/"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T22:00:00","slug":"how-to-design-programs","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2004\/07\/26\/how-to-design-programs\/","title":{"rendered":"How to Design Programs"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p>\t<img decoding=\"async\" class=\"alignright\" src=\"\/wordpress\/wp-content\/20040726-htdp-cover.gif\" alt=\"Book cover\"><\/p>\n<p>&#8220;<a href=\"http:\/\/www.htdp.org\/\">How to Design Programs<\/a>&#8221; is yet another book to read from MIT Press.   The good thing about this particular book is that it talks about general programming principles.  These principles are useful not only to professional developers, but to almost everyone.  In book&#8217;s own words:<\/p>\n<blockquote>\n<p>Many professions require some form of computer programming. Accountants program spreadsheets and word processors; photographers program photo editors; musicians program synthesizers; and professional programmers instruct plain computers. Programming has become a required skill.<\/p>\n<p>Yet programming is more than just a vocational skill. Indeed, good programming is a fun activity, a creative outlet, and a way to express abstract ideas in a tangible form. And designing programs teaches a variety of skills that are important in all kinds of professions: critical reading, analytical thinking, creative synthesis, and attention to detail.<\/p>\n<\/blockquote>\n<p>This book can be purchased in print from <a href=\"http:\/\/www.amazon.com\/exec\/obidos\/tg\/detail\/-\/0262062186\/002-1993252-1214469?v=glance\">Amazon<\/a>, or read online on it&#8217;s <a href=\"http:\/\/www.htdp.org\">website<\/a>.  Also on the website you can find solutions to all problems presented in the book, additional problem sets, corrections to all known mistakes and typos, and much more.<\/p>\n<p>If you don&#8217;t know why you should learn how to design programs, then flip through first few pages &#8211; there is a special part for you.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>&#8220;How to Design Programs&#8221; is yet another book to read from MIT Press. The good thing about this particular book is that it talks about general programming principles. These principles are useful not only to professional developers, but to almost everyone. In book&#8217;s own words: Many professions require some form of computer programming. Accountants program &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2004\/07\/26\/how-to-design-programs\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">How to Design Programs<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,62],"tags":[],"keyring_services":[],"class_list":["post-7725","post","type-post","status-publish","format-standard","hentry","category-general","category-technology"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":23090,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/12\/04\/quine-relay-an-uroboros-program-with-80-programming-languages\/","url_meta":{"origin":7725,"position":0},"title":"quine-relay &#8211; an uroboros program with 80+ programming languages","author":"Leonid Mamchenkov","date":"December 4, 2014","format":false,"excerpt":"quine-relay - an uroboros program with 80+ programming languages. If you didn't get it, here's a better description: This is a Ruby program that generates Scala program that generates Scheme program that generates ...(through 80 languages in total)... REXX program that generates the original Ruby code again. Insanity at\u00a0its best!\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"quine relay","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2014\/12\/quine-relay-500x500.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":7949,"url":"https:\/\/mamchenkov.net\/wordpress\/2004\/09\/24\/epigrams-on-programming\/","url_meta":{"origin":7725,"position":1},"title":"Epigrams on Programming","author":"Leonid Mamchenkov","date":"September 24, 2004","format":false,"excerpt":"Alan J. Perlis of Yale University has combined a nice collection of Epigrams on Programming. These are both funny and useful at the same time one-lines that help staying in the right direction when designing and implementing computer programs.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":15107,"url":"https:\/\/mamchenkov.net\/wordpress\/2011\/06\/12\/on-teaching-programming-languages\/","url_meta":{"origin":7725,"position":2},"title":"On teaching programming languages","author":"Leonid Mamchenkov","date":"June 12, 2011","format":false,"excerpt":"Via this tweet I came across this insightful comment over at Slashdot. \u00a0Quoting in its\u00a0entirety: A bit off topic, but you triggered something I've been thinking about for a couple of years. That \"spark\" is fluency. I swtiched jobs from being a computer programmer to being an ESL teacher in\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":29238,"url":"https:\/\/mamchenkov.net\/wordpress\/2019\/01\/21\/professional-programming\/","url_meta":{"origin":7725,"position":3},"title":"Professional Programming","author":"Leonid Mamchenkov","date":"January 21, 2019","format":false,"excerpt":"Professional Programming is yet another excellent list of resources, such as books, articles, and courses, for people pursuing programming as a professional career. The more, the better, I say.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27162,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/12\/22\/signs-that-youre-a-bad-programmer\/","url_meta":{"origin":7725,"position":4},"title":"Signs that you&#8217;re a bad programmer","author":"Leonid Mamchenkov","date":"December 22, 2016","format":false,"excerpt":"Software Engineering Tips shares some tips on how to figure out if you are a bad programmer, and how to remedy that. Signs that you're a bad programmer Inability to reason about code Poor understanding of the language's programming model Deficient research skills \/ Chronically poor knowledge of the platform's\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11416,"url":"https:\/\/mamchenkov.net\/wordpress\/2008\/11\/03\/on-software-testing\/","url_meta":{"origin":7725,"position":5},"title":"On software testing","author":"Leonid Mamchenkov","date":"November 3, 2008","format":false,"excerpt":"The software is checked very carefully in a bottom-up fashion. First, each new line of code is checked, then sections of code or modules with special functions are verified. The scope is increased step by step until the new changes are incorporated into a complete system and checked. This complete\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/7725","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=7725"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/7725\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=7725"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=7725"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=7725"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=7725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}