The best programming books, according to hackers
115 programming books were recommended on Hacker News between November 2025 and November 2026. We rank them by how many separate people recommend each one, and 8 earn the Hacker Approved badge.
Top picks
The three most recommended programming books with the badge. Each figure is 5 people. RecommendsCriticizes One comment
Crafting Interpreters by Robert Nystrom
60 recommend, 4 criticize, 94% approval
Ranked 1 of 115 by recommenders
Strong introduction to interpreters and compilers
People recommend it as a clear, practical introduction to interpreters and compilers, building two interpreters. Caveat: it focuses on dynamic runtimes, not compiled ones.
We may earn a commission. It never changes the order.
The Pragmatic Programmer by Hunt and Thomas
28 recommend, 1 criticize, 97% approval
Ranked 3 of 115 by recommenders
Inspires better craft and habits
Recommended as a classic for practical software craft and everyday development habits, though some critics say its principles may be out of date or overkill.
We may earn a commission. It never changes the order.
How to Design Programs by Felleisen, Findler, Flatt and Krishnamurthi
18 recommend, 2 criticize, 90% approval
Ranked 4 of 115 by recommenders
Teaches recursion and functional thinking
Recommended for learning program design, recursion and functional thinking, with praise for its exposition. One critic found its opening cash register example hard to get past.
We may earn a commission. It never changes the order.
We may earn a commission. It never changes the order.
All 115 programming books, ranked
Select a column heading to sort. Approval share is recommenders out of everyone who gave an opinion; the tick on each bar marks the 2 to 1 line the badge needs. Months counts the months, out of 13, in which someone recommended it.
| Rank | |||||||
|---|---|---|---|---|---|---|---|
| 1 | Crafting Interpreters | 60 | 4 | 94% | 10 | — | Approved |
| 2 | Clean Codeby Robert C. Martin | 31 | 87 | 26% | 9 | — | — |
| 3 | The Pragmatic Programmer | 28 | 1 | 97% | 7 | — | Approved |
| 4 | How to Design Programs | 18 | 2 | 90% | 7 | — | Approved |
| 5 | Mastering Emacs | 17 | 1 | 94% | 8 | — | Approved |
| Tied 6 | Working Effectively with Legacy Code | 16 | 1 | 94% | 8 | — | Approved |
| Tied 6 | Open-source Zig book | 16 | 31 | 34% | 1 | — | — |
| 8 | The Linux Programming Interface | 15 | 0 | 100% | 5 | — | Approved |
| 9 | Programming Windows | 14 | 0 | 100% | 7 | — | Approved |
| 10 | Logic for Programmersby Hillel Wayne | 13 | 3 | 81% | 3 | — | — |
| 11 | Usborne 1980s Computer Books | 12 | 2 | 86% | 2 | 26 yrs3 owners | — |
| 12 | The Little Schemer | 10 | 0 | 100% | 6 | — | Approved |
| Tied 13 | Ray Tracing in One Weekendby Peter Shirley and Trevor D. Black and Steve Hollasch | 9 | 0 | 100% | 6 | — | — |
| Tied 13 | BASIC Computer Gamesby David H. Ahl | 9 | 0 | 100% | 5 | 50 yrs3 owners | — |
| Tied 13 | On Lispby Paul Graham | 9 | 1 | 90% | 4 | — | — |
| Tied 13 | Modern C++ Designby Andrei Alexandrescu | 9 | 2 | 82% | 3 | — | — |
| Tied 13 | Competitive Programmer's Handbookby Antti Laaksonen | 9 | 1 | 90% | 1 | — | — |
| Tied 18 | Purely Functional Data Structuresby Chris Okasaki | 8 | 1 | 89% | 5 | — | — |
| Tied 18 | Pro Gitby Scott Chacon and Ben Straub | 8 | 1 | 89% | 5 | — | — |
| Tied 18 | FreeBSD Device Driversby Joseph Kong | 8 | 6 | 57% | 2 | — | — |
| Tied 21 | Practical Common Lispby Peter Seibel | 7 | 0 | 100% | 6 | — | — |
| Tied 21 | Hacker's Delightby Henry S. Warren Jr. | 7 | 0 | 100% | 5 | — | — |
| Tied 21 | Game Programming Patternsby Robert Nystrom | 7 | 0 | 100% | 5 | — | — |
| Tied 21 | Zigbookby zigbook | 7 | 41 | 15% | 2 | — | — |
| Tied 21 | WebAssembly from the Ground Upby Joe Clark and Patrick Dubroy | 7 | 0 | 100% | 2 | — | — |
| Tied 21 | 6502 Assembly Language Programmingby Lance A. Leventhal | 7 | 0 | 100% | 2 | — | — |
| Tied 21 | NSFW Acronyms for Programmersby Ben Ruckman | 7 | 0 | 100% | 1 | — | — |
| Tied 21 | Thinking in Pythonby Bruce Eckel | 7 | 2 | 78% | 1 | — | — |
| Tied 21 | High Performance Gitby Ted Nyman | 7 | 5 | 58% | 1 | — | — |
| Tied 30 | Programming Perlby Larry Wall and Tom Christiansen and Jon Orwant and Christiansen and WALL | 6 | 0 | 100% | 6 | — | — |
| Tied 30 | Land of Lispby Conrad Barski | 6 | 1 | 86% | 5 | — | — |
| Tied 30 | Domain Modeling Made Functionalby Scott Wlaschin | 6 | 0 | 100% | 5 | — | — |
| Tied 30 | The Nature of Codeby Daniel Shiffman | 6 | 0 | 100% | 5 | — | — |
| Tied 30 | Commodore 64 Programmer's Reference Guideby Commodore | 6 | 0 | 100% | 5 | — | — |
| Tied 30 | Inside Macintoshby Apple Computer Inc. | 6 | 0 | 100% | 4 | — | — |
| Tied 30 | Mazes for Programmersby Jamis Buck | 6 | 0 | 100% | 3 | — | — |
| Tied 30 | Graphics Programming Black Bookby Michael Abrash | 6 | 0 | 100% | 3 | — | — |
| Tied 38 | What Every Programmer Should Know About Memoryby Ulrich Drepper | 5 | 0 | 100% | 5 | — | — |
| Tied 38 | Paradigms of Artificial Intelligence Programmingby Peter Norvig | 5 | 1 | 83% | 5 | — | — |
| Tied 38 | Automate the Boring Stuff with Pythonby Al Sweigart | 5 | 1 | 83% | 4 | — | — |
| Tied 38 | Rust Atomics and Locksby Mara Bos | 5 | 0 | 100% | 4 | — | — |
| Tied 38 | Higher-Order Perlby Mark Jason Dominus | 5 | 0 | 100% | 4 | — | — |
| Tied 38 | Practical Object-Oriented Designby Sandi Metz | 5 | 0 | 100% | 4 | — | — |
| Tied 38 | Starting Forthby Leo Brodie and Inc Staff Forth | 5 | 0 | 100% | 4 | — | — |
| Tied 38 | Build a Reasoning Model (From Scratch)by Sebastian Raschka | 5 | 1 | 83% | 4 | — | — |
| Tied 38 | The Ray Tracer Challengeby Jamis Buck | 5 | 0 | 100% | 4 | — | — |
| Tied 38 | Learning Perlby Randal L. Schwartz and Tom Phoenix and brian d foy | 5 | 0 | 100% | 3 | — | — |
| Tied 38 | Programming Erlangby Joe Armstrong | 5 | 0 | 100% | 3 | — | — |
| Tied 38 | Learn Go with Testsby Chris James | 5 | 0 | 100% | 3 | — | — |
| Tied 38 | Database Design for Mere Mortalsby Michael J. Hernandez | 5 | 0 | 100% | 3 | — | — |
| Tied 38 | Linkers and Loadersby John R. Levine | 5 | 0 | 100% | 3 | — | — |
| Tied 38 | Let Over Lambdaby Doug Hoyte | 5 | 0 | 100% | 3 | — | — |
| Tied 38 | Ruby Under a Microscopeby Pat Shaughnessy | 5 | 0 | 100% | 3 | — | — |
| Tied 38 | Effective C++by Scott Meyers | 5 | 1 | 83% | 3 | 14 yrs3 owners | — |
| Tied 38 | Machine Code for Beginnersby Usborne | 5 | 0 | 100% | 2 | — | — |
| Tied 38 | Real World Haskellby Bryan O'Sullivan and John Goerzen and Don Stewart | 5 | 0 | 100% | 2 | — | — |
| Tied 38 | Learning Goby Jon Bodner | 5 | 0 | 100% | 1 | — | — |
| Tied 38 | Apple II Reference Manualby Christopher Espinosa | 5 | 0 | 100% | 1 | — | — |
| Tied 59 | Learn You a Haskell for Great Good!by Miran Lipovača | 4 | 0 | 100% | 4 | — | — |
| Tied 59 | Vibe Codingby Gene Kim and Steve Yegge | 4 | 7 | 36% | 4 | — | — |
| Tied 59 | Data-Oriented Programming in Javaby Yehonathan Sharvit | 4 | 0 | 100% | 4 | — | — |
| Tied 59 | Writing an Interpreter in Goby Thorsten Ball | 4 | 0 | 100% | 3 | — | — |
| Tied 59 | The Art of Unix Programmingby Eric S. Raymond | 4 | 1 | 80% | 3 | — | — |
| Tied 59 | Browser Engineeringby Pavel Panchekha and Chris Harrelson | 4 | 0 | 100% | 3 | — | — |
| Tied 59 | Building a Debuggerby Sy Brand | 4 | 1 | 80% | 3 | — | — |
| Tied 59 | Object-Oriented Programming: An Evolutionary Approachby Brad Cox | 4 | 0 | 100% | 3 | — | — |
| Tied 59 | The Art of Computer Programming Volume 1by Donald Knuth | 4 | 0 | 100% | 3 | — | — |
| Tied 59 | A Tour of C++by Bjarne Stroustrup | 4 | 0 | 100% | 2 | — | — |
| Tied 59 | The Power of Prologby Markus Triska | 4 | 0 | 100% | 2 | — | — |
| Tied 59 | Programming the 6502by Rodnay Zaks | 4 | 0 | 100% | 1 | — | — |
| Tied 71 | LazyVim for Ambitious Developersby Justin Schroeder | 3 | 0 | 100% | 5 | — | — |
| Tied 71 | JavaScript: The Good Partsby Douglas Crockford | 3 | 0 | 100% | 3 | — | — |
| Tied 71 | Advanced Programming in the UNIX Environmentby W. Richard Stevens and Stephen A. Rago | 3 | 1 | 75% | 3 | — | — |
| Tied 71 | Seven Languages in Seven Weeksby Bruce Tate | 3 | 0 | 100% | 3 | — | — |
| Tied 71 | The Practice of Programmingby Brian W. Kernighan | 3 | 0 | 100% | 3 | — | — |
| Tied 71 | 99 Bottles of OOPby Sandi Metz and Katrina Owen and T. J. Stankus | 3 | 0 | 100% | 3 | — | — |
| Tied 71 | The Unix Programming Environmentby Brian W. Kernighan | 3 | 0 | 100% | 3 | — | — |
| Tied 71 | Practical TLA+by Hillel Wayne | 3 | 0 | 100% | 3 | — | — |
| Tied 71 | Building High Integrity Applications with SPARKby John W. McCormick and Peter C. Chapin | 3 | 0 | 100% | 3 | — | — |
| Tied 71 | The Little Proverby Daniel P. Friedman and Carl Eastlund | 3 | 0 | 100% | 3 | — | — |
| Tied 71 | Learn You Some Erlangby Fred Hebert | 3 | 0 | 100% | 3 | — | — |
| Tied 71 | Undocumented DOSby Andrew Schulman | 3 | 0 | 100% | 3 | — | — |
| Tied 71 | The Rust Programming Languageby Steve Klabnik and Carol Nichols | 3 | 1 | 75% | 2 | — | — |
| Tied 71 | Perl Best Practicesby Damian Conway | 3 | 0 | 100% | 2 | — | — |
| Tied 71 | The Rust Performance Bookby Nicholas Cameron et al. | 3 | 0 | 100% | 2 | — | — |
| Tied 71 | Writing a Compiler in Goby Thorsten Ball | 3 | 0 | 100% | 2 | — | — |
| Tied 71 | Effective Modern C++by Scott Meyers | 3 | 1 | 75% | 2 | — | — |
| Tied 71 | Ruby is for Funby the commenter | 3 | 0 | 100% | 2 | — | — |
| Tied 71 | Programming Pearlsby Jon Bentley | 3 | 0 | 100% | 2 | — | — |
| Tied 71 | The Programmer's Brainby Felienne Hermans | 3 | 0 | 100% | 2 | — | — |
| Tied 71 | Test Driven Developmentby Kent Beck | 3 | 1 | 75% | 2 | — | — |
| Tied 71 | Elements of Clojureby Zachary Tellman | 3 | 0 | 100% | 2 | — | — |
| Tied 71 | Eloquent JavaScriptby Marijn Haverbeke | 3 | 0 | 100% | 1 | — | — |
| Tied 71 | Efficient C++ Programming for Modern C++ CPUs | 3 | 0 | 100% | 1 | — | — |
| Tied 71 | The Concise TypeScript Bookby Stefan Baumgartner | 3 | 2 | 60% | 1 | — | — |
| Tied 71 | Anatomy of Lispby Allen, John | 3 | 1 | 75% | 1 | — | — |
| Tied 71 | Algorithms and Data Structures in TypeScript | 3 | 4 | 43% | 1 | — | — |
| Tied 71 | The Little Book of C | 3 | 2 | 60% | 1 | — | — |
| Tied 71 | Programming Collective Intelligenceby Toby Segaran | 3 | 0 | 100% | 1 | — | — |
| Tied 100 | C Interfaces and Implementationsby David R. Hanson | 2 | 0 | 100% | 4 | — | — |
| Tied 100 | Common Lisp Cookbook | 2 | 0 | 100% | 3 | — | — |
| Tied 100 | Data-Oriented Designby Mr Richard Fabian | 2 | 0 | 100% | 3 | — | — |
| Tied 100 | Multiplayer Game Programming: Architecting Networked Gamesby Josh Glazer and Sanjay Madhav | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | Too Many Listsby Alexis Beingessner | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | Programming Perlby Masha Hamilton | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | Java Concurrency in Practiceby Goetz et al. | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | The C Programming Language, 2nd editionby Kernighan and Ritchie | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | Expert C Programming: Deep C Secretsby Peter van der Linden | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | Commodore 64 User's Guideby Commodore | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | UNIX Network Programmingby W. Richard Stevens and Bill Fenner and Andrew M. Rudoff and Richard W. Stevens | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | Programming PHPby Rasmus Lerdorf and Kevin Tatroe and Peter MacIntyre | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | The Elements of Programming Styleby Brian W. Kernighan and P. J. Plauger | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | Threaded Interpretive Languagesby R. G. Loeliger | 2 | 0 | 100% | 2 | — | — |
| Tied 100 | Essential COMby Don Box | 2 | 1 | 67% | 2 | — | — |
| Tied 100 | Growing Object-Oriented Software, Guidedby Steve Freeman | 2 | 0 | 100% | 2 | — | — |
How we rank
Rank is the number of separate people who recommend a product in a Hacker News comment over the past year. Someone who praises the same programming book in five threads counts once.
The badge goes to programming books that at least 10 people recommend, with recommenders outnumbering critics at least 2 to 1, recommended in at least 4 of the 13 months.
Rankings are never for sale. We may earn a commission when you buy through our links. It never changes the order.