Cover of How to Design Programs

How to Design Programs

An Introduction to Programming and Computing

by Matthias Felleisen · first published 2001

776mentions
277recommended by
440HN commenters
2007–2026first – last mentioned

62% recommend32% neutral5% critical

Why HN recommends it

Free, systematic introduction to program design using Racket, teaching how to think about programming through design recipes. Gentler and less dense than SICP; suits beginners and those uneasy with recursion.

Summarised by Claude from recommending comments

This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills -- critical reading, analytical thinking, creative synthesis, and attention to detail -- that are important for everyone, not just future computer programmers. The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to de

Affiliate links. As an Amazon Associate I earn from qualifying purchases.

Mentions per year

530 2007: 7 mentions2008: 8 mentions2009: 34 mentions2010: 17 mentions2011: 50 mentions2012: 17 mentions2013: 20 mentions2014: 31 mentions2015: 32 mentions2016: 19 mentions2017: 29 mentions2018: 53 mentions2019: 50 mentions2020: 45 mentions2021: 48 mentions2022: 41 mentions2023: 44 mentions2024: 20 mentions2025: 19 mentions2026: 16 mentions200720172026

What Hacker News says

  • michaelsbradley · Mar 25, 2015 · Recommends

    The book How to Design Programs[1], with its "student languages", is an excellent example of how languages created with Racket can be used to achieve specific goals (or solve specific problems). In the book's case, the goal is to provide…

    on “The Racket Manifesto” ↗
  • malandrew · Mar 29, 2011 · Recommends

    …The Little Schemer to the list. It may not seem like the most practical book, but it will make you a better programmer. Beyond that, I would reiterate the following suggestions put forth by others: -- How to Design Programs (get version 2. Racket, the IDE for this book, is practically plug-and-play, so you won't waste time prepping your development environment) -- Think Python by Allen Downey (i haven't read this one, but…

    on “Best program and books to learn how to code?” ↗
  • michaelsbradley · Mar 12, 2015 · Recommends

    It depends. Learning Racket and the design methodology taught by Felleisen, et al. could help you become a better programmer in general, and thus significantly further your career. How to Design Programs, Second Edition http://www.ccs.neu.edu/home/matthias/HtDP2e/

    on “Why Go? Use Racket” ↗
  • shanusmagnus · Jun 22, 2022 · Recommends

    …examples of. From my own experience, some examples might be: - SICP, by Abelson and Sussman - Paradigms of Artificial Intelligence Programming, by Norvig By general acclaim, some examples might be: - How to Design Programs, by Felleisen et al - Beautiful Racket, by Butterick - LISP In Small Pieces, by Queinnec - The Art of Computer Programming, by Knuth - The Elements of Computing Systems, by Nisan and Schocken What…

    on “Crafting Interpreters: A Review” ↗
  • palsecam · Jul 19, 2009 · Recommends

    In addition to "How to Design Programs", there is also the excellent "Structure and Interpretation of computer programs", also fully available online (and also from MIT): http://mitpress.mit.edu/sicp/ SICP is a very very good computer science…

    on “Download Lisp to my brain.” ↗
  • ericlavigne · Dec 26, 2009 · Recommends

    …to get into programming. If I could send my younger self some advice, it would be the books you just mentioned. Also Felleisen's other books such as Little Schemer (shorter and more introductory than How to Design Programs) and How to Design Worlds. I think I would have been ready for them around 8th or 9th grade, but I didn't discover Lisp until grad school. How difficult is it to find Lisp programming jobs in Boston…

    on “Ask HN: How did you get started in hacking/programming?” ↗
  • aphexairlines · Aug 4, 2011 · Recommends

    If you're interested in books, I like these. Intro to programming books: Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi. How to Design Programs: An Introduction to Programming and Computing. Daniel P. Friedman (Author), Matthias Felleisen (Author), Duane Bibby (Drawings), Gerald J. Sussman (Foreword). The Little Schemer. Programming language…

    on “Wadler's critique of SICP (1987)” ↗
  • brudgers · Feb 27, 2014 · Recommends

    Felleisen's How to Design Programs has an entirety different set of goals than SICP. HtDP teaches programming practices. SICP teaches 'computer science.' HtDP is a great book, but no substitute for SICP in terms of content.

    on “Racket 6.0: New package system, new doc CSS, JIT support for ARM” ↗
  • brudgers · Aug 27, 2014 · Recommends

    …forward very very slowly. Great for some people, drying paint for others. It is taught in Python. A course I think is great is Coursera's Introduction to Systematic Program Design [2] based on Felleisen's How to Design Programs introductory text. It is possible to register for the last session, from a year ago, and complete the work on your own. It is taught in Racket. Another course that takes a learn-by-making approach is…

    on “Ask HN: Best online programming class for newbies?” ↗
  • jnbiche · Jan 20, 2015 · Recommends

    …Otherwise, there are a lot of similar language that have tons of learning resources. Racket in particular, as well as MIT Scheme, are two languages related to Arc, both with great, open-source books (How to Design Programs and SICP) that teach you how to truly program, not just hack up a web site like many programming books do [1, 2]. Really, these are probably two of the greatest programming books, albeit with very different…

    on “Anyone interested in teaching arc?” ↗
  • michaelsbradley · Feb 15, 2015 · Recommends

    How to Design Programs[1], while not an introduction to Racket per se, is a wonderful way to get started with the Lisp-family of languages and with computer programming in general. Once you work all the way through Part 1…

    on “How to Program Racket” ↗
  • shawnps · Jul 1, 2015 · Recommends

    …Northeastern University where PLT Scheme (now Racket) was the first programming language I ever learned in a classroom. Matthias Felleisen, the second poster in that thread, is a professor at NU and co-author of How to Design Programs: http://www.ccs.neu.edu/home/matthias/HtDP2e/ I recommend this book for anyone interested in learning more about Racket.

    on “John Carmack working on Scheme as a VR scripting language” ↗
  • mbrock · Feb 20, 2016 · Recommends

    There might be good such books, I wouldn't really know. The Scheme-oriented How to Design Programs seems like a good candidate. I think the Haskell world would benefit from talking a bit more about "design patterns." I've seen the concept get a fair bit of abuse because of the claim that Haskell's…

    on “The Joy and Agony of Haskell in Production” ↗
  • sn9 · Sep 8, 2016 · Recommends

    The resources are out there. It's more an issue of educators and policy-makers either not knowing they exist or not knowing that's what they need. I'm thinking of books like Think Python and How to Design Programs.

    on “How to Write a Spelling Corrector” ↗
  • wikibob · May 6, 2017 · Recommends

    …languages (perhaps F#) ? I'm just starting to get into them [0] and it's been really fascinating. Jet.com has an interesting post on why they chose F# for similar reasons [1] [0] I'm working through the How to Design Programs book from Matthias Felleisen which I highly recommend despite its rough edges http://www.ccs.neu.edu/home/matthias/HtDP2e/ [1] https://tech.jet.com/blog/2015/03-22-on-how-jet-chose/

    on “Programming with a love of the implicit” ↗

Keyboard shortcuts

/
Focus search
j / k
Next / previous book
Enter
Open focused book
Esc
Close / go back
g h
Go to Home
g t
Go to Top all-time
g m
Go to Most recommended
g r
Go to Rising
g f
Go to For You
?
Show this help