HN Books @HNBooksMonth

The best books of Hacker News.

Hacker News Comments on
How to Design Programs: An Introduction to Programming and Computing

Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi · 4 HN comments
HN Books has aggregated all Hacker News stories and comments that mention "How to Design Programs: An Introduction to Programming and Computing" by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi.
View on Amazon [↗]
HN Books may receive an affiliate commission when you make purchases on sites after clicking through links on this page.
Amazon Summary
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 develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners. The environment grows with the readers as they master the material in the book until it supports a full-fledged language for the whole spectrum of programming tasks. All the book's support materials are available for free on the Web. The Web site includes the environment, teacher guides, exercises for all levels, solutions, and additional projects. A second edition is now available.
HN Books Rankings

Hacker News Stories and Comments

All the comments and stories posted to Hacker News that reference this book.
* How to Code: Simple Data and How to Code: Complex Data on edX. Taught by Gregor Kiczales, of Common Lisp and CLOS fame. Uses Racket and graphical programs to teach.

https://www.edx.org/course/how-to-code-simple-data

https://www.edx.org/course/how-to-code-complex-data

* The From Nand to Teris project, The Elements of Computing Systems: Building a Modern Computer from First Principles book, and/or Coursera course. Builds a hardware stack for a CPU and then a software stack (assembler, VM, high-level language).

https://www.nand2tetris.org/

https://www.coursera.org/learn/build-a-computer

https://www.coursera.org/learn/nand2tetris2

https://www.amazon.com/Elements-Computing-Systems-second-Pri...

* The How to Design Programs book. What the edX course above is based upon.

https://htdp.org/

https://www.amazon.com/How-Design-Programs-Introduction-Prog...

* Structure and Interpretation of Computer Programs (SICP). Uses Scheme. One can use Racket with the `#lang sicp` language.

https://mitpress.mit.edu/sites/default/files/sicp/index.html

https://www.amazon.com/Structure-Interpretation-Computer-Pro...

YouTube playlist of the course by the authors: https://youtube.com/playlist?list=PLE18841CABEA24090

* Thinking as Computation: A First Course. Uses Prolog to solve problems of thinking.

https://www.amazon.com/Thinking-Computation-First-Course-Pre...

https://www.cs.toronto.edu/~hector/PublicTCSlides.pdf

* Turtle Geometry: The Computer as a Medium for Exploring Mathematics (shares an author with SICP). Uses Logo to explore turtle geometry/graphics. Can use any modern Logo implementation.

https://www.amazon.com/Turtle-Geometry-Mathematics-Artificia...

https://direct.mit.edu/books/book/4663/Turtle-GeometryThe-Co...

* Starting Forth. Uses Forth.

https://www.forth.com/starting-forth/

https://www.amazon.com/Starting-Forth-Leo-Brodie-ebook/dp/B0...

* Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction and also The Nature of Code: Simulating Natural Systems with Processing. Uses Processing and p5.js (the JavaScript version of Processing).

http://learningprocessing.com/

https://natureofcode.com/

https://www.amazon.com/Learning-Processing-Beginners-Program...

https://www.amazon.com/Nature-Code-Simulating-Natural-Proces...

The author's YouTube channel: https://youtube.com/c/TheCodingTrain

https://processing.org/

For self-guided study, HTDP (How to Design Programs) is more accessible than SICP.

https://www.amazon.com/How-Design-Programs-Introduction-Prog...

I am a self-taught programmer/hacker and the best thing I ever learned was Racket. http://racket-lang.org/

Here is what got me off the ground. The first unit is learning ML and the second unit was Racket. https://www.youtube.com/user/afigfigueira/playlists?shelf_id...

This is from a Coursera Course that is not being offered right now. It covers a lot of different languages but the Racket and ML parts are a great starting point.

I liked this book - http://www.amazon.com/Realm-Racket-Learn-Program-Game-ebook/...

If that is too simple there always is http://www.amazon.com/How-Design-Programs-Introduction-Progr...

I prefer seeing people code and talk about it so the videos are great.

cponeill
I took this course last year and loved it. As a self taught developer as well, these videos really helped me understand some concepts that I still hadn't wrapped my head around yet.
I'll actually answer your question.

Ruby and Python are now too good at doing webby stuff in that there are not enough Ruby devs to meet the demand of companies without skyrocketing salaries. It is easy to hire good Ruby devs, provided you have $400k to spend per year, but that isn't your real question.

Your real question is what languages will people really, really want to work for my company to use because nobody else is using them. I can only think of a couple: Common Lisp, Closure, Scheme, Smalltalk. There are others that are happy-fun languages but not necessarily I love you languages that few startups are using: Scala, server side CoffeeScript, Io, F#.

