I am seriously considering actually reading through the whole Art of Computer Programming by Don Knuth.
Though I know not many people actually manage to do this [1], and it's a ridiculously huge task to attempt, I wondered what people thought reading the whole lot will give me?
I believe it'll give me a deeper and wider understanding of programming, much like the wonderful quote from lindelof [2] who is in turn quoting Joel Spolsky over at the other AoCP thread:-
"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 think having that deeper understanding will seep through into my practice as a programmer like a non-evil ooze. What else?
P.S. I clearly have to end the question on the famous quote from Bill Gates on AoCP:-
“If you think you’re a really good programmer, or if you want to challenge your knowledge, read The Art of Computer Programming, by Donald Knuth.” Gates described his own encounter with the book: “It took incredible discipline, and several months, for me to read it. I studied 20 pages, put it away for a week, and came back for another 20 pages. If somebody is so brash that they think they know everything, Knuth will help them understand that the world is deep and complicated. If you can read the whole thing, send me a resume.”
What will you get from reading the lot? An excellent foundation in Computer Science. You'll understand how computers operate, from logic gates on up through compilers. You'll think about problems you never really knew were problems (i.e., what is the fastest way to multiply?) and see algorithmic connections between things that you never thought were related (riverbeds, RNA and nested parentheses, for example.)
I completely disagree with the folks who say "build software instead of reading about building software"-- there is a difference between the disciplines of Software Engineering and Computer Science. TAOCP is about the latter.
If you haven't yet begun, I have a few recommendations.
First, you may want to begin with Volume 4. It's some exciting material, very up-to-date, and Knuth's sense of humor shines through. Plus, there are videos available (on the Stanford SPCD site, or the Stanford iTunes) where Knuth discusses various sections. These videos are highly recommended. Fascicles 0, 1, 2, 3 and 4 of Volume 4 are available as separate paperbacks. Together, the published V4 material is larger than any of the first 3 volumes, but sliced up into bite-sized treats. (I wonder if Volumes 1-3 would seem less terrifying to people if each volume had been published in single-chapter paperback form...)
Depending on your math background, I'd recommend you skim Chapter 1 the first time through, and return to it as needed. In fact, you'll probably want to read each section (at least) twice-- quickly the first time, just to get the intuition and the gist of the arguments, and then slowly, carefully, understanding each step.
Be sure to read Volume 1, Fascicle 1 on MMIX instead of the old sections on MIX. MMIX is better in many ways, and you'd be better off converting the MIX in the text to MMIX as you go along than trying to straddle both worlds.
A general rule: don't skip the exercises. There's a lot of good material in the questions (and answers). Do as many exercises as you can; but read them all (and read the answers, once you've taken a shot at the problem, or decided to give it a pass).
Finally, if you really catch the bug: read the index. Lots of great jokes hidden away there.
Naturally, StackOverflow would be a good place to post specific questions on the text, if they should happen to arise....
Knuth is awesome, and deserves a place on every programmer's reference shelf, but the key word is "reference". Don't get too embroiled in Knuth for Knuth's sake. Good programmers are wham, bam, thank you ma'am when it comes to Knuth. They read him for what they need and then they stop reading. Knuth is like an oasis you come back to after sojourning in the desert. You just take a couple sips and you move on, because a) life is too short to read Knuth cover-to-cover and b) if you really want to put yourself through a programming/CS gauntlet, there are better ways, all of them involving building stuff, rather than reading about building stuff.
Well you will get the ability to send a resume to Bill Gates.
Personally, I have the books, and have tried going through them time and again. Every time I touch them, I learn or relearn something new.
Working through the entire set requires a heroic effort and I doubt it is really worth it. In particular, Vol 1 and 2 are really, really dry. But I'd highly recommend Volume 3, Sorting and Searching.
Although I do not like the use of MIX throughout the book and would have preferred a higher-level language like C, it is probably the best book on this topic you'll ever find.
Don't forget that Knuth actually wrote it in the first place.
I don't think many people have the capacity to get through the whole thing (and I mean actually take it in, not just follow the words). But Knuth did, and I'm sure that there's a small minority out there who could manage. I vainly believe that I'm one of them, and one way or another I'm going to get myself a copy soon and put that to the test.
Sounds like you can get a hernia... ;)
Definetely one should have them. Reading them whole is close to impossible :), but whenever you need something covered by the subject of those books (like searching, semi numerical algortihms, etc) you will find it there.
Typically nowadays when you buy a book about computers (especially about programming) - it is obsolete when you bring it home :) This is not a case with those books. I have read them during my University course and it was in 1976-1980 and I have checked something there a couple of weeks ago.
@TraumaPony - abosulutely fabulous comment!
Do not waste your time or life.
If you were going to read an algorithms text front to back, perhaps CLR [1] would be a more sane choice. You'll learn just as much, except that it's written to be read and also to be used as a reference text, not just meant as a reference text.
I'd also strongly recommend using the extra time you saved to go read Code Complete [2].
[1] http://en.wikipedia.org/wiki/Introduction_to_AlgorithmsI need to get my hands on them somehow.