Back to the bookshelf

Typographic jacket · original cover not fetched

A BOOK SERIES · 2006–2026 SAMPLE

The Art of Computer Programming

Donald E. Knuth

44 readers recommend it across 31 discussions

Topics are model-inferred labels.

Keep it on your reading list

THE WORD OF MOUTH

What made it worth passing on?

Original Hacker News comments, in the readers’ own words.

jll29
Torn between It's a poem published in 1979 by the son of a physics Nobel prize winner, and it's about consciousness and artificial intelligence, and how they relate to mathematical proofs, music compositions (especially Baroque organ music) and visual art. It is full of self-references. It's a twelve-episode science mystery called "TAOCP"... eagerly awaiting episode 4c! It's full of passion, hard facts, proofs, code fragments, even music scores and of course jokes.

Also recommended in this reply

brudgers
Having been a reader approxumately all my life, approximately all the books have been worth my time. Though the best book is far and away Three Little Pigs which my now grown-ass-man child called “the wolf book” when requesting it at bedtime at the age of incredible. I highly recommend it — time spent with your child I mean, But if you want an HNish book recommendation?…The Art of Computer Programming is well worth trying to read because it will be challenging for as long as you keep at it. Good luck.
philomath_mn
Going to stick my neck out here: I read a lot of technical books, have a masters in math and 10+ years professional experience but man that book was too much of a slog for me (only made it a few chapters). It sure _seems_ like a no-brainer to read such a classic, but I wonder how many copies languish on the shelf without ever getting finished (same goes for The Art of Computer Programming). Don't let this discourage you from giving it a shot, but also don't be discouraged if you aren't able to finish it. Just keep reading and challenging yourself as best you can -- a few years of that and you'll be miles ahead of 99% of devs out there.
cbm-vic-20
Likewise, TAoCP (er, Knuth's "The Art of Computer Programming") is even _older_ than SICP, and will definitely not help with writing better professional Python programs, but is steeped in first-principles goodness. Even so, I end up turning to it every once in a while; once while figuring out some tricky allocation code, and another to see if I could find a way to skip a few steps in a piece of code that needed to run in a tight loop. It's certainly not required reading to be a successful programmer in the 21st century, but like SICP, it offers a different way of looking at things that may help influence some of your decisions on how to build something.
throwaway81523
If a textbook is eye-opening, that's partly due to the textbook but it's also because you were at a moment in your understanding of that subject, that your eyes were ready to be opened and just needed a trigger. For me, TAOCP in high school was a big one. I don't claim to have understood very much of it, but spending evenings in the library bashing through the parts I could make sense of gave a total change in perspective.
f1shy
Computer science: Knuth's TAOCP. And Sipser's Introduction to the Theory of Computation. Programming: SICP, K&R, and Stroustrup. Siebel's Practical common lisp. Artificial intelligence: AI a modern approach. Signals and Systems: Oppenheim's book Probability and statistics: Probability Theory: The Logic of Science by Jaynes
Parker_Powell
No matter how long you've been a programmer, you're always looking for new ways to hone your craft and learn new techniques. One of the best ways to do that is by reading books on programming—as in, books that are actually about programming. Here's our list of 10 of the best. 1. Code: The Hidden Language of Computer Hardware and Software 2. Clean Code: A Handbook of Agile Software Craftsmanship 3. Refactoring: Improving the Design of Existing Code 4. The Pragmatic Programmer: From Journeyman to Master 5. Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability 6. The Mythical Man-Month: Essays on Software Engineering 7. Structure and Interpretation of Computer Programs 8. Introduction to Algorithms (The MIT Press) 9. Programming Pearls (2nd Edition) 10. The Art of Computer Programming
EzJBg4GS
I'm starting to learn CS all over again at the old age of 40, and had the pleasure to rediscover mathematics thanks to: - Discrete Mathematics with Applications, by Susanna Epp, or - Discrete Mathematics and Its Applications, by Kenneth Rosen (both have the same content, choose the style that you prefer), and - Concrete Mathematics, by our lord and savior Donald Knuth. I don't plan on reading TAOCP anymore as I would be dead by the time I finish reading everything else, but those introductory books are very good for beginners.
Jtsummers
> I haven't read any of Knuth's stuff because doesn't having 7 volumes kinda imply it can't possibly be well edited? That's a very bad assumption in this case. The contents of TAOCP are very well edited, just massive in scope and it's one man putting it all together. However, those aren't his only books. Concrete Mathematics is a completed text that expands on, in particular, the math in Chapter 1 of TAOCP. Literate Programming is a collection of papers on topics in programming, and is the first of eight such books. If you want interesting but mildly impractical, check out his Computers & Typesetting [0] which includes two books which are actually literate programs. [0] https://www-cs-faculty.stanford.edu/~knuth/abcde.html

Also recommended in this reply

dragontamer
Well, Volume 4 was released in 2016 and is not out of date at all. Its a very good read, but on an obscure subject. But Volume 1 has lots of out-of-date advice and is somewhat of a shame, because its otherwise an excellent introduction to computing + the mathematics needed to understand computing. For example, the assembly language is based on the 1960s computers, such as decimal computing and 6-bit numbers (based on the days of old, before 8-bits were standardized). Functions are introduced by self-modifying code first and foremost: by rewriting "jump" instructions at the end of functions as a return. No one does this anymore: pretty much all compilers do the stack-thing instead. (Push return address onto a stack register). The Fascicle on MMIX updates a lot of those sections to a modern-like 64-bit assembly language. However, the sections on cofunctions, arrays, garbage collection aren't part of that update... and should be updated (Knuth's discussion on these concepts is great, but are told in an "old way" based on 1960s tech)…
dragontamer
Art of Computer programming starts at a high school level. It's very rigorous and considered one of the more difficult reads. But if you start at chapter 1 page 1, it covers all the math you'll ever need for the rest of the books (which is sufficient maths to reach masters or even PH.d level comp sci) I know I've recommended it to high schoolers. A lot of math is just getting used to the nomenclature and vocabulary. The sooner you get used to rigor the better
jll29
TAOCP is too detailed and too deep as a beginner's book; you first want something lighter that you can worth through end-to-end before taking on a 7-volume book that is still not even finished (volume 4b of 7 in progress at the time of writing). Note I am _not_ saying TAOCP isn't readable, I consider it very well written. But it's terse, hard, too deep and too detailed for a beginner, IMHO.
physicsyogi
I agree with a lot of this. The one thing that I've found with some of these "fundamental" books is that there are gems of information that can be very helpful for specific problems. For instance, Landau and Lifshitz's statistical mechanics book has first-rate description of entropy and multiplicity. And TAOCP has an incredibly thorough discussion of combinatorics that I found invaluable.
mschaef
That's pretty much what my copy does. I'm grateful the profession has TAOCP as a resource, but the reality for the majority of workaday engineers is that most of the sort of art described in that series is abstracted out into libraries. As fun or challenging as it might be to thinking about developing your own implementation of a fundamental algorithm or data structure, you're probably far better off reusing whatever you have available to you already in your environment. This has the tendency of pushing the work to the boundaries, where engineering is more about connecting existing pieces than anything else. (Which isn't a problem... I'd hate to live in a world where every home that's built requires the builder to cut down trees and process their own lumber, etc.) I do least take solace in the fact that the contents of TAOCP are a lot less likely to get stale than the majority of tech books.
commandlinefan
> Has anyone really read these books from page to page? I recently finished reading the first three, and have started on the fourth (with a detour to read "fascicle 1.1 on MMIX"). I started the series planning to work every single problem. That turned out to be just a little unrealistically ambitious - I settled for _attempting_ every single problem except for the "unsolved research problems" (in some cases, just figuring out what the problem was asking for left me with a sense of accomplishment). Even so, I ended up spending a year on each volume, reading/working problems for a half hour a day or so. On the one hand, I loved these books, and really enjoyed reading/working through them, but - recommended before beginning one's software development career? You'll need to know a fair amount of calculus to make sense of a lot of it, and it'll take quite a while to get through. It's questionable how relevant it really is, fascinating as the subject matter is.
CodeArtisan
- Structure and interpretation of computer programs More by nostalgia than by need - The art of computer programmming - Hacker's delight These two are of great help when doing programming challenges. Hacker's delight is about bitwise tricks. - Open Data Structures Useful for a quick refresh on data structures.
garethsprice
The Art of Computer Programming by Donald Knuth is probably the closest to an actual bible for computer scientists - hardly anybody's read it all the way through, people quote bits of it out of context for their own ends and it mostly sits on shelves looking impressive while gathering dust. The Mythical Man-Month by Fred Brooks for tech management. Confessions of an Advertising Man by David Ogilvy for advertising/marketing industry. Design Patterns: Elements of Reusable Object-Oriented Software by the "Gang of Four" for OOP software engineering.
brudgers
As a reader of books, one of the good things about growing older is that the books the younger version of myself read are books that this older version of myself hasn't and there is great pleasure in rereading the books the younger version of myself read as the older person I am. And that makes this exercise impossible for me. The books I would tell the younger version of myself to read wouldn't resonate the same way (or not at all) with that other person I used to be. Picking books that might have appealed to the younger version of myself accurately would mean picking the books I actually read -- e.g. The Fifth Discipline -- and not books that the younger version of myself tried to read but couldn't but that I read and recommend today: e.g. TAoCP. Part of the complexity is that the world in which I read books today is radically different from that of my younger self. Today I can get a MIX interpreter from the internet [1]...there's even help on StackOverflow. My younger self couldn't because even in the time when there was an internet bandwidth was low and Google didn't exist.…