But the problem you run into there is that many of these languages don't have as many webby aspects to them which is why fewer startups use them in the first place.

I'd probably recommend Scheme because it has the best book of all time: http://www.amazon.com/How-Design-Programs-Introduction-Progr... That book can teach anyone how to code Scheme. Although all the languages I listed are awesome.

SkyMarshal
I can only think of a couple: Common Lisp, Closure, Scheme, Smalltalk. There are others that are happy-fun languages but not necessarily I love you languages that few startups are using: Scala, server side CoffeeScript, Io, F#.

That's Clojure (http://clojure.org/), not Closure, unless you're referring to Google's JavaScript compiler (http://code.google.com/closure/compiler/).

And I wouldn't call Scala a 'happy-fun language but not necessarily an I love you language' (what's the difference b/t the two?). Twitter is using it to replace the non-scalable parts of Rails, and FourSquare and BankSimple are built on it from the get-go.

Also, anything based on the JVM, especially Scala and Clojure, have tons of 'webby' libraries and frameworks out there. Start with the Lift and Play web frameworks, respectively, and the Netty async server, among other things.

Murkin
Can you perhaps point me to one of those $400K Ruby jobs ?

Kidding aside, he wanted something with a strong existing application / infrastructure base.

And while CLisp, Closure, etc are fun, we can all agree that starting 99% of web projects in them is probably a bad choice.

3pt14159
Maybe Murkin, but Ruby was a bad choice. It's all what you build on it, and part of the fun might just be building and understanding things better than just doing "require 'i18n'".

Ruby is an amazing language, I love it, but so many things have been solved already it feels like it is a game of pick the package, rather than actual fun, at least in web development.

thmzlt
I felt the same way when I tried to start a "real" web project in a different language, and I got back to Ruby because I was more interested in implementing my own ideas rather than re-implementing existing solutions.

It means you should try to understand the libraries you're using instead of arbitrarily picking packages. Devise (https://github.com/plataformatec/devise) is a great example of that as they explicitly tell people not to use it unless they have a good understanding of the Rails framework.

sanderjd
Might be a good way to know if you're doing something boring if you're just playing the pick-the-package game. If what you're doing is less interesting than re-implementing all those packages, then it might not be worth doing.
Murkin
In our startup we choose Ruby&Rails, might not be the most fun language and framework. But the #1 priority of our dev team, is to build the product - fast/simple/modifiable.

Same goes for Python&Django.

I personally believe in to choosing the best tool for the job - not the most fun/esoteric/interesting/etc one.

hello_moto
I'm a little bit surprised that Ruby and Rails are considered no longer fun.

What's fun these days? LISP and JS?

sanderjd
Nit-pick: it's actually spelled "Clojure" - wouldn't matter, except for the existence of Google's tool set called "Closure", which Clojure's browser hosted version uses, leading to lots of room for confusion.
SoftwarePatent
That's a good book. Here's a link to the complete text online, on the official website.

http://www.htdp.org/2003-09-26/

cppsnob
Oh, that's what he's asking?

To the OP: do your startup in Java. Then at least you'll be hiring devs who give a damn about building your product, rather than ones who just want to screw around in whatever's shiny and new.

sanderjd
There are people who give a damn about the product on other technology stacks, and being interested in shiny things is not mutually exclusive with being pragmatic and caring about product. But maybe you're right that the Java community has the most people like this.
hello_moto
I don't know why you guys downvote cppsnob (unless if he's being sarcastic).

Some of the Java startups look more solid than the rest. Zimbra, SpringPad, LinkedIN.

cppsnob
Thanks hello_moto. I wasn't being sarcastic -- I mean what I said earnestly.

Put another way: find developers who want to work for you because they want to build what you want to build, not ones who will only work for you because you chose "technology X" to build it. One way to guarantee that is to choose a tech that you're positive can do the job and is boring... Java is that tech.

olliesaunders
find developers who want to work for you because they want to build what you want to build, not ones who will only work for you because you chose "technology X" to build it

Some people will be perfectly content to build anything just as long as it’s written in <their choice obscure language>. For other people it might be really important that you use agile, or that they are given a greater level of control over the development process, or that they can work from home, or whatever it is that they care about.

So really I’m saying is that you should generalize your advice here: find people who care about what you care about. Don’t try to guess what that is. And to do that, go away and figure out what exactly you care about, ask other people to do the same and compare notes.

hello_moto
This is the way to go: people that are in the same page with you. Leading such group is definitely far easier.

Ask yourself who you are and find the same people.

HN Books is an independent project and is not operated by Y Combinator or Amazon.com.
~ yaj@
;laksdfhjdhksalkfj more things
yahnd.com ~ Privacy Policy ~
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.