Hacker News new | ask | show | jobs
by zatara 5727 days ago
I understand the common HN view for just jumping in and trying to build stuff. Nevertheless, I wonder when would you consider a good time to attack some more complex stuff (e.g. SICP, PAIP, K&R, etc)?

I guess it is the kind of thing you don't miss, until you go through them and really see what you're missing.

2 comments

They should probably have simple programming experience (say, basic Python) first, otherwise they won't have enough context to know "SICP" from "PAIP". That's just a bunch of acronyms.

SICP - _Structure and Interpretation of Computer Programs_ by Abelson, Sussman, and Sussman (http://mitpress.mit.edu/sicp/). Free online. Probably one of the best computer science books. It doesn't cover web programming, but if you know your programming fundamentals and theory well, you'll be in a good position to pick up whatever else comes along after current web programming techniques become unrecognizable. (The code is in Scheme, a Lisp dialect.) Do the exercises. Seriously - do the exercises. And yes, some of them are difficult.

PAIP - _Paradigms in Artificial Intelligence Programming - Case Studies in Common Lisp_ by Peter Norvig. This could very well have been three or four separate books. It has case studies of historical AI projects, chapters on learning / optimizing / implementing Lisp, chapters on search problems and logic programming, etc. Highly recommended, but I would wait on this one until you're proficient in at least two unrelated languages.

K&R - "Kernighan & Ritchie", aka. _The C Programming Language_. This is the book on learning C. Short, concise, informative. Your programming will benefit considerably by learning C (you'll be able to access low-level OS features, esp. on Unix, and it gives a good mental model for the lower-level stuff going on). If you like C and are comfortable with the exercises in K&R, then get _C Interfaces and Implementations_ by David Hanson - it covers practical library / API design, by way of a guided tour through several of the author's freely available libraries.

Also recommended:

_The Practice of Programming_ by Kernighan and Pike - Concise, practical advice about the programming skillset not specific to any one language: debugging techniques, how to write clean code, testing, rules of thumb for performance tuning, etc.

CTM, _Concepts, Techniques, and Models of Computer Programming_ by Van Roy and Haridi (http://www.info.ucl.ac.be/~pvr/book.html). This book is about the fundamental models different programming languages are based on, and how they complement each other. The writing is lucid and accessible, and covers many things (constraint programming, for example) that similar texts never get to.

When your mental model of how a computer work is such that you know what each of the statements in your current language does, you understand how they fit together and you want to know what could go on under them.