Also recommended in this reply

Ping_2_Ur_Pong
Below list are some of my favorite books overall that I didn't see mentioned. ---Non-software related How to win friends and influence people -Dale Carnegie (The definitive guide to helping you work better with people, truly great book, should be required reading) Blink- Malcolm Gladwell Godel Escher, Bach - (Recursion, but not from a software perspective. Its a glorious book that will change the way you think about recursion.) Hitch Hiker's guide to the galaxy, - Douglas Adams (Glorious book that is a fun read, when you need a break pick this up and laugh hard) Foundation Series - Assimov (Great stories from one of the best sci-fi writers ever) -------------------Software related Code Complete Concrete Mathematics The Art of Computer Programming The Design of the Unix Operating System Introduction to Algorithms -Cormen Design Patterns Elements of Resusable OO Design -Gang of Four
dwarman
Knuth's "The Art of Computer Programming" - linked lists, state machines. Carlos Castenada's Don Juan series (yes, I know it was fiction) - "one has no choice but to believe. What matters is what you believe". John C. Lilly's "Center of the Cyclone". These three, all around early-mid 70's, ended up moving me from the UK to Los Angeles. Strangely, each adds a different understanding to the others. Together, I guess it just makes me a bit strange. But it works.

Also recommended in this reply

gharbad
Knuth's Art of Computer Programming Aside from that, there are typically only 1-2 extremely well regarded books in any given area. If you're going to be doing something specific, grab the appropriate book. eg: Compilers - Dragon Book AI - Russel/Norvig's Artificial Intelligence: A Modern Approach Oh.. everyone needs a whiteboard, as well - they're quite useful
rick_2047
If you want to read some eye opening fiction then I would recommend cory doctorows three books, Little Brother, Makers and For The Win. I know it is stacked in the young adult fiction section but it still is good read for anybody. <something irrelevant> I am shocked that in 26 comments till now nobody has mentioned Godel Escher Bach by Douglas Hofstater. Apart from everything else it has accomplished it is always the best seller in the "Nobody reads but everybody recommends" category, or at least the close second or draw to Art Of Programming by Knuth. </something irrelevant>