Stack OverflowHow many people actually read "The Art Of Computer Programming" books?
[+48] [26] popopome
[2008-08-16 16:41:03]
[ books knuth taocp ]

"TAOCP book is one of the must-reading CS books."

I read such a statement so many times but I never see person who read and study over the book. Maybe the book itself makes our job more secure(^^).

Have you ever read the book?

(2) TAOCP too localized? Wth? - Andomar
Perhaps "too localized" isn't the best close-reason here. I've reopened the question, but really don't feel that "have you read [book title]?" is a very good question for StackOverflow. - Jonathan Sampson
(3) @Jonathan: It is, however, a poll question starting a discussion by asking a rhetorical question, so I've voted "not a real question". (@popopome: Try the discussion on a discussion forum, your blog, etc.) - Roger Pate
I see no reason to close this question based on its syntax rather than its content. The Art of Computer Programming books are often regarded as fundamental books in the field, and a question concerning its role is of interest to professional programmers. It's not equivalent to "Have you read War and Peace?", after all. Of course the phrasing of the question could be much improved, but there are a couple of valuable answers here (especially Michael Dorfman's below) and deleting them (which seems to increasingly happen to closed questions these days) would be a loss. - ShreevatsaR
"I never see person who read and study over the book." Then you don't know any competent programmers. "Have you ever read the book?" I've read the three published volumes as well as Knuth's pre-pubs. - Jim Balter
[+67] [2008-09-15 12:50:05] Michael Dorfman

I've read the books, and would recommend that others interested in Computer Science (and not just software engineering) do too.

But let's get a few misconceptions out of the way.

First: TAOCP is not an algorithm textbook. People who say "CLRS (or Sedgwick) is better" are missing the point. If you want an Algorithm textbook/cookbook, there are lots of good ones to choose from. TAOCP shouldn't be on that list.

Second: The algorithms listed are not implemented in MMIX. The vast majority are written in English. Knuth uses MMIX to show implementation details only on a small subset of algorithms where it is relevant to the functioning of the algorithm (for example, in 7.1.3), or where it is instructive to learning about how computers actually behave (for example, in 1.3.1').

Third: The books shouldn't be read in order, cover to cover. Knuth specifically warns that Chapter 1 provides the mathematical basis for the later chapters, and should be quickly skimmed and returned to as needed.

Fourth: The books aren't "dry" or boring. There's a lot of humor there, much of it hidden in odd places (like the index, or the exercises.) Knuth is a funny guy (his first publication was in Mad Magazine, for chrissakes) and his personality shines through.

I'd recommend that new readers begin with Volume 4 Fascicle 0, which gives a good taste of what the series is about. Read the text, quickly first, and then slowly, and try your hand at a few of the exercises.

You won't be sorry.

thank you very much for the honest and fair review. I tried going trhough vol 1 but was too heavy so bought "Concrete Mathematics" to do the math. But by reading your post I am convinced that I should work on them top-down, starting with Vol 4. One other friend of mine suggested the same, really appreciate your input. no clue why and who gave votes to the pseudo quote response above :P. - C-x C-t
can you also advise if I need to go through all the math tools before reading the vol 4 or is it okay to do it on the go ? - C-x C-t
I'd suggest jumping in at Volume 4, and heading back to Chapter 1 (Volume 1) when you need help with the math (or notations). Knuth labels the exercises with an M or HM if significant Math (or Higher Math) is required; coupled with the difficulty estimates, this should help you choose a threshhold that is appropriate to you-- and I'd strongly recommend you try to complete all the exercises beneath your chosen threshhold. - Michael Dorfman
(1) I followed your advised and started with Vol 4 Fasc 2 and totally agree that this should be the way to go.Although I am still scared of exercise but still the material makes me hate the night (don't feel like sleeping). Thanks. - C-x C-t
Congratulations! It's a fantastic journey. Post any questions that come up as you read. - Michael Dorfman
Beautiful review, Finally feeling inspired enough to tackle TAOCP once more.... lets hope this time it works. - Rohit chauhan
[+54] [2008-08-16 16:53:37] Mark Harrison [ACCEPTED]

Knuth is alleged to have described them as "the most purchased, least read" computer science books.[*]

[*] in the interests of historical accuracy I have sent him a note asking him to clarify. I'll follow up with any response.

Update: Knuth has responded, and this story is False.

His response is here:

Update: response deleted. Permanent home now here:
which in turn points here:

Ain't that the truth. Though I did get through about 2/3's of the first volume, which makes me super awesome I guess. - swilliams
(2) Do you have a citation for that quote? I'm not doubting you; I'd like to see more from where that came from :-) - ShreevatsaR
(8) I think that's Stephen Hawking's quote about "A Brief History of Time", and Knuth said nothing of the sort. - ShreevatsaR
(6) I don't want to be obnoxious, but please remove this false quote. It turns up in Google searches and only propagates it further. :-( - ShreevatsaR
ShreevatsaR, it seems you are doubting me. :-) - Mark Harrison
In my first comment (Dec 8 '08) I wasn't, but after a week, when searching for the quote turned up citations by Stephen Hawking, and knowing the way misattributions arise, I did indeed began to doubt, yes. :-) Now (March 2010) I'm almost convinced it's false. - ShreevatsaR
Actually, now I can't find proof that Hawking said it either, though it's been said about Hawking's book: v/s — see that there's a website quoting you already! If you say Knuth is "alleged to have described them", do you have a source for the allegation, at least? - ShreevatsaR
BTW: if you do manage to contact Knuth and get a response, you'll be my hero, given how hard it is. :-) [Knuth versus email: , ] - ShreevatsaR
Wow, wonderful, thanks for sending the note and posting a reply! You really are my hero; now I'm inspired to learn that sending notes to Knuth isn't equivalent to putting them in a blackhole. :-) Thanks again. But the question and answer have been deleted; could you post them here for posterity? Thanks, - ShreevatsaR
(1) Shreevatsa, I actually have to thank you for this, if you had not been persistent in making me confirm my answer, I would not have made the effort to confirm! It looks like this question is being deleted as well, so let me move everything over to: ----- It looks like this question may follow the others in being deleted, so feel free to send me mail to let me know you were able to see the moved content... my mail is: - Mark Harrison
[+24] [2008-08-16 20:46:00] lindelof

