
Ask HN: After SICP, what next? - plinkplonk
One of my friends just finished working through SICP (progress here - http://lawfulsamurai.blogspot.com/search/label/SICP, - the last few sections still have to be updated)  and asked me for reccomendations for future work.<p>I thought of telling him to get really strong on algorithms etc (perhaps by working through Tardos/ Cormen et al, doing all the exercises like he did for SICP), but thought I'd tap the good folk of HN for better (or  different) suggestions. Working through CTM for example is an option (another of my friends was doing this http://ctm-himanshu.blogspot.com/ but he didn't quite complete it).<p>(This has nothing to do with his day job which is java/python/Django. Just something for him to work through when he has a few hours and learn cool things.). Any suggestions gratefully accepted!<p>Thanks in advance.
======
dschobel
This is the single best text I've seen on algorithms in the real-world:
[http://www.amazon.com/Algorithm-Design-Manual-Steve-
Skiena/d...](http://www.amazon.com/Algorithm-Design-Manual-Steve-
Skiena/dp/0387948600)

Can't recommend it enough.

~~~
zain
Here's the second edition from 2008: [http://www.amazon.com/Algorithm-Design-
Manual-Steven-Skiena/...](http://www.amazon.com/Algorithm-Design-Manual-
Steven-Skiena/dp/1848000693/ref=sr_1_1?ie=UTF8&s=books&qid=1242427006&sr=1-1)

~~~
pkrumins
Thanks! I did not know there was the 2nd edition!

------
prakash
Introduction to Information Retrieval: <http://www.amazon.com/dp/0521865719/>

Convex Optimization: <http://www.amazon.com/dp/0521833787/>

Foundations of Statistical Natural Language Processing:
<http://www.amazon.com/dp/0262133601/>

Read Peter Norvig's review for Foundations of
....<http://www.amazon.com/review/R3GSYXSKRU8V17/>

I haven't read any of these books, yet, highly recommended by some friends.

~~~
jules
Here are video lectures by the author of the convex optimization book (Stephen
Boyd):

[http://see.stanford.edu/see/courseinfo.aspx?coll=2db7ced4-39...](http://see.stanford.edu/see/courseinfo.aspx?coll=2db7ced4-39d1-4fdb-90e8-364129597c87)

[http://see.stanford.edu/see/courseinfo.aspx?coll=523bbab2-dc...](http://see.stanford.edu/see/courseinfo.aspx?coll=523bbab2-dcc1-4b5a-b78f-4c9dc8c7cf7a)

And video lectures by the author of the NLP book (Christopher D. Manning):

[http://see.stanford.edu/see/courseinfo.aspx?coll=63480b48-88...](http://see.stanford.edu/see/courseinfo.aspx?coll=63480b48-8819-4efd-8412-263f1a472f5a)

------
pz
I recommend the Kleinberg/Tardos textbook: [http://www.amazon.com/Algorithm-
Design-Jon-Kleinberg/dp/0321...](http://www.amazon.com/Algorithm-Design-Jon-
Kleinberg/dp/0321295358)

It is a really enjoyable read and has a nice narrative that I think other
algorithm books are lacking. CLR, for instance, just reads like a handbook to
me. The goal Kleinberg/Tardos book, OTOH, is to teach you how to design and
analyze algorithms. They will actually follow false starts on certain problems
and uncover where they break.

Kleinberg is the rebel king!

------
jsmanger
The best book to follow up SICP is Essentials of Programming Languages, by
Friedman, Wand, and Haynes. It uses Scheme to show how the fundamentals of
programming languages are built, and both in its form and its content, it
seems a direct continuation from SICP. After you've done with it, you'll have
a much better understanding of Scheme, functional programming, programming
languages, and programming in general.

------
fernando
\- Concepts, Techniques and Models of Computer Programming

\- Algorithms, a functonal approach

\- Real World Haskell

\- Paradigms of artificial intelligence programming

Any of these are excellent post-sicp reads.

~~~
darkxanthos
I don't suppose you have a copy of "Algorithms, a functonal approach" you want
to sell huh? The used price is more than the brand new price! Lame.

~~~
fernando
I bought it new on Amazon.co.uk for a very reasonable price. It was printed on
demand, so it took some time, but it was worth it.

------
Xichekolas
Did he enjoy sections 4 (Metalingustic Abstractions) and 5 (Register
Machines)?

If so, he'd probably be interested in both these books. They are quite hefty,
but seem to be goldmines (so far, I'm only just getting started on them
myself).

[http://research.microsoft.com/en-
us/um/people/simonpj/papers...](http://research.microsoft.com/en-
us/um/people/simonpj/papers/slpj-book-1987/index.htm)

and

[http://research.microsoft.com/en-
us/um/people/simonpj/papers...](http://research.microsoft.com/en-
us/um/people/simonpj/papers/pj-lester-book/)

Both books cover much of the same ground. The first one is heavier on theory,
while the second one reads a LOT like SICP. Currently I'm working through the
second one and using the first one when I want more in-depth info on a certain
topic.

~~~
sethg
_Lisp In Small Pieces_ ([http://pagesperso-
systeme.lip6.fr/Christian.Queinnec/WWW/LiS...](http://pagesperso-
systeme.lip6.fr/Christian.Queinnec/WWW/LiSP.html)) is sort of intermediate
between SICP and the Peyton-Jones stuff; it still focuses on Lisp dialects
that use dynamic typing and applicative-order evaluation, but it shows a whole
bunch of different approaches to exploring that design space and implementing
stuff in it.

I also enjoyed reading Pierce's _Types and Programming Languages_
(<http://www.cis.upenn.edu/~bcpierce/tapl/>), although I was kind of nodding
my head and going "yeah, whatever" during some of the proofs.

~~~
mahmud
Both recommendations are little too high for someone just coming out of SICP.
I recommend Essentials of Programming Languages as a stepping stone. Pierce's
book is probably irrelevant to someone just interested in Lisp; type theory is
best approached through an ML angle. And Quinnec's book is not for the faint
of heart; you will need to have been well versed in lisp, compiler/runtime
implementation techniques and have brushed against denotational semantics
(through the Nielson and Nielson book, perhaps.)

[edit: _denotational_ , not operational, semantics; OS can be learned in a
fun-filled weekend. The "small-step" variety should appeal to both language
hackers and (virtual) machine enthusiasts.]

------
tom_b
I'm personally going to work through Programming Language Pragmatics. I want
to have a better foundation in language paradigms, plus fill a hole in my
education (no, zero, nada, real exposure to compiler design).

I'll also be learning more about Lisp concurrently.

Sadly, none of this has much bearing to my day job, but when I have an hour or
two it seems like a nice way to spend it. At that pace, I plan to finish
sometime in 2015 . . .

~~~
amackera
PLP is pretty good. We used it in my university course on compiler design, I
quite enjoyed reading it.

------
michael_dorfman
If your friend wants to a) get really strong on algorithms, b) put in some
hours, and c) actually do the exercises, I'd recommend Knuth. It's worth the
effort.

~~~
chollida1
I haven't read Knuth but I recommend [http://www.amazon.com/Algorithm-Design-
Manual-Steve-Skiena/d...](http://www.amazon.com/Algorithm-Design-Manual-Steve-
Skiena/dp/0387948600)

