{"id":100,"date":"2004-08-10T22:19:53","date_gmt":"2004-08-10T22:19:53","guid":{"rendered":"http:\/\/localhost:8000\/?p=100"},"modified":"2004-08-10T22:19:53","modified_gmt":"2004-08-10T22:19:53","slug":"review-of-the-little-schemer","status":"publish","type":"post","link":"https:\/\/blog.gwadej.org\/programmer-musings\/2004\/08\/review-of-the-little-schemer\/","title":{"rendered":"Review of The Little Schemer"},"content":{"rendered":"<p><cite>The Little Schemer<\/cite><br \/>\nDaniel P. Friedman and Matthias Felleisen<br \/>\nThe MIT Press, 1996.<\/p>\n<p>One of my wife&#8217;s friends recommended this book for learning Scheme. He&#8217;s a big proponent of Scheme and has even done research into teaching Scheme to kids. He is quite knowledgeable in his field. On the other hand, I have never written a line of Scheme; although I did some coursework with LISP during my master&#8217;s degree. Although I don&#8217;t normally choose to work in LISP(-based) languages, I can appreciate some of their power.<\/p>\n<p>I realized that this book was going to require a bit of suspension of disbelief in the preface, where I found this gem:<\/p>\n<blockquote><p>Most collections of data, and hence most programs, are recursive.<\/p><\/blockquote>\n<p>I agree that there are many useful collections of data that are recursive. I would even agree that many programs apply recursion. But I find the assertion that <strong>most<\/strong> are recursive a little strong. In fact, the only way I could see this is if the language the writers were working in treated almost everything as recursion. And, of course, this is the case.<\/p>\n<p>The other real problem I had with the book is the style. The book is written as a series of questions and answers that lead you to the conclusions that they wish. Some of these question and answer sessions became quite strained; such as trying to explain how a complicated function works. In other spots, the authors asked a question that there is no way the reader could have begun to answer. The authors would then respond with something like:<\/p>\n<blockquote><p>You were not expected to be able to do this yet, because you are missing some of the ingredients.<\/p><\/blockquote>\n<p>I found this style very jarring. I&#8217;ve learned a dozen or so languages from books (including LISP), and I&#8217;ve never had this much trouble understanding a computer language. The style may work for someone else, but it did nothing for me.<\/p>\n<p>From the comments above, you might decide that I have nothing good to say about the book. That&#8217;s actually not the case. I found <em>the Five Rules<\/em> and <em>the Ten Commandments<\/em> to be very effective ideas. The Five Rules basically define some of the most primitive operations in the language. The Ten Commandments state some important best practices.<\/p>\n<p>I was also surprised at times by really sweet pieces of code and understanding that would come after some prolonged pseudo-Socratic Q&amp;A sessions. Some of the insights and commandments are well worth the read. But, overall I found it difficult going.<\/p>\n<p>Since it is considered one of the classics for learning Scheme, you should probably consider it if you are needing to learn Scheme or LISP. If all you&#8217;ve done is code in C or Java, it might be worth reading to introduce yourself to another way of looking at problems. But, I find it very hard to recommend this book to anyone else.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Little Schemer Daniel P. Friedman and Matthias Felleisen The MIT Press, 1996. One of my wife&#8217;s friends recommended this book for learning Scheme. He&#8217;s a big proponent of Scheme and has even done research into teaching Scheme to kids. He is quite knowledgeable in his field. On the other hand, I have never written\u2026 <span class=\"read-more\"><a href=\"https:\/\/blog.gwadej.org\/programmer-musings\/2004\/08\/review-of-the-little-schemer\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,13],"tags":[55,146,196,277,296],"_links":{"self":[{"href":"https:\/\/blog.gwadej.org\/programmer-musings\/wp-json\/wp\/v2\/posts\/100"}],"collection":[{"href":"https:\/\/blog.gwadej.org\/programmer-musings\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.gwadej.org\/programmer-musings\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.gwadej.org\/programmer-musings\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.gwadej.org\/programmer-musings\/wp-json\/wp\/v2\/comments?post=100"}],"version-history":[{"count":0,"href":"https:\/\/blog.gwadej.org\/programmer-musings\/wp-json\/wp\/v2\/posts\/100\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.gwadej.org\/programmer-musings\/wp-json\/wp\/v2\/media?parent=100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.gwadej.org\/programmer-musings\/wp-json\/wp\/v2\/categories?post=100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.gwadej.org\/programmer-musings\/wp-json\/wp\/v2\/tags?post=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}