Introduction to Algorithms (Cormen, Rivest) is good enough that I read it completely in college. The exercises are nice (they’re reasonably challenging and build up to useful little results I’ve recalled over my programming career). I think it’s fine for self-study; I prefer it to the undergrad intro level or language-specific books. Obviously the interesting part about an algorithm is not the Java/Python/whatever language rendering of it. I also prefer it to Knuth’s tomes (which I gave up on finishing—not enough fun). Knuth invents problems so he can solve them. He explains too much minutia. But his exercises are varied and difficult. If you like very hard puzzles, it’s a good place to look.
Introduction to Automata Theory, Languages, and Computation (Hopcroft+Ullman) was also good enough for me to read. I’ve referred to it many times since. However, it’s apparently not well-liked by others; maybe because it’s too dense for them? I haven’t read any other textbooks in the area.
The Feynman Lectures on Physics are also fun to read. But I doubt someone could use them as an intro course on their own. Because they’re filled with entertaining tidbits, I was tempted to read through them without actually following the math 100%. Obviously this somewhat defeats the purpose. That’s always a danger with well written technical material consumed for pleasure. I had already taken a few physics courses before I read Feynman; his lectures were better than the course textbooks (which I already forgot).
I didn’t care for Jaynes. I only read about 700 pages, though. I remember there was some group reading effort that stopped showing up on the site after just a few chapters :)
For plain old programming, I’ve read quite a few books, and really liked The Practice of Programming—it was too short. I read Dijkstra’s a discipline of programming and loved it for its idea to define program semantics precisely and to prove your code correct (nobody really practices this; it’s too slow and hard compared to “debugging”), but it’s probably not worth the price—I used a library.
I also agree with rwallace’s recommendations also, except that the AI text is not especially useful (not that I know of a better one). I would not give SICP to a novice, though. Although I had done everything described in the book before (and already knew lisp), it did increase my appreciation of using closures and higher order functions as an alternative for the usual imperative/OO stuff. It also covers interpretation and compilation quite well (skipping the character-sequence parsing part—this is lisp, after all).
Subjects: algorithms, computation, physics, Bayesian probability, programming
Introduction to Algorithms (Cormen, Rivest) is good enough that I read it completely in college. The exercises are nice (they’re reasonably challenging and build up to useful little results I’ve recalled over my programming career). I think it’s fine for self-study; I prefer it to the undergrad intro level or language-specific books. Obviously the interesting part about an algorithm is not the Java/Python/whatever language rendering of it. I also prefer it to Knuth’s tomes (which I gave up on finishing—not enough fun). Knuth invents problems so he can solve them. He explains too much minutia. But his exercises are varied and difficult. If you like very hard puzzles, it’s a good place to look.
Introduction to Automata Theory, Languages, and Computation (Hopcroft+Ullman) was also good enough for me to read. I’ve referred to it many times since. However, it’s apparently not well-liked by others; maybe because it’s too dense for them? I haven’t read any other textbooks in the area.
The Feynman Lectures on Physics are also fun to read. But I doubt someone could use them as an intro course on their own. Because they’re filled with entertaining tidbits, I was tempted to read through them without actually following the math 100%. Obviously this somewhat defeats the purpose. That’s always a danger with well written technical material consumed for pleasure. I had already taken a few physics courses before I read Feynman; his lectures were better than the course textbooks (which I already forgot).
I didn’t care for Jaynes. I only read about 700 pages, though. I remember there was some group reading effort that stopped showing up on the site after just a few chapters :)
For plain old programming, I’ve read quite a few books, and really liked The Practice of Programming—it was too short. I read Dijkstra’s a discipline of programming and loved it for its idea to define program semantics precisely and to prove your code correct (nobody really practices this; it’s too slow and hard compared to “debugging”), but it’s probably not worth the price—I used a library.
I also agree with rwallace’s recommendations also, except that the AI text is not especially useful (not that I know of a better one). I would not give SICP to a novice, though. Although I had done everything described in the book before (and already knew lisp), it did increase my appreciation of using closures and higher order functions as an alternative for the usual imperative/OO stuff. It also covers interpretation and compilation quite well (skipping the character-sequence parsing part—this is lisp, after all).