Ask HN: Is Knuth's TAOCP worth the time and effort?

205 points by QuadrupleA ↗ HN
I recently purchased a boxed set of Donald Knuth's The Art of Computer Programming on Amazon ( http://www.amazon.com/gp/product/0321751043 ) based on its stellar reputation as one of the indispensible, foundational computer science books that every programmer should read.

I excitedly started delving into it last night but after an hour or two of reading and exercises I started getting the sinking feeling that I'd just wasted $178.08. It seems quite mired in 1960's-era academic minutiae and tedious mathematical formalism that doesn't seem very relevant to a modern practicing programmer.

For all its focus on algorithmic performance I found no mention of pipeline stalls, designing for cache performance, branch prediction, multithreading, etc. which are all very fundamental aspects of good performance on modern hardware.

So for those who are practical programmers and have gone down the Knuth TAOCP rabbit hole I ask - was it worth it? Did it give you knowledge and skills applicable to your programming work or was it mostly academic / intellectual entertainment?

140 comments

[ 3.1 ms ] story [ 164 ms ] thread
It is more a reference work than anything else.

> For all its focus on algorithmic performance I found no mention of pipeline stalls, designing for cache performance, branch prediction, multithreading, etc. which are all very fundamental aspects of good performance on modern hardware

Yes, but pure computer science is not worried about that (maybe about multithreading)

But yeah, for a more practical/specific work there are better options (but it's going to be specific to an area)

Indeed, it's a reference work. I've read through the first volume cover to cover, but that's probably not the best way to use TAOCP. When you're interested in a particular algorithm or topic, go find it and read that section.

If you're interested in modern architecture details, I'd recommend Agner Fog's marvelous reference books (http://www.agner.org/optimize/).

> Yes, but pure computer science is not worried about that

He writes in that made up assembly language specifically to consider efficiency and implementation concerns:

"Expressing basic methods like algorithms for sorting and searching in machine language makes it possible to carry out meaningful studies of the effects of cache and RAM size and other hardware characteristics (memory speed, pipelining, multiple issue, lookaside buffers, the size of cache blocks, etc.) when comparing different schemes."

Whether he achieves that is another matter.

TAOCP is not to learn programming or to cover everything modern. It is for the intellectual exercise, for widening the mind. And that is where its beauty lies.
It's a good reference, but I could never read it straight thru. I tried and failed a few times.

There is a note from Bill Gates in the back that says if you can read it all and understand it, contact him for a job.

Edit: read the comment by @geff82 in this thread. This is perfect.

The term programming here is used with the same semantic definition as "dynamic programming" or "linear programming". Don't expect the book to touch on how to code fast algorithms, rather expect Knuth to teach you the inner workings of the algorithms regardless of their implementations.

Computer science and software development are usually thought to be the same by non computer scientists, but in reality computer science is basically applied mathematics. Expect a lot of it.

Umm, no. "Programming" in "TAOCP" actually refers to "making step by step recipes for a computer" to execute (and is prefixed by the word "Computer" to make this clear). In "linear programming" it refers to something completely different, namely the planning of the use of resources or optimization. "Dynamic programming" is yet something else: a narrow cluster of techniques having to do with memoization in order to help an algorithm identify overlapping subproblems and avoid re-computing them.
Umm, no. You got half the concept right. Programming, especially in the 70s refers to a set of instructions to be followed in order to achieve a specific task.

When you prefix it with "computer" you're specifying the domain, namely all instructions that will allow a computer to do something. Like you correctly mentioned, when prefixed with "dynamic" you're specifying the set of instructions that have a common approach (to break problems into subproblems, etc etc). Similarly, when saying "linear" before "programming" you're specifying that the instructions involving this set use linear variable constrains.

"The term "linear programming" for certain optimization cases was due to George B. Dantzig, although much of the theory had been introduced by Leonid Kantorovich in 1939. (Programming in this context does not refer to computer programming, but from the use of program by the United States military to refer to proposed training and logistics schedules, which were the problems Dantzig studied at that time.)"

Source: https://en.wikipedia.org/wiki/Mathematical_optimization#Hist...

Ha.

My first thought was, there sure are different definitions of what "dynamic programming" is, as I've only seen it as related to the Bellman equation (motivation for the name being that it would sound appealing to Bellman's superiors at RAND who had a distaste for mathematical theory).

But then, solving the damn thing is all about identifying and avoiding re-computing overlapping sub-problems, so I guess that is exactly what you meant (even though I have no idea what "memoization" is) :)

> based on its stellar reputation as one of the indispensible, foundational computer science books that every programmer should read.

A while back, I was joking with some friends that TAoCP is to the programming world what Finnegans Wake is to English literature: you're not supposed to read it, nobody's ever actually read it. We all just say we've read it, talk about how brilliant it is, and place it prominently on our office bookshelves to silently humblebrag to anyone who drops by. Sorry you had to spend $178.08 on that lesson, mate.

And this shows a huge folly in our industry.

Short answer, is the book easy? Of course not. Is it dated in approach? Yes. Sorta. What would make it better? A modern language? Why?

Consider, just yesterday there was someone designing an elevator system using python. That is literally one of the first examples in TAoCP.

Not long ago, there was an article about how linear search with sentinel values is actually faster than binary search for many data sets. This is, again, one of the first treatments of searches in this text.

I'm waiting for someone to rediscover that you can make a tree for depth first traversal, such that you do not need to use a stack. Again, one of the early topics in these books. Curious about different characteristics of Tries/Trees/Lists/Hashes?...

Is it worth the time to read end to end? Almost certainly not. The math heavy sections are definitely going to scare off a lot of people. Myself included. This mainly means to skim the exercises.

But, there is a lot to offer in the industry of programming. Knuth picked an order to offer this information and is going in that order. The latest topics he is just now getting to are hugely relevant in many endeavors and I recommend people at least be aware of them.

> But, there is a lot to offer in the industry of programming. Knuth picked an order to offer this information and is going in that order.

Perhaps it's sacrilege, but I've always considered it kind of weird to take on a project like TAOCP in a field that's growing far faster than it can be documented by one person.

The fundamentals of computation remain the same.
Certainly, I realize he's not writing about the cool new library for Python or something, but even just looking at actual computer science stuff, the field is expanding rapidly.
> "but even just looking at actual computer science stuff, the field is expanding rapidly."

Is it though?

Hash tables - 1953, Red-Black trees 1972, Quicksort 1959, etc...

Look at Knuth's future book plans, and consider all the things he's not putting in them that are current. He's also revisited the books some, and plans to do so again in the future.

I don't mean to take away from the books - they're beautiful and full of a lot of timeless knowledge. There's just something that seems a bit ... I can't even find a word for it ... about the endeavor.

It would really help if you could list some specific ways that the theory of computation has changed since the writing of TAOCP, and some evidence for why you think that theoretical CS is changing faster than can be documented.
TAOCP has not been written, several volumes of it have. It remains to be seen whether Knuth will even be able to finish what he set out to do, let alone include new things.

> faster than can be documented.

By one person, I wrote.

Here's one that I think is interesting, difficult and evolving: distributed systems. This shows interesting work happening with version vectors, for instance, over the past 15 years: https://en.wikipedia.org/wiki/Version_vector

No need to worry about that one. Looking at Wikipedia's list of volume's, looks like distributed systems are not being covered. But I agree with you anyway. Let's quote the man himself (taken from his website): "As I continue to write Volumes 4 and 5, I'll need to refer to topics that belong logically in Volumes 1--3 but weren't invented yet when I wrote those books". He plans to complete Volume 5 by 2025. Tune in ten years from now to see how it goes.
Knuth is currently 78 years old. It would be interesting to see if he lives to 88, never mind still have the intellectual and or physical capacity to complete such a work.

I wish him the best of lucky and sincerely hope he pulls it off.

You totally have a point.

TAOCP is not only hyper-focused, obsessive, bloated, difficult, and outdated, but also genius and foundational and connected to everything.

Kind of like TeX and Metafont.

I believe the word you're looking for is sisyphean, and I actually don't agree.

You've yet to make the case that the fundamentals of computing science are changing so much that documenting them is not a worthy task.

Again, basic algorithms and data structures simply have not changed. Their performance characteristics, methods for optimal implementation, etc, certainly have as computer architectures have evolved (think reordering CPUs, multi-level caches, changes to data storage technology, etc). But the basic algorithms remain the same. Quicksort is still quicksort.

It's true that over the last decade some new concepts have reached a new prominence (e.g., lock-free data structures), but those are additions to the field. They certainly don't invalidate the basics.

you are very correct. I've spent the last 7 years in bioinformatics doing algorithm development and it's almost entirely specialized versions of existing and established algos from decades ago.
Yup, because the math (ironically, the part most people find most difficult about the series) doesn't change. Algorithmic complexity, number theory, set theory. These are things that show up again and again in "higher level" concepts.

