General programming: Structure and Interpretation of Computer Programs. Focuses on the essence of the subject with such clarity that a novice can understand the first chapter, yet an expert will have learned something by the last chapter.
Specific programming languages: The C Programming Language, The C++ Programming Language, CLR via C#. Informative to a degree that rarely coexists with such clarity and readability.
AI: Artificial Intelligence: a Modern Approach. Perhaps the rarest virtue of this work is that not only does it give about as comprehensive a survey of the field as will fit in a single book, but casts a cool eye on the limitations as well as strengths of each technique discussed.
Compiler design: Compilers: Principles, Techniques and Tools. The standard textbook for good reason.
I don’t agree on the dragon book (Compilers: Principles, Techniques and Tools). It focuses too much on theory of parsing for front end stuff, and doesn’t really have enough space to give a good treatment on the back end. It’s a book I’d recommend if you were writing another compiler-compiler like yacc.
I’d rather suggest Modern Compiler Implementation in ML; even though there are C and Java versions too, a functional language with pattern matching makes writing a compiler a much more pleasant experience.
Thanks for your recommendations! Your comment made me realize I was not specific enough in my list of rules, so I modified the third rule to the following:
“You must briefly name the other books you’ve read on the subject and explain why you think your chosen textbook is superior to them.”
Would you please do us the favor of naming the other books you’ve read on these subjects, and why your recommendations are superior to them? That would be much appreciated.
A problem is that in many cases it was long enough ago (e.g. I got into C programming in the 1980s, C++ around 1990) that I don’t remember the names of the other books I read. The ones that stuck in my mind were the memorably good ones. (Memorably bad things can do likewise of course, but few textbooks fall into that category—the point of this post after all is that textbooks tend to have higher standards than most media.)
General programming: Structure and Interpretation of Computer Programs. Focuses on the essence of the subject with such clarity that a novice can understand the first chapter, yet an expert will have learned something by the last chapter.
Specific programming languages: The C Programming Language, The C++ Programming Language, CLR via C#. Informative to a degree that rarely coexists with such clarity and readability.
AI: Artificial Intelligence: a Modern Approach. Perhaps the rarest virtue of this work is that not only does it give about as comprehensive a survey of the field as will fit in a single book, but casts a cool eye on the limitations as well as strengths of each technique discussed.
Compiler design: Compilers: Principles, Techniques and Tools. The standard textbook for good reason.
I don’t agree on the dragon book (Compilers: Principles, Techniques and Tools). It focuses too much on theory of parsing for front end stuff, and doesn’t really have enough space to give a good treatment on the back end. It’s a book I’d recommend if you were writing another compiler-compiler like yacc.
I’d rather suggest Modern Compiler Implementation in ML; even though there are C and Java versions too, a functional language with pattern matching makes writing a compiler a much more pleasant experience.
(I work on a commercial compiler for a living.)
+1 for ML (and purely functional languages) used for implementing compilers.
Is “The C Programming Language” Kernighan & Ritchie? (titles are often very generic so it’s nice to see authors as well.)
Yes.
rwallace,
Thanks for your recommendations! Your comment made me realize I was not specific enough in my list of rules, so I modified the third rule to the following:
“You must briefly name the other books you’ve read on the subject and explain why you think your chosen textbook is superior to them.”
Would you please do us the favor of naming the other books you’ve read on these subjects, and why your recommendations are superior to them? That would be much appreciated.
A problem is that in many cases it was long enough ago (e.g. I got into C programming in the 1980s, C++ around 1990) that I don’t remember the names of the other books I read. The ones that stuck in my mind were the memorably good ones. (Memorably bad things can do likewise of course, but few textbooks fall into that category—the point of this post after all is that textbooks tend to have higher standards than most media.)
Disagree with “C++ the programming language” as a C++ textbook. Anything by Lippman, Koenig or Moo would be better.