Ask HN: After SICP, what next?
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.
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).
(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!
Thanks in advance.
36 comments
[ 20.0 ms ] story [ 1707 ms ] threadIf 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...
and
http://research.microsoft.com/en-us/um/people/simonpj/papers...
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.
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.
[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.]
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:)
I personally enjoy thinking about the implementations, instead of looking at the code itself. Knuth makes that easy (hard?) by not spoon feeding you.
Plus the typography of Knuth's books is so wonderful. It's a pleasure to read.
> 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?
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.
http://www.gnu.org/software/mdk/
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:)
- Algorithms, a functonal approach
- Real World Haskell
- Paradigms of artificial intelligence programming
Any of these are excellent post-sicp reads.
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 . . .
Can't recommend it enough.
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.
http://see.stanford.edu/see/courseinfo.aspx?coll=2db7ced4-39...
http://see.stanford.edu/see/courseinfo.aspx?coll=523bbab2-dc...
And video lectures by the author of the NLP book (Christopher D. Manning):
http://see.stanford.edu/see/courseinfo.aspx?coll=63480b48-88...
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!
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.
"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.
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.