These are computer science books, not software engineering books.

> documenting them is not a worthy task.

Woah there! No one ever said anything about 'not worthy'. I have tremendous admiration and respect for Knuth and his work, and like you say, a lot what he's written is timeless.

Yes, he will revisited the first three books after the fifth finish, cmiiw.
Knuth doesn't cover red black trees.
Sometimes I believe it strongly, sometimes I don't. Do deep fundamental, mathematical analysis help in the accidental social complexity found on programming stacks sometimes ?
Last time realized that basic algebra (equivalence relation and classes) were helping me to solve a concrete programming problem I was having (having something to do with syntactic trees). It was a big surprise to me. Equivalence relations are a simple concept [0], and maybe my problem could have been solved without thinking of it, but still, some fundamental math helped me for my problem, and I was stunned by that.

[0] https://en.wikipedia.org/wiki/Equivalence_relation

I believe this kind of problems are already far away from most people's job and one foot in the math side of programming.
Also, I didn't want to diminish your point. When you understand the value of mathematical abstractions for any kind of tasks it's a bliss.
In fact those situations are pretty rare, it was the first time it happened to me that a mathematical concept helped me to understand how to write a certain algorithm that isn't specifically mathy (as opposite to implement something purely math related), so I would that, sadly, your previous comment is on the point.
My suspicion is that the growth rate of computer science is partially due to Knuth's work. TAoCP has a fair amount of original research in it and Knuth developed tools like the Stanford Graph Base, original algorithms, and original numerical methods as part of his research for the book...and TeX and Metafont for it's publication.
I read (and understood) volumes 1 to 3 (text, exercises and answers to the exercises, insofar they are present). It is not that hard to read, if you combine it with the right set of university courses in discrete math, combinatorics, and number theory, and some hacking on a 80's home computer (teaches one assembler)

Especially without those math courses, I imagine it will be a tougher read, certainly for those grown up with multi-mega or multi-gigabyte machines who expect it to be on programming, not computer science.

And it isn't 60's era formalism, it is low-level computer science.

It's OK. You may display that book prominently and proudly on your cubicle's bookshelf. You've earned it! ;)
In truth, if you haven't actually read Finnegans Wake, you've missed a grand literary experience.
I've read Finnegans Wake and view it as almost entirely a waste of time. Maybe that marks me a philistine, but I put a whole lot of effort into the book - reading books about it, listening to two different versions on tape - and it did pretty much nothing for me.

And to the original question, I consider TAOCP probably not worth the time and effort to read in detail. It has a lot of interesting stuff if you have infinite time, but very little that I've found practical to me. I've read enough of TAOCP to get two Knuth reward checks but can't motivate myself to read more than a fraction of it.

You're right. It's gibberish.
In truth it is an extremely difficult book to read due to its experimental writing style. See for yourself:

https://ebooks.adelaide.edu.au/j/joyce/james/j8f/complete.ht...

It really appears tedious, at best.

The explanation is golden:

https://en.wikipedia.org/wiki/Finnegans_Wake

"Despite the obstacles, readers and commentators have reached a broad consensus about the book's central cast of characters and, to a lesser degree, its plot. However, a number of key details remain elusive.[6][7]"

The first chapter is deliberately impenetrable, using obscure words from many different languages. I've seen commentaries that explain what it's supposed to mean, but it strikes me more as a tall mountain that exists to be climbed. It's more like you're translating it than reading it.

That said, if you can convince people to house rule it as a word-source for a Scrabble game, you can terrify people who want to challenge.

There's a way to read it that many people miss out on and that is to focus on the sound of reading it out loud. If you scrutinize the meaning of the words, sure, you might learn or discover something, but there's a ton of humor and play and fun to be had just by reading it out loud that most people miss trying to "understand" it.
I took a class on FW in college, and that definitely helps. Perhaps the book is "hard," but it is hilarious. I can't read a page of it without finding something laugh out loud funny. If that is hard, bring it on. The book really has no beginning or end so feel free to jump around at will. I don't think it is good comparison to taocp.
What did you find laugh out loud funny in Finnegans Wake? (A serious question, I'm not trying to be argumentative.) To me, there were lots of things that were clever or slightly amusing, but nothing near hilarious.

Some examples from the first chapter "oystrygods gaggin fishy-gods" - ok, that's clever turning Ostrogoths and Visigoths into seafood gods. The Willingdone Museyroom section was entertaining enough with "Willingdone" and "Lipoleum" for Wellington and Napoleon. "And a barrowload of guenesis hoer his head" - Guinness the beer and Genesis the book of the bible, clever enough.

I've read a few comments before saying that FW is hilarious. Maybe it's pointless to try to dissect humor, but I'm just not seeing it.

"Shem was a sham and a low sham and his lowness creeped out first via foodstuffs. So low was he that he preferred Gibsen's tea-time salmon tinned, as inexpensive as pleasing, to the plumpest roeheavy lax or the friskiest parr or smolt troutlet that ever was gaffed between Leixlip and Island Bridge and many was the time he repeated in his botulism that no junglegrown pineapple ever smacked like the whoppers you shook out of Ananias' cans, Findlater and Gladstone's, Corner House, Englend. None of your inchthick blueblooded Balaclava fried-at-belief-stakes or juicejelly legs of the Grex's molten mutton or greasilygristly grunters' goupons or slice upon slab of luscious goosebosom with lump after load of plumpudding stuffing all aswim in a swamp of bogoakgravy for that greekenhearted yude!"

I personally think this passage is one of the funniest things I've ever read. First of all, it rolls off the tongue in the most ridiculous way ever (you have to read it out loud) and second of all he manages to write entirely about food while making you think entirely about naughty things.

No accounting for taste but you have got a peculiar sense of humour if that makes you laugh. Give me Professor Stanley Unwin any day.
As you say, it is difficult to explain humor. The best I can do is try to give examples. And to be honest most of the things that immediately strike me as funny deal with sex.

In the passage cited below by jhedwards, I find the way Joyce suggests Shem's Greek-Jewish heritage explains his taste in cheap prostitutes very funny (as well as his skewering the sanctimoniousness of it all, "you like prostitutes but only the cheap ones"). Also, that he gives the address of the whore house, like it is an advertisement is also funny.

You mention the first chapter, so I started reading from the online link given earlier in the thread. In the second paragraph, I found it funny the way he says that topsawyer (Tom Sawyer?) had not exaggerated the size of his balls when they were "doublin their mumper all the time."

It's all about the wordplay and frankly being ridiculous. Obviously if you read these things in the context of a forum, you are probably not going to find it funny. Context is very important: http://www.cc.com/video-clips/0i0fy2/stand-up-hannibal-bures...

As jhedwards suggests, if you read it aloud you will hear the jokes.

> "It's a pleasure to meet you, Professor Knuth," Steve [Jobs] said. "I've read all of your books."

> "You're full of shit," Knuth responded.

(http://www.folklore.org/StoryView.py?story=Close_Encounters_...)

Yes, now we know that this never happened, but I like to think it did.

He could respond that way to everyone.

In every full set of TAOCP, there is a sentence that reads "If you have read this far, mail this string to the author to collect $25." The sentence is followed by a 10 character alphanumeric string. The string and placement of this sentence is randomized: different in every set.

To this day only 3 people have collected their checks. All three have them framed on their walls.

Wow. This sounds like an urban legend (for values of "urban" that mean "university CS departmental"), but I would love to be convinced that it is true.
I'm skeptical. I read the first 3 volumes nearly 20 years ago, skipping only a couple of the most laborious mathy sections and don't recall seeing this.
(comment deleted)
Too late to edit, so I'll reply to myself:

My parent post was a (badly executed) joke, riffing on a) the famous bug reward checks and b) the running joke (mentioned in other comments) that a lot more people own TAOCP than have actually read it. EDIT: and c) the urban legends of students putting such a "test" sentence in papers they hand in to inattentive professors.

There is no better way to kill a joke than explain it, but mine was DOA anyway...

(comment deleted)
(comment deleted)
I highly doubt people making all these lists recommending SICP, Code Complete and the dragon book have read those either.
SICP and the dragon book were both part of my CS curriculum. I read Code Complete as a mid-level engineer and found it quite useful. It would not surprise me that many others have done so as well.
Code Complete is very easy to read and good for beginners. SICP on the other hand... I don't think many people actually read that book, it's extremely 'dry'.
James Joyce would probably not have taken kindly to being called "English"
No offense, but you really should have done some research before you plunked down the cash... its exactly what you say it it is a foundation computer science book. literally.
I got a used set for $6 and I felt that was a good investment.
I've got a mixed edition used set. More hours of entertainment than I'll ever get to.
pipeline stalls, designing for cache performance, branch prediction, multithreading, etc.