Before I answer this question let me quote Joel Spolsky:

"[Programmers] who started programming by copying JavaScript snippets [...] and went on to learn Visual Basic never learned about pointers, and they can never quite produce code of the quality you need."

I agree with him: even if you spend your entire life writing Java or any other language in which you never have to worry about pointers, you'll never be as good a programmer as if you were aware of what's going on behind the scenes. I firmly believe that universities should teach C and not Java for this reason. And the same holds true with respect to fundamental algorithms.

That's why I still think any programmer that's serious about their work should at least skim through Knuth's work. Or can you tell me what are the specific situations where qsort performs worse than any other algorithm? Or how to randomly sample n test datapoints out of a pool of m points? Or how to test the quality of your random number generator?

(5) "[Programmers] ... they can never ..." == flamebait - Ande
maybe, but it's still true. - Jorn
(40) Then the assembler programmer says a mere C programmer can never really understand CPUs. The E-Eng says you can't understand CPUs unless you understand gates, the solid state physicist=unless you understand holes, the quantum physicist=unless you understand electrons and so on..... - Martin Beckett
(2) Well, I love programming a lot. I really enjoy building things that I know people will use and I make a very concious effort to make clean understandable code for my peers. I don't agree with the quote that says if we don't know pointers, then we can't be as good. I think that quote is missing something, '...and they can never quite produce code of the quality you need FOR THOSE SPECIFIC USE CASES WHERE YOU NEED POINTERS." Why bother with such things if your program doesn't need it? - delete
(2) @Martin: Sure, but some abstractions are leakier than others. The EEs are wrong because the datasheet says how the CPU really works or it's a problem for the EEs. C is a good place to land: low level enough that while the assembly geeks are right, no one cares. The interesting thing is that the high-level language are getting ever better: it is becoming easier for people to make a career of writing code without knowing pointers and not suck. All my hard won pointer-ninja skillz are becoming more marginalized every year. That's progress. I think I'll rail against it anyway. - dmckee
@dmckee - people used to make a living with hypercard on the Mac. If you don't know pointers you aren't a programmer ;-) - Martin Beckett
Heh. I started by copying JavaScript, then moved onto VB. Then moved right into Assembler then C and the rest is history. Never had a problem with pointers and certainly consider myself to be a good programmer. Flamebait? Yes. True? No. - tixxit
+1 for "universities should teach C and not Java" - sank
[+11] [2008-08-16 17:45:52] Rob Z

I have the first three volumes on the shelf along with a slowly building collection of the fascicles as well. However, like many others I really haven't opened them up and read them cover to cover, most of the time I just use them to look-up a particular topic that I am working on.

As a reference I have found the Fundamental Algorithms and Sorting and Searching books to be of great use and the fascicles to be useful on some specific problems I have been working on.