From what I understand Knuth uses MIX assembly language to imlpement his
algorithms. Contrast this to the Skiena book which uses C++. I found this to
make it very practical.

Though to be fair, I don't think it offers near the depth of the Art of
Computer Programming:)

~~~
michael_dorfman
It's actually a common misconception that Knuth uses MIX/MMIX to implement his
algorithms. The vast majority of the algorithms are described in English, and
the MMIX implementation is usually only given when there are relevant
implementation details to be discussed. MMIX is just an idealized machine
language, and it is trivial for a reader to implement the algorithms described
in the programmer's language of choice. (This is assuming that the objective
is to learn CS, not to have a cookbook of ready-to-run algorithms to
pilfer....)

~~~
chollida1
Sorry if this seems dense but I can't reconcile what your saying and I've not
read the book. You say:

> It's actually a common misconception that Knuth uses MIX/MMIX to implement
> his algorithms.

So you state very clearly that he doesn't use MIX to code his algorithms.

But then you say:

> and the MMIX implementation is usually only given when there are relevant
> implementation details to be discussed

So you say that he does actually use the MIX language.

Do you mean that most algorithms aren't presented in source form at all and
only the few that are actually coded are in the MIX language?

~~~
notaddicted
Yes, that is how it is.

For example the first algorithm in the book (found via google):

Algorithm E ( Euclid's algorithm). Given two positive integers m and n, find
their greatest common divisor, that is, the largest positive integer that
evenly divides both m and n.

E1 [Find remainder.] Divide m by n and let r be the remainder. (We will have 0
≤ r < n)

E2 [Is it zero?] If r=0, the algorithm terminates: n is the answer.

E3 [Reduce.] Set m← n, n← r, and go back to step E1.

~~~
chollida1
Thanks for the clarification:)

------
chollida1
It depends on what he wants to learn.

I got more out of How to Design Programs than I did from SCIP. Though to be
fair I read it before SCIP:)

<http://www.htdp.org/>

On the other hand if he wants to learn Lisp then I really enjoyed Lisp in
Small Pieces though its not a quick read. It consumed almost all of 2005 for
me:)

------
wheels
The CLR "Introduction to Algorithms" would be one of the canonical answers.

<http://en.wikipedia.org/wiki/Introduction_to_Algorithms>

It's certainly one worth having and the only book from my computer science
education that I still reference frequently.

In fact, I'm tempted to say that it's the last computer science book that you
_have_ to read. After that you should be able to work directly from research
papers, though a topical book can sometimes be useful in other areas with
fairly wide breadth.

------
softbuilder
He should write a lot of code for fun and try to incorporate what he's learned
so far. I understand he codes at his day job, but that's not a place to take
risks or to code things 5 different ways "just because".

------
rw
"Problems On Algorithms" (Parberry, Gasarch): A slim volume containing ~700
exercises on proving various properties of algorithms. And it teaches you most
of what is needed. Download it from: <http://www.eng.unt.edu/ian/books/free/>

"Elements of the Theory of Computation" (Papadimitriou): Classic text. Sure
you've heard of Turing machines before, but what do you know about mu-
recursive functions? It's very beautiful and if you have a person with whom to
read the book and do the exercises, you will gain immensely.

------
abecedarius
Artificial Intelligence: A Modern Approach <http://aima.cs.berkeley.edu/> \--
has lots of broadly useful material and ought to be accessible to anyone who's
completed SICP. One of the very best technical books I've read.

------
MartinMond
I'm currently working through Practical Foundations of Mathematics:
<http://www.cs.man.ac.uk/~pt/Practical_Foundations/index.html>

The full text is available online, but I recommend you buy a hard copy. Oh and
I can vouch that the back cover blurb is totally true.

------
djcjr
CTM has my vote.

------
uninverted
Go be the smartest person at a Java shop!

------
Notorious_PWN
I like CTM. [http://www.amazon.com/Concepts-Techniques-Models-Computer-
Pr...](http://www.amazon.com/Concepts-Techniques-Models-Computer-
Programming/dp/0262220695/ref=sr_1_1?ie=UTF8&s=books&qid=1242404130&sr=8-1)