Those are issues for a subset of computer hardware. Embedded computing is still huge and has drastically different performance requirements. TAOCP is designed to stand the test of time, not focus on micro-optimizations that generally have limited performance impact and are a waste of time 99% of the time.

> Embedded computing is still huge and has drastically different performance requirements

Even chips as small Cortex-M4 has a write buffer, 3-stage pipeline and branch speculation. And real embedded computing is more and more utilizing hardware similar to desktop/mobile/server. You can't run self-driving car / neural networks / image processing on a single threaded CPU with no cache or branch prediction.

You can't run the car on it, but many subsystems in any car, automatic or not, can and will run on that sort of machine.
Cache is part of TAOCP

As to the rest of it. It's much cheaper to use a GPU style massive array of dumb cores vs. a few faster cores. Don't forget car companies are spending billions on these chips so spending a little more on software to save a lot on hardware is a good tradeoff.

> TAOCP is designed to stand the test of time, not focus on micro-optimizations . . .

Hmmm. My edition of "Sorting and Searching" has a section devoted to tape-sorting.

Same strategies apply to NUMA.
and the cache/memory hierarchy.
The idea is that if you fully understand the analysis as it applies to tape-sorting, you'll be able to perform a similar analysis as sorting applies to different problem domains yourself.

The point isn't learning the answer; it's learning how to get to the answer.

He plans to remove that section in the next edition of the book :( I'd argue the section is very relevant since today's RAM works fastest when accessed sequentially.
Disclaimer, I only read the first book.

Depends what you want from it. I used the first book to study for my Bachelor's degree final state examinations, and it served me well :-)

In other words, yes it is very academical, in the truest sense of the word.

From what you say, that you want it to "mention of pipeline stalls, designing for cache performance, branch prediction, multithreading, etc.", you might find better use of Andrew S. Tanenbaum books. I have only read his Computer Networks [1], but it has saved me at least 14 hours of boring lectures at uni, and helped me with some protocols work. He still does research in distributed OS-es, so would hope, that rest of his books would have same amount of readability and usefulness as the one I have read :)

Back to Knuth, if think you have no use in mathematical formalism, or college math in general, you will probably find it little more than intellectual entertainment.

There are of course areas where having formal theory of a thing is beneficial when programming, even if you yourself don't apply it (i.e. the chapter on random numbers seems like something everybody touching any code related to security should read, i.m.o)

But even then, if you suddenly need to learn more math theory, there are probably better sources than Knuth.

As somebody who finished my Msc already, I like it as my intellectual entertainment just fine :)

[1] http://www.mypearsonstore.com/bookstore/computer-networks-97...

TAOCP is a fundamental work teaching fundamental techniques. If you can master it, pipeline stalls, designing for cache performance, branch prediction, multi-threading, etc., are easily understood problems and you have the tools to then attack most any other computational problems that are likely to come along.

Sounds like what you want is a prescriptive tutorial addressing a set of specific computing problems. That's not what TAOCP is.

(comment deleted)
Some people read it cover to cover, and the few I know also happen to be the best computer scientists I know of. It is hard to come by a comparable compilation of best algorithms in one place, so I occasionally have to refer to it. I wouldn't think of reading all of it, because I don't think I have the time, but it is a page turner if you are into algorithms.
There would be better ways to spend your time than TAOCP.

If you want to scratch that itch, a better way would be Cormen, Leiserson, Rivest, and Stein's Intro to Algorithms (https://mitpress.mit.edu/books/introduction-algorithms).

I'm not aware of such a universal reference for the interaction between algorithms and architecture ("...pipeline stalls, cache performance, ...").

Until that day comes...TAOCP sure looks nice on the bookshelf.

So long as you don't spill coffee on it, you can always resell it.

I got a set when a coworker jumped ship with no forwarding address and left all his books. It seems useful for people implementing languages and standard libraries, less useful for people using them.

I wouldn't necessarily read it cover to cover. I did that with volume 1 and found it interesting, but I could have done without the assembly implementations. Assembly is highly dependent on the hardware capabilities. It feels to me like C or some other close to the metal language would have been more useful.

I keep volumes 1 and 2 on my desk in case I ever need to refer to them for information about a specific topic, but I have yet to actually open them.

Knuth's books are a baseline for "how things are done" for many, many areas, so having read them lets you hit par on most holes. Optimizing code for an architecture is very interesting, but it comes after 1) figuring out which ways the math can be stated correctly and 2) calculating the order of computation. Then architecture gives numbers to put into the order of computation. Knuth focuses on the first two, but maybe a few books' worth of focusing on those is understanding them well and not such a waste.
It's not useful as a reference, but it is full of delight – though only if you actually do the problems. Many of them are chains of inquiry that build on each other and culminate in some result that gives you so much intuition about whatever it was they were dealing with.

If you're in the Toronto region, I actually run a reading group for these books: http://www.meetup.com/Knuth-Reading-Group-Art-of-Computer-Pr.... We get together about once a month and go through the problems together. Just last night we had a 2.5-hour session about only section 2.3.4.1. I doubt you'd be able to get this much content from a sub-sub-sub-section of CLRS.

> It's not useful as a reference,

I would argue the opposite... When I needed to read about the different approaches on how to shuffle a deck for a card game TAOCP was there for me. When I needed to investigate different approaches for string comparison algorithms, TAOCP was there for me. When I didn't understand what was the deal and why was so hard to implement a random number generator, TAOCP was there too.

Anytime that I needed a reference for a core CS algorithm or data structure, TAOCP worked very well as a reference for me. It feels like the Britannica Encyclopedia for CS.

I keep neglecting to come, mostly out of shame; frankly I find the texts troublingly dense and don't want to feel weak in public.
Not really. There are a few gems here and there in the text, but overall it is a slog. CLRS is a better text book for getting up to speed in algorithms. If you are going to read it though, the volume on searching and sorting is probably the best. I didn't much like volume 1.
(comment deleted)
TAOCP is like a math book, and you were hoping it will make you a better experimental physicists. :)
The older editions of "Sorting and Searching" contained a lot of information on efficiently reading and writing to sequential storage devices [tape]. Don't know about the current edition. [1] That said, "Combinatorial Algorithms" is all about efficiency that is relevant today. Combinatorial problems are the sort of thing where good algorithms stomp caching, branch prediction etc. because the fundamental problems are in NP and NP/32 is still NP.

Knuth has spent 50 years creating computer science that we can take for granted. But in the end TAoCP is a "little book on compilers" and if that's not relevant to one's vocation and the topic isn't intellectually interesting in and of itself then it's probably not the right book for a person.

Knuth always reminds me how hard this stuff really is.

Good luck.

[1]: edit. The First Edition has a centerfold showing the sequences of different society's executions across multiple tape drives.

A good portion of my undergrad CS program used excerpts from TAOCP. So yeah - there's good stuff in there, but maybe it wasn't what you personally wanted. If you've been in industry for a long time, then sure - you've probably developed expertise in areas that TAOCP doesn't cover. But if you are looking for a rigorous, broad, academic base then it is pretty solid.
I've read the first volume. I do not have a math-heavy background. Knuth's dry humor is great. The scope and effort put into the books are astounding.

I did not learn much of practical use for my day-to-day programming. Sadly, I will probably never read the other two volumes in my boxed set. They look great on the shelf.

The MIX assembly language was my least favorite aspect of the book - and I ENJOY creating and tinkering with toy virtual machines.

MMIX (MIX's modern RISC successor) will probably be a lot nicer.

Perhaps assembly languages are essential to demonstrate the concepts properly. And I understand the arguments against using a popular low-level language such as C. But it sure would have been nice to have a simple and readable pseudo-language for the examples rather than MIX!

>TAOCP worth the time and effort?

Early in my career, I got the first three volumes.

The volume on sorting and searching was the most useful, and there the most useful was AVL trees. Next, heap sort and the Gleason bound. Sort-merge? I'd known that already, but if don't then can learn it there. Radix sort? That's what the old punched card machines did; in some cases it's faster than heap sort (doesn't contradict the Gleason bound because that bound assumes that the sorting is from comparing pars, and radix sort doesn't do that). Radix sort could be still be useful in special cases. Lists, queues? Obvious.

The fast Fourier transform remains important, and some of what Knuth writes about it is good and tough to find elsewhere.

Somewhere in those first three volumes are some really good summaries of combinatorial formulas, with some results not easy to find elsewhere.

The volumes give some good examples of how to do the math to evaluate the performance of an algorithm -- might need to do that sometime, e.g., for some guaranteed performance in some embedded system -- and if need to do that then it's far easier to read at least the start on how from Knuth than reinvent it yourself and likely easier than from other sources.

The level of clarity, precision, and quality in Knuth is about as high as those go and a great example for others.

That's most of what I got from those three volumes.

For the later volumes, right, I didn't bother. But, if I have a question that might have an answer in one of those volumes, then, sure, I will eagerly look.