I have also heard the arguments that they tend to be too low level for most people to find them useful, but I tend to disagree. While the examples in MMIX assembly (FYI - MMIX has not been implemented in hardware [1]) tend to be of dubious use at times and I would like to see some C like examples, I have come to notice that if I can understand the concept being explained and the associated MMIX code, I can generally implement it in the language of my choice.


[+8] [2009-07-17 20:06:48] nick

This is a very common misconception. TAOCP is not to be read, but studied. Quoting Alexander Stepanov:

"How does one learn to recognize general components? The only reasonable approach is that one has to know a lot of different general- purpose algorithms and data structures in order to recognize new ones. The best source for finding them is still the great work of Don Knuth, The Art of Computer Programming. It is not an easy book to read; it contains a lot of information and you have to use sequential access to look for it; there are algorithms that you really do not need to know; it is not really useful as a reference book. But it is a treasure trove of programming techniques. (The most exciting things are often to be found in the solutions to the exercises.) I have been reading it for over 30 years now and at any given point I know 25% of the material in it. It is, however, an ever-changing 25% – it is quite clear now that I will never move beyond the one-quarter mark. If you do not have it, buy it. If you have it, start reading it. And as long as you are a programmer, do not stop reading it! One of the essential things for any field is to have a canon: a set of works that one must know. We need to have such a canon and Knuth’s work is the only one that is clearly a part of such canon for programming."

[+5] [2008-09-07 10:54:38] gabr

Read all three. They were obsolete (by the computer language standard) even then. Still, a colleague and I wrote a working MIX interpreter in the Pascal language (Turbo Pascal, I believe).

That was aeons ago - about 15 years, I believe. I can't remember any more what I learned from them, but still, I do remember that they gave me a great reading pleasure. Maybe I'll have to reread them.

Books are important.

[+4] [2008-08-16 17:35:50] Kristopher Johnson

I have the three volumes on my bookshelf. Every once in a while, when I'm thinking about an algorithm, I'll look it up and skim through what Knuth has written. I've always wanted to try a thorough study, but just can't find the time.

I should note that about half of the books on my bookshelf are unread. Knuth isn't special in that regard.

This may seem obvious, but you could just try one exercise or proof from an algorithm or data structure that interests you and try to work it through for maybe an hour. The feeling of accomplishment from just that little bit will show you if you'd like to read and study more. - Peter Stuifzand
[+4] [2008-09-15 15:33:19] user7428

These books are treasures. Today, many of the programming languages have so many high level functions, it is easy to dismiss the "best" algorithm since its easier to use the built in function. I know that understanding sorting on multiple tape drives is pretty archaic in today's world, but, if you don't understand the underlying principles and some of the math (and there's a lot in Knuth's work) there's still a lot to discover in these books. Those that dismiss these as elitist or "too basic" might consider a career in marketing or sales.

[+4] [2008-11-11 14:21:27] pnkfelix

(I would put this as a comment to the post that posed the question, but I do not have a sufficiently high rating to do so, so I am putting the answer here for now.)

Vulcan Eager's answer of Aug 24 at 10:55 asks:

Question 1: "Furthermore f should leave omega pointwise fixed; that is, f(q) should equal > q for all elements q of omega."


The remainder of that paragraph also says that "The computational sequence is said to /terminate in k steps/ if k is the smallest integer for which x_k is in Omega ..." This additional note, combined with some thought about what the four pieces of the quadruple (Q,I,Omega,f) represent, leads to an answer:

The Omega component is the set of final states of the computation (that is, the ones where there is no further computation to be done).

If you think of the function f as being invoked on every clock tick, then f will still be invokes as time passes, but you do not want a final machine state to change in response to such ticks; therefore to properly model final states, you need f to leave Omega pointwise fixed.

Throughout the volumes of TAOCP, insights like this are not spelled out, but rather left for the reader to see on their own. This makes reading TAOCP difficult, but also quite rewarding, since it is filled with such "Aha!" moments for the reader who is willing to work for them.

[+2] [2008-08-30 13:53:34] jeff w

I read volume one almost 20 years ago. All the examples use Knuth's own MIX assembly language which made it heavy going. What sticks in my mind is the revelation that bytes don't have to be 8 bits.

(1) :) I was amazed too - C-x C-t
[+2] [2008-09-07 11:13:41] Peter Stuifzand

I read all three. But I have to say, I couldn't wrap my head around all the math. Then I started to learn more about the math involved. So maybe the books have a good influence.

:) doing the same thing, but before I read TAOCP, I felt it from the very first chapter that I need some math before this thing - C-x C-t
The main problem I had was that knuth is so well-versed in a ton of math, that it's hard to know which parts will require me to read an entire math subject just to comprehend one sentence he wrote at the beginning of his volumes ;) In any case, the books are a life journey :) - Ryan
[+2] [2008-10-23 04:52:11] Ying Xiao

Yes. I have read both volumes I and III. Volume II, with its focus on random number generation was too much, and I didn't make it through. The MIX was alright, though I had to spend a bit of time in volume I making sure I understood all of it.

It was kind of underwhelming actually:

  • Book 1 had some very basic data structures stuff. This stuff can be found in any reasonably modern book.

  • As a CS Theory student (algorithms & complexity), book 3 was mostly pointless and dealt with two very limited and narrow algorithmic problems which aren't terribly interesting from an algorithmic perspective. However, I did learn how to write a correct binary search -- it's harder than it looks with all the off by 1 errors!

My general opinion is that these are monolithic works of historical importance, but practically (or even theoretically!), your time could be better spent reading other things.

On the other hand, I have great respect for Knuth's other math/CS Theory works, and I've found those really enlightening. I'm looking forward to Volume 4B (Graphs and Networks) of TAOCP.

[+1] [2008-08-16 16:52:27] Martin

I managed to bag myself the collection at a cut down price on Amazon a few weeks ago. I have it here on my desk and fully intend to eventually get through all three volumes.

Reality may not meet my intentions but it was a set that I have always wanted for my programming bookshelf.

[+1] [2008-08-16 19:47:42] Matthew Ruston

Have the first three volumes and they make for great elitist decoration! I've probably spent all of 3-4 hours poking through the volumes, mostly just to read snippets of when I am bored and feel like some math.

Word has it they are great books and highly educational if you willing to put time in them.

[+1] [2008-08-24 10:55:18] Vulcan Eager

I just got myself the first volume. I certainly intend to read it cover-to-cover. Need some help at the end of section 1.1. The math used to describe a computational method is confusing me. It does look like set theory but I could do with some pointers here.

Question 1: "Furthermore f should leave omega pointwise fixed; that is, f(q) should equal q for all elements q of omega."


[+1] [2009-08-10 16:56:53] fortran

I'm waiting for Knuth to finish all the volumes and then purchase a nice boxed set...

(I am always pissed off when I get the DVD of a film I liked and then a it becomes a trilogy, I get the other two DVD's and a few months later I see in the store all the DVD's in a nice pack, with extras and cheaper than the ones that I bought separately).

You could be up for a long - even eternal - wait, judging by his list of 'todos', and his date of birth... - Benjol
When he passes away (and I hope that date is still far away!) I might consider getting whatever was done to the moment anyway :-p - fortran
[0] [2008-08-16 16:51:48] Klesk

I also haven't read it. I think it's on too low level (examples in assembly, lots of math). For me Introduction to algorithms [1] is more suitable book.


[0] [2008-08-16 17:34:50] Felipe

Yeah, I also think that most people who claim owning TAOCP probably never read it.. maybe just short snippets to see how it looks like..

[0] [2008-08-16 18:34:11] martinatime

These books are on my to read stack...but I haven't gotten to them yet.

[0] [2008-08-16 18:48:38] Tall Jeff

Any self respecting computer "expert" needs to own them to be a part of the "real" computer science culture. Although, reading them cover to cover is another story. ;-)

I have tried to read them and they are just too low-level and dry to enjoy reading them through. That is, they are not fun to read. However, they are great reference books and if there is an algorithm you want to understand and implement from scratch, they are a great place to start, if not a one stop destination.

[0] [2008-08-24 11:11:16] Eric Scrivner

I got a professors copy of the first book free for answering some mathematical question right when I joined university. I've skimmed through it and found lots of interesting stuff, but too much reading it and my eyes really do start to glaze. I like them better as reference books than as cover to cover must reads.

[0] [2008-08-24 12:07:14] HokeyWhiteBoy

Prob the most inaccurate title of all time... if any books should be called "The Science Of Computer Programming” then these are those!

I have them, and have never read them. I do declare myself to be a sucky programmer though, so no big loss.

[0] [2008-09-16 17:49:39] parkersuperstar

Own them, started reading volume one a couple times, never made it past page 27.

[0] [2008-12-12 10:00:06] Nils

no, reason for this: My school didn't encourage me to do this (however at least we read some other interesting books..) and simply the lack of time. I hope that I'll find time at some point to read it..

[0] [2009-08-10 16:52:56] zbychuk

We have done many excercises from those books during my University course (during seventies!) and till now, when I want to check specific algorithm and see ups and downs of it, I still look ito it.

However reading them from cover to cover unfortunately seems to me close to impossible.

[-8] [2008-08-16 16:42:56] public static

Havent' read the book, catchy title though.