
How to Design Programs, Second Edition - olalonde
http://www.ccs.neu.edu/home/matthias/HtDP2e
======
m-felleisen
From 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.

------
nixpulvis
As 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
As 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
I'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.

------
vog
I 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/)

------
macco
Great 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)

------
howardlykim
This 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.

------
Pewqazz
UBC'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.

------
Scarbutt
Can someone from the Racket community share how this book compares to Realm of
Racket?

~~~
brudgers
_How 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
Quote 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
You 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
Replace '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
What 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.

~~~
ruma
At one of the coffee shops local to me works a woman who was encouraged into
programming as a career. She believed she could do it, did a BSc, worked as a
dev for a year, hated it, now works at the coffee shop scratching her head
about what to do. My last IT director had a similar experience. He became a
business analyst after hating dev for two years, having become a dev by having
the prescribed requirements. Programming simply is not for everyone, and
telling those people to just practice ignores the fact that they couldn't do
so and retain their sanity. I think it's fair that we don't expect people to
forego their sanity, and therefore that they won't be able to practice, and
therefore that they will never be good programmers.

~~~
dkersten
There is a big difference between saying _" programming simply is not for
everyone"_ and _" not everyone can learn to program"_.

The book is saying that everyone can be good (although like guitar, through
practice). That's very different from _" everybody will be good"_ or _"
everybody will enjoy it"_ or _" programming is for everyone"_

Sometimes it's hard to know if its for you or not until you've immersed
yourself in it for long enough. Unfortunately for the woman you mentioned,
this was likely many years of her time. Other people know immediately. Either
way it doesn't mean that they couldn't learn or get nothing out of it.

You don't have to be a chef for knowing how to cook nice things to be a useful
skill to have.

~~~
ruma
"Good programming ... everyone can do it" \- you seem to be arguing whether
something can be gained - I don't think anyone is arguing that.

If good programming requires practice, and some people cannot stand the
practice, then they cannot be good programmers.

"Good programming ... everyone who likes programming or can stand to do the
significant practice can do it."

"Crap programming ... everyone can do it."

------
ekr
Does 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
[http://docs.racket-lang.org/scribble/index.html](http://docs.racket-
lang.org/scribble/index.html)

------
swedev
Sounds interesting. Does anyone know if it is available as pdf? I only found
the first edition as pdf.

------
arkx
Earlier submission:
[https://news.ycombinator.com/item?id=2958108](https://news.ycombinator.com/item?id=2958108)

------
d0m
Where 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.

------
ExpiredLink
If you know how to design real-world programs after having read this book you
must know it from somewhere else.

~~~
ska
On the other hand, the real-world is swimming in programs that would have
benefitted from some of the ideas in this book...

------
nstott
I just stumbled on this tonight as well, I'm happy it's still active.

------
ExpiredLink
> _We assume few prerequisites: arithmetic, a tiny bit of middle school
> algebra_

... and Lisp :(

~~~
vog
No, they introduce Lisp themselves, so it's not a prerequisite.

