12 ms·
How to Design Programs, Second Edition
- nstott 12y agoI just stumbled on this tonight as well, I'm happy it's still active.
- Pewqazz 12y agoUBC's introductory CS course (CPSC 110) uses HtDP/2e as its "textbook". Given the progress that the majority of students make throughout the term, I think it's quite successful in terms of teaching the fundamentals, despite not being based on a more "conventional" language like Python or Java.
- nixpulvis 12y agoAs a student of NEU, I personally swear by this resource. Having been a part of the staff of the course for 3 years now, I can say that students love to bitch about Racket at the start, but few curse it's name by the end. I wish more people were as excited by Racket as I am.
- cnntth 12y agoAs a freshman who took the course that uses this book, I can say I'm still cursing the name. I figure some of the value will become clearer, but aside from commenting functions clearly and testability of code, I don't think I got much of value from it.
- nixpulvis 12y agoI've seen the benefits of teaching freshman (and anyone) functional programming first. The "comments" are really an introduction to type systems, along with general good practice. The ability to describe a function by purely it's signature without the presence of mutation makes reasoning through hard problems more straightforward.
- truncate 12y agoI'm coming to NEU this spring and excited to see Scheme there. I followed few chapters from SICP some time ago, and am curious how similar/different is HTDP from SICP?
- arkx 12y agoThe authors of HtDP wrote a paper on the differences: http://www.ccs.neu.edu/racket/pubs/jfp2004-fffk.pdf http://www.ccs.neu.edu/racket/pubs/jfp2004-fffk.pdf
- howardlykim 12y agoThis is an invaluable resource (next to McConnell's Code Complete) that has influenced the way I program even to this day. Happy to see that my old university is still using HtDP as its curriculum's primary guidance.
- deleted 12y ago[deleted]
- woah 12y agoYou're telling there are no books on artistic techniques?
- deleted 12y ago[deleted]
- Scarbutt 12y agoCan someone from the Racket community share how this book compares to Realm of Racket?
- technomancy 12y agoI haven't read either cover-to-cover, but from the chapters I've read, Realm of Racket is a lot more conversational. It feels slightly gimmicky with the emphasis on games. Also Realm assumes you have some programming experience in other languages. How to Design Programs starts at the very beginning and has a lot more principled of an approach, focusing on FP and programming as calculation of values. It's by far my favourite introductory programming text.
- brudgers 12y agoHow to Design Programs is a conventional college textbook. Felleisen and the PLT Group have a specific pedagogy developed during his decades as as educators with a deep interest in teaching computing [not just computing in general]. Realm of Racket is designed more or less as a self paced tutorial. It is in the tradition of Land of Lisp. It is targeted at a broader and more general audience.
- mb_72 12y agoQuote from that page: "Good programming requires thought, but everyone can do it and everyone can experience the extreme satisfaction that comes with it." That contrasts directly with my opinion after 20-years of development experience working on applications across a number of industries and in teams of 1 to 100. Not 'all' programmers can be or are good, and definitely this is not true for 'all people' in general. After such a start, why then should I read further? I'm genuinely interested to know the answer.
- dragonwriter 12y agoYou should read further to find out why the authors disagree with your opinion (including how they explain your experience), and how they propose approach the problem you think is insoluble. Well, except that seems to be covered better by the preface to the firat edition.
- mb_72 12y agoReplace 'programming' with 'guitar playing' or 'painting' and I would still think the same way. 'Programming' is not a special case. Thanks, though, I will read ahead a bit and try and keep an open mind.
- sparkie 12y agoWhat makes a good guitar player, or painter anyway? They practice. Your idea that some people "have it" and some don't is just not true with almost anything in reality. Prodigies are extremely rare, and everyone else who "has it" got there by practicing in their field. Anybody (assuming no other learning disabilities) can become a programmer, and a good one at that, if they honestly believe they can do it, study the foundational skills they need for it, then practice and practice. Try to remember how you became a programmer - chances are you started learning at an early age - you already had the foundational skills in language, math and science etc, because you were competent in school, and you probably spent a large part of your youth engaged in programming. You're no prodigy, and you didn't have it to begin with. Instead of saying "I can't do it", your probably the type to ask "how can I do it?". The "bad", or non-programmers are more likely to be the ones who say "I can't do it", "it's too complicated for me", etc. You can crush the chance of these people ever being competent by simply agreeing with them that they can't - because if they don't have the belief that they can, they won't bother spending hours learning the foundational skills they need, or the thousands of hours practicing which would turn them into good programmers. From my teaching experience, the learner's belief is by far the most important factor in their learning. Those who have no belief will simply not put any effort into learning, and will never progress. The author obviously understands this too, and invites the reader to first believe they can do it, so that they continue reading. Try to write some educational material for programming, and introduce it by saying "You probably won't ever get good at this, you suck, why are you still reading?", and see how many engaged readers you get.
- ekr 12y agoDoes any know what software was used to generate the book? I assume, because of the CC license, the source might be in some github repo, but I was unable to find it. LE: Thanks.
- logn 12y agohttp://docs.racket-lang.org/scribble/index.html http://docs.racket-lang.org/scribble/index.html
- ExpiredLink 12y ago> We assume few prerequisites: arithmetic, a tiny bit of middle school algebra ... and Lisp :(
- vog 12y agoNo, they introduce Lisp themselves, so it's not a prerequisite.
- swedev 12y agoSounds interesting. Does anyone know if it is available as pdf? I only found the first edition as pdf.
- macco 12y agoGreat book. Especially the prelude is a great tutorial. The book is used best in conjuction with Coursera's https://www.coursera.org/course/programdesign https://www.coursera.org/course/programdesign
- vog 12y agoI especially like their introduction on how to create a web service, using continuations for handling session, a technique also used "Beating the averages": http://docs.racket-lang.org/more/ http://docs.racket-lang.org/more/
- ExpiredLink 12y agoIf you know how to design real-world programs after having read this book you must know it from somewhere else.
- ska 12y agoOn the other hand, the real-world is swimming in programs that would have benefitted from some of the ideas in this book...
- arkx 12y agoEarlier submission: https://news.ycombinator.com/item?id=2958108 https://news.ycombinator.com/item?id=2958108
- d0m 12y agoWhere can we pre-order the second edition? Is it available somewhere? This is the kind of book that I'd rather have a real copy.
- m-felleisen 12y agoFrom the lead author: (1) The book is not finished yet. But it will appear with MIT Press, and I expect it to appear over the next year and a half or so. (2) Realm is best read after HtDP [1e or 2e] or some other course on plain programming (not necessarily program design). It teaches (simple) programming in Racket. (3) HtDP [2e] does NOT teach programming in Racket. It uses several teaching languages, each matching a stage in the convex hull of the design recipes (tactics) of a certain part of the book. HtDP's design tactics do away with the usual "everything is a Turing machine so learn by coping me" approach.