An Introduction to Statistical Learning: with Applications in R (Springer Texts in Statistics)
Gareth James , Daniela Witten , et al.
4.8 on Amazon
72 HN comments
Mastering Regular Expressions
Jeffrey E. F. Friedl
4.6 on Amazon
72 HN comments
Game Programming Patterns
Robert Nystrom
4.8 on Amazon
68 HN comments
Steve Jobs
Walter Isaacson, Dylan Baker, et al.
4.6 on Amazon
67 HN comments
Machine Learning: A Probabilistic Perspective (Adaptive Computation and Machine Learning series)
Kevin P. Murphy
4.3 on Amazon
66 HN comments
The Cuckoo's Egg: Tracking a Spy Through the Maze of Computer Espionage
Cliff Stoll, Will Damron, et al.
4.7 on Amazon
61 HN comments
Programming: Principles and Practice Using C++ (2nd Edition)
Bjarne Stroustrup
4.5 on Amazon
58 HN comments
Ghost in the Wires: My Adventures as the World’s Most Wanted Hacker
Kevin Mitnick, William L. Simon, et al.
4.6 on Amazon
55 HN comments
Modern Operating Systems
Andrew Tanenbaum and Herbert Bos
4.3 on Amazon
54 HN comments
Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software 2nd Edition
Eric Freeman and Elisabeth Robson
4.7 on Amazon
52 HN comments
The Singularity Is Near: When Humans Transcend Biology
Ray Kurzweil, George Wilson, et al.
4.4 on Amazon
51 HN comments
The Everything Store: Jeff Bezos and the Age of Amazon
Brad Stone, Pete Larkin, et al.
4.6 on Amazon
51 HN comments
Compilers: Principles, Techniques, and Tools
Alfred Aho, Monica Lam, et al.
4.1 on Amazon
50 HN comments
Test Driven Development: By Example
Kent Beck
4.4 on Amazon
45 HN comments
Patterns of Enterprise Application Architecture
Martin Fowler
4.5 on Amazon
43 HN comments
HorkHunteronOct 21, 2019
Also a bit far fetched, but I would love to see more people read Compilers: Principles, Techniques, and Tools aka The Dragon Book, is what made me fall in love with compilers
RochusonApr 24, 2021
BjoernonMay 11, 2009
Compilers: Principles, Techniques, and Tools
by Alfred V. Aho (Author), Ravi Sethi (Author), Jeffrey D. Ullman (Author)
http://www.amazon.com/Compilers-Principles-Techniques-Alfred...
de107549onJuly 23, 2016
As a programmer :
1. The C++ Programming Language by Bjarne Stroustrup.
2. Operating System Concepts by Silberschatz
3. Compilers by Aho
As an agile software developer:
1. eXtreme Programming by Kent Beck
2. Pragmatic Programmer by Hunt and Thomas
3. Continuous Delivery by Jez Humble
As an architect:
1. Domain Driven Design by Evans
2. Pattern-Oriented Software Architecture by Buschmann
3. Envisioning Information by Edward Tufte
As a CEO:
1. Good To Great by Collins
2. Lean Startup by Eric Ries
3. Beyond Budgeting by Pfläging
gburtonMar 3, 2019
As was common for 80s software textbooks, this was nicknamed for the distinctive image on the cover.
But (and now your edit clarifies that this indeed was your point), perhaps your point is just how difficult it would be to automatically disambiguate nicknames in diverse communities like StackExchange.
[1] https://en.wikipedia.org/wiki/Compilers:_Principles,_Techniq...
jjiceonSep 11, 2020
[0] https://craftinginterpreters.com/
[1] https://compilerbook.com/
LukeShuonMar 31, 2021
The first edition of
Compilers: Principles, Techniques, and Tools* is from 1986. The first edition of the dragon book wasn't Compilers, it was Principles of Compiler Design (1977). The 2nd edition of Compilers is the 3rd dragon book.jjuhlonAug 8, 2015
- Computer Organization and Design, Fourth Edition: The Hardware/Software Interface
- Advanced Programming in the UNIX Environment
- Effective Modern C++
- SFML Game Development
- Compilers: Principles, Techniques, and Tools
stiffonMay 8, 2013
http://swtch.com/~rsc/regexp/regexp1.html
I recommend implementing this as an exercise, rarely do you see that much classic CS theory put to a practical use in one place.
harrisreynoldsonJuly 7, 2017
The "dragon" books is one of the classics. (Compilers: Principles, Techniques, and Tools) ... linked to in another comment.
groovy2shoesonOct 30, 2013
If you have never built a compiler before, I cannot think of a better place to start.
Afterward, if you're curious about theory and advanced topics, I recommend heading to Compilers: Principles, Techniques, and Tools by Aho, Sethi, and Ullman (which covers a lot of theory associated with front-ends) then proceeding to Modern Compiler Construction in ML by Appel (which covers some more advanced topics and back-end stuff). Then you can continue reading about more specific/advanced topics if you like.
cedex12onFeb 4, 2020
majikaonNov 4, 2013
I also recently found Matt Might's Compilers class [3] via a submission here on HN. It has a lot of language-agnostic resources.
[1]: http://www.reddit.com/r/compilers
[2]: http://www.reddit.com/r/compilers/top/
[3]: http://matt.might.net/teaching/compilers/spring-2013/
randcrawonNov 22, 2016
"Compilers, Principles, Techniques and Tools", by Aho, Ullman, Sethi, Lam
"Artificial Intelligence: A Modern Approach", by Russell, Norvig
"Computer Architecture: A Quantitative Approach", by Patterson, Hennessy
"Computer Networks", by Tannenbaum
"Operating System Concepts", by Silberschatz
tptacekonMar 1, 2011
Code Complete 2nd Ed -- Pragmatic Programmer -- SICP -- K&R -- Refactoring -- CLR -- Design Patterns -- Mythical Mammoth -- TAOCP -- Compilers (Dragon Book) -- Head First Design Patterns -- G.E.B. -- Effective C++ -- Programming Pearls -- Code (Petzold) -- Working Effectively With Legacy Code -- Zen and the Art Of Motorcycle Maintenance -- Peopleware -- Clean Code -- Coders at Work -- Surely You're Joking -- Effective Java -- Patterns of Enterprise Application Architecture -- Little Schemer -- The Inmates Are Running The Asylum -- Why's Ruby -- Practice of an Agile Developer -- The Elements of Style -- The Art of Unix Programming -- Joel on Software -- Modern C++ Design -- The Design of Everyday Things -- Test Driven Development -- How To Win Friends And Influence People -- Agile Software Development -- Domain Driven Design -- The Practice of Programming -- Don't Make Me Think -- Writing Solid Code -- Pragmatic Thinking And Learning -- Software Estimation -- Foundations of Programming -- Algorithms + Data Structures = Programs -- The Passionate Programmer -- Facts And Fallacies of Software Engineering -- Getting Real -- The Story About Ping
Depressing.
yanonJan 14, 2009
* Compilers has the dragon book (Compilers: Principles, Techniques, and Tools)
* Lisp has a few, as far as I know. There's pg's "ANSI Common Lisp" and "Paradigms of Artificial Intelligence Programming" by Norvig which I hear is fantastic from everyone that read it.
lmmonAug 14, 2012
stiffonDec 30, 2012
"What is Mathematics?" by Richard Courant taught me to think at a higher level of abstraction. I read it after I realized the parts of SICP (which recommendation here I obviously second) I liked most were the math-related parts and I think it is fair to call it a SICP for mathematics, at least I don't know a book that comes closer. Then I also used Courant's "Differential and Integral Calculus" and Spivaks "Calculus" with his very detailed answer book, and this way I self-taught myself enough material to finally be able to do some reasonably serious math, e.g. proofs.
After reading "Compilers: Principles, Techniques, and Tools" I wrote my own implementation of grep with state machines, then a compiler for a simple language and finally understood what a programming language really is. "Programming Language Pragmatics" was a very useful book here, too, thanks to it teaching me a range of different possible semantics for common concepts in programming languages I was able to learn new languages much more easily and easily spot bugs that I would otherwise spent hours on.
"The Mindful Way through Depression" and the accompanying CD with guided meditations taught me to meditate and meditation forever changed the way I react do difficult situations.
"Starting Strength" taught me correct exercise technique that completely changed the outcomes of my strength training.
fogusonMar 13, 2008
- Soul of a New Machine
- The Cuckoo's Egg
- Revolution in the Valley
- Fire in the Valley
- Compilers by Sethi, Ullman, Aho
- Masters of Doom
- iWoz
- Steve Jobs & the NeXT Big Thing
- Crypto
- Code
- The Man Who Loved Only Numbers
- The Man Who Knew Infinity
- ANSI Common LISP
Most of the books above are recommended because once reading them you will have an uncontrollable urge to immediately create something brilliant. You will not be able to stop yourself.
-m
csmattryderonJan 6, 2017
Still got my copy from uni, dog-eared and sticky-noted throughout.
kenjacksononAug 16, 2010
The Dragon book is probably the best introductory text. The new version that came out a few years ago actually did improve the original text a fair bit. Although there is a lack of discussion about SSA in the text.
While most compiler books spend most of the text talking about the front-end of the compiler the crazy interesting stuff is in the backend. The new Dragon book greatly improves here over the old one, but I'd also recommend two other texts:
1) Morgan, Building an Optimizing Compiler -- some people love the writing style. Others hate it, but the material is solid.
2) Muchnick, Advanced Compiler Design and Implementation -- Great book. Must read if you're serious about optimizations.
microtheriononFeb 29, 2012
"Compilers: Principles, Techniques, and Tools" by Alfred V. Aho, Ravi Sethi and Jeffrey D. Ullman (a.k.a the "Dragon Book")
"The Art of Computer Programming" by Donald Knuth
"Introduction to Automata Theory, Languages and Computation" by John E. Hopcroft and Jeffrey D. Ullman
An amazing book, despite the fact that the core thesis of the first edition, that we were on the verge of permanent world domination by RISC architectures, turned out to be dead wrong:
"Computer Architecture: A Quantitative Approach" John L. Hennessy and David A. Patterson
Two books by Niklaus Wirth (A bit out of fashion, maybe because they were written in the "wrong" languages, and maybe because they were TOO concise in today's world of shovelware books. Wirth is the Strunk & White of CS writers):
"Algorithms and Data Structures" by Niklaus Wirth
"Compiler Construction" by Niklaus Wirth
This book might be the one that impressed me most in my undergraduate studies, although I can't say I've done much with what I read there:
"Parallel Program Design: A Foundation" by K. Mani Chandy and Jayadev Misra
samuraijackonApr 3, 2018
https://lagunita.stanford.edu/courses/Engineering/Compilers/...
matthias509onJune 21, 2021
kyleconJuly 9, 2008
http://www.reddit.com/info/6mikl/comments/
but it looks like you've beaten me to it!
I did create a listing of the most popular books mentioned on the comment thread, if you're interested. The following were mentioned by 4 or more people:
14 The C Programming Language
11 Structure and Interpretation of Computer Programs
8 Introduction to Algorithms
7 Compilers: Principles, Techniques and Tools
6 Programming Erlang
5 The Mythical Man-Month
5 The Pragmatic Programmer
5 Applied Cryptography
4 Beautiful Code
4 The Little Schemer
4 Programming Perl
more here: http://www.reddit.com/info/6mikl/comments/c04abpy
whimsyonNov 3, 2010
Compilers, Principles, Techniques, and Tools, 2nd ed ("The Dragon Book") by Aho, Lam, Sethi, and Ullman.
American Gods, by Neil Gaiman
Harry Potter and the Methods of Rationality, by Eliezer Yudkowsky
AdieuToLogiconOct 4, 2019
Another exercise, perhaps less demanding in this regard, is to explore using Free Monads[0] to implement an EDSL[1] for a problem domain. Of course, the approachability of this varies based on the person involved.
> For instance, and amusingly enough written in golang, one of the most respected recent books on this topic is `Writing an Interpreter in Go` and its sequel `Writing a Compiler in Go`.
Queue obligatory reference to "the dragon book":
0 - https://softwareengineering.stackexchange.com/questions/2427...
1 - https://www.quora.com/What-is-an-embedded-domain-specific-la...
2 - https://suif.stanford.edu/dragonbook/
kazinatoronOct 15, 2016
From the second: (1) Intro to Algorithms, absolutely cover to cover once, and selected readings additional times; based the Kazlib "dict" module closely on the Red Black tree algorithm (with a slight improvement); (2) Compilers: Principles, Techniques and Tools: Ditto, and in recent years, implemented a regex compiler based on the graph-based descriptions in that book; (3) TAOCP: selected readings only, too huge; (4) Design Patterns: cover to cover, when OOP was fashionable in the 90's; (5) nope, but I read the Stroustrup and Ellis Annotated C++ Reference Manual cover to cover (weekend before starting first C++ gig). That counts as a 1:1 substitute, more or less.
svatonApr 1, 2021
It is for their pioneering research work in algorithms and theory related to compilers (some of which indeed went into some of their books later). Also, even if you consider only books, they wrote nine books, and neither of the two mentioned as most influential is "the dragon book". The first mentioned is the book by Aho, Hopcraft and Ullman: Design and Analysis of Computer Algorithms (1974)
> a classic in the field and was one of the most cited books in computer science research for more than a decade. It became the standard textbook for algorithms courses throughout the world when computer science was still an emerging field.
This predates other major algorithms textbooks like say Kleinberg and Tardos (2005), Skiena (1st ed 1997), CLRS (1st ed 1990), or Sedgewick (1st ed 1983). Easily the standard textbook for more than a decade (and still used in some universities; it's still in print in some countries).
> Principles of Compiler Design (1977)
This is the "green dragon book", not to be confused with Compilers: Principles, Techniques, and Tools (1986, 2nd ed 2006) aka the "red dragon book" and the one people usually mean by "dragon book". This book is not even mentioned in the award citation. (Their automata book was widely used too.)
So the idea that the award was given solely or even primarily for the dragon book seems entirely inaccurate. The Wikipedia pages on Aho and Ullman give some idea of their work: indexed grammars, nested-stack automata, egrep, fgrep / Aho-Corasick algorithm, the algorithms that went into yacc and lex, AWK (Aho), and "one of the founders of the field of database theory" (Ullman).
[Edit: Shortened my very long comment.]
optymizeronMay 22, 2017
Alan Kay having 4-6 hours a day to read books is certainly out of the ordinary and I can't emulate that. That's not "work day" - that seems more like "I don't have to go to work"-day. I suppose we can acknowledge that Alan Kay is making use of his time wisely.
Also, what kind of books are we talking about here? I guarantee you Alan Kay is not reading a technical book like Compilers by Aho in a day. Sure, he might be physically able to read the letters on all the pages in the book, but he's not LEARNING that much information in a day. That book is 2 semesters worth of new information, not to mention that it requires practice to solidify.
Even the author acknowledges this is a case of quantity over quality. How much actual learning is Alan Kay doing? Now that would be a useful point of reference. That would tell me if I have to up my learning game or if I'm doing just fine.
If every week I learn one new technology like RxJava, React Native, P, etc, am I beating Alan Kay at learning, even though I might be reading fewer pages?
weiranonApr 14, 2012
dkerstenonSep 9, 2009
theomegaonJuly 27, 2018
https://en.m.wikipedia.org/wiki/Compilers:_Principles,_Techn...
jgwil2onJune 21, 2020
Computer Architecture: added Computer Systems: A Programmer's Perspective as first recommendation over nand2tetris.
Compilers: Crafting Interpreters added as first recommendation over dragon book.
Distributed Systems: added Designing Data-Intensive Applications as first recommendation over Distributed Systems.
Online availability of some video lectures has changed as well.
muhfuhkuhonAug 16, 2010
klsonDec 31, 2011
sigjuiceonAug 28, 2018
Compilers: Principles, Techniques, and Tools
Simply stated, a compiler is a program that can read a program in one language - the source language - and translate it into an equivalent program in another language - the target language
Engineering a Compiler
Compilers are computer programs that translate a program written in one language into a program written in another language
jeyonAug 22, 2007
Too dense and theoretical, even for someone who enjoys it. Introduction to Algorithms by Cormen, Leiserston, Rivest and Stein is more understandable and practical. It does cover everything useful and is thorough, it just isn't pedantic. [1] http://tinyurl.com/yr257c
> Compilers: Principles, Techniques, and Tools by Aho, Sethi, and Ullman (the dragon book)
Maybe. You might want to try Engineering a Compiler by Cooper and Torczon instead. Again, it's more practical/useful/interesting. But if you're dying to write a parser generator, go ahead and read the Dragon Book. http://tinyurl.com/ys3ql7
> Structure & Interpretation of Computer Programs, by Abelson and Sussman
Available for free: http://mitpress.mit.edu/sicp/full-text/book/book.html
Dunno about the databases book, but the rest are also good.
1. Unless you really, really need those tape sorting algorithms.
wolfgkeonSep 22, 2016
> In other words - how did you get to know them?
My book recommendation: Dick Grune, Ceriel J.H. Jacobs - Parsing Techniques: A Practical Guide (Second Edition). Many people will also recommend the "dragon book" (Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman - Compilers: Principles, Techniques, and Tools (Second edition)), which is not a bad book.
If you want to dive deeply into parsing and want to read about all the details over hundreds of pages, the Grune-Jacobs book is clearly the recommdendation. On the other hand, if you just want to understand the theory behind the parsing stage of a compiler (as one part of a compiler - and there are lots of other parts, too), you will probably prefer the dragon book.
scott_sonOct 2, 2012
T-RonApr 6, 2011
Structure and Interpretation of Computer Programs - Abelson, Sussman, and Sussman
Introduction to Algorithms - Cormen, Leiserson, Rivest, and Stein
The Art of Assembly Language - Hyde
a digital logic book (not sure which is most recommended), and an architecture book (see reply by tftfmacedo)
Modern Operating Systems - Tanenbaum
Introduction to the Theory of Computation - Sipser
Compilers: Principles, Techniques, and Tools - Aho, Lam, Sethi, and Ullman (a.k.a. "Dragon Book")
Programming Language Pragmatics - Scott
A database design book (one that covers Relational Algebra, not just a book on SQL), and maybe a book on Networks. Also, Roy Fielding's paper on REST is both academic and applicable (and more approachable than you'd expect of a Ph.D paper). If you want to go all the way, an undergraduate program usually also has Calculus, Discrete Math, Linear Algebra, and Statistics. Some schools would also require Physics and Differential Equations. I'm sure I'm missing some topics, too, particularly electives.
If you can get through those and the associated problem sets, you'll have a better foundation than most.
tlrobinsononJan 25, 2008
I started watching them, and the professor recommends this book (and the new edition of the Dragon Book):
http://www.amazon.com/Advanced-Compiler-Design-Implementatio...
xpeonFeb 9, 2017
Compilers: Principles, Techniques, and Tools
Engineering a Compiler, Second Edition
Writing Compilers and Interpreters: A Software Engineering Approach
Compiler Construction: Principles and Practice
Compilers: Principles and Practice
Language Implementation Patterns
Crafting a Compiler with C
Compiler Design in C
Principles of Compiler Design
Modern Compiler Implementation in Java
srijanshettyonOct 21, 2019
- Theoretical CS:
- Compilers: Principles, Techniques, and Tools (The
Dragon Book)
- Introduction to the Theory of Computation, Sipser
- Programming:
- Java Concurrency In Practice, Brian Goetz
- Generics in the Java Programming Language, Gilad Bracha
- Professor Frisby's Mostly Adequate Guide to Functional
Programming
- Unix for Poets
- Modern C++
awjonApr 7, 2011
1. Modern Algebra by John R. Durbin
2. Introduction to the Theory of Computation by Michael Sipser
3. Machine Learning - An Algorithmic Perspective by Stephen Marsland (not quite on the same level as the above two, but still pretty solid)
I think Tanenbaum's Operating System and Appel's Compilers books both go in this category too, they're big but not compared to their subject matter. But, I've seen enough people disappointed in both to think this is more my personal opinion at play.
ori_bonJuly 11, 2010
A good description of it is here: http://research.swtch.com/2008/03/using-uninitialized-memory...
dfrankeonAug 22, 2007
The Art of Computer Programming, by Knuth
Compilers: Principles, Techniques, and Tools by Aho, Sethi, and Ullman (the dragon book)
Structure & Interpretation of Computer Programs, by Abelson and Sussman
On Lisp, by Graham
A First Course in Database Systems, by Ullman and Widom
The C Programming Language, by Kernighan and Ritchie
The Cathedral and the Bazaar, by Raymond
lastofusonNov 27, 2015
Things that have helped me the most from my CS degree:
* Learning the internals of operating systems and the UNIX API (Modern Operating Systems (3rd Edition), Advanced Programming in the UNIX Environment, 3rd Edition)
* Network programming (Unix Network Programming, Volume 1 and everything else really by W. Richard Stevens)
* Compilers (Compilers: Principles, Techniques, and Tools is the goto book, but I found it hard to read stand-alone. Might be worth finding a different textbook here)
* Algorithms and data structures (Introduction to Algorithms, 3rd Edition)
* Learning the basics of how CPUs work form a computer engineering book is useful as well, along with assembly language, and how higher level languages like C get translated to ASM and eventually machine code. I can't quite remember what text books I used for this.
Compilers was useful, even though I've never written one professionally, as knowing how to parse anything well save you headaches when someone tells you to parse some HTML for instance. You will also pick up regular expressions and some fun useful data structures.
yummyfajitasonJuly 6, 2010
Witten, Moffat, Bell. Managing gigabytes: compressing and indexing documents and images (How to build a search engine)
Aho A.V., Lam M.S., Sethi R., Ullman J.D. Compilers: Principles, techniques, and tools (Dragon book)
Anyone else have any suggestions?
Energy1onNov 30, 2014
Introduction to the Theory of Computation by Sipser.
Programming Language Pragmatics by Michael L Scott.
Compilers: Principles, Techniques, and Tools by Aho et al.
Concepts, Techniques, and Models of Computer Programming by Van Roy.
Intro to Computing Systems by Yale Patt & Sanjay Patel.
Computer Systems: A Programmer's Perspective by Randal Bryant & David O'Hallaron.