Knuth's classic work has been widely acclaimed as one of the most influential works in the field of computer science. For the first time, these books are available as a boxed, three-volume set. The handsome slipcase makes this set an ideal gift for the recent computer science graduate or professional programmer. Offering a description of classical computer science, this multi-volume work is a useful resource in programming theory and practice for students, researchers, and practitioners alike. For programmers, it offers cookbook solutions to their day-to-day problems.
Donald Ervin Knuth, born January 10th 1938, is a renowned computer scientist and Professor Emeritus of the Art of Computer Programming at Stanford University.
Author of the seminal multi-volume work The Art of Computer Programming ("TAOCP"), Knuth has been called the "father" of the analysis of algorithms, contributing to the development of, and systematizing formal mathematical techniques for, the rigorous analysis of the computational complexity of algorithms, and in the process popularizing asymptotic notation.
In addition to fundamental contributions in several branches of theoretical computer science, Knuth is the creator of the TeX computer typesetting system, the related METAFONT font definition language and rendering system, and the Computer Modern family of typefaces.
A prolific writer and scholar, Knuth created the WEB/CWEB computer programming systems designed to encourage and facilitate literate programming, and designed the MMIX instruction set architecture.
In your eternal struggle to misrepresent your cognitive abilities to non-experts through linguistic calisthenics, you may have found yourself yearning for a handsome slipcase to slot conspicuously into your personal library in order to signal an erudition so thoroughly unassailable as to convince the uninitiated, with no more than a glance, that you are a peerless operator of code. If your personal Atropos is to chronically reference material which you mine from Wikipedia in order to maintain some superficial homeostasis between the image you’ve cultivated and the reality which constantly taps you on the shoulder when you press against domains of knowledge which folks presuppose your awareness of - then you may wish to virtually signal your unimpeachable credentials by rating this set of books five stars. Comfortable in the knowledge that TAoCP is to the programming world what Finnegans Wake is to English literature; you’re not supposed to read it. No one has actually read it. But, on the off chance that someone on your friends list has, (and I know of at least one such creature which dwells, normally quiescent, like Krang from Ninja Turtles, feeding his exo-suit pizza and beer with the tentacles growing out of his overdeveloped parietal lobes), then I encourage you, in the most muscular of locutions, to evade any probing about your assimilation of the content contained herein. Because you will be pulled inexorably towards being fully exposed. It is always more sensible to block someone than humble yourself in the eyes of your followers. A lesson I learned once during a job interview when asked about a certain intractable problem, to which I replied: “the reason P vs. NP is so hard is that polynomial-time algorithms can exploit such an enormous set of mathematical ideas. An algorithm need not do anything like what you expect. For example, it might take a 3SAT instance phi, map it to some totally unrelated-looking problem involving a Riemannian manifold, then evaluate an integral over that manifold that turns out to be nonzero if and only if phi is satisfiable. Sounds crazy, but can you rule it out? If you wanted to prove P!=NP, you'd have to!”
The senior engineer, unmoved by this obvious recitation, (and perhaps noting the quivering nature of my affable smile and the vigor and range of mandibular activity to which I was compelled) then asked, “What’s the closest idiom to the Arabic: ‘You made my neck as small as a sesame seed.’ ?” Causing me to feign severe discomfiture of the bladder so that I could go to the bathroom and perform a sleight-of-nose on the Erythroxylum coca I habitually pack into my rectum before any kind of evaluation. Grinding my teeth and swearing, “Mother fucker is ON to me!” Before breaking out the window and vibrating down an exterior pipe like a drugged salamander, sprinting down the street as persons do in matters of life and death, discharging copious rivulets of sweat down my chest and into my brassiere where it pooled betwixt my breasts and evaporated into methamphetamine salts, pounding the pavement and panting like a lubricious satyr, whirling through the revolving door of an American multi-national investment company an impossible number of times before being tackled, arms chicken winged and zip tied, indignantly shouting, “I used the material on sorting networks in Donald Knuth’s definitive work on programming to vectorize a very large 2-D median filter on an image, and with a bit of creativity and multiple nested sorting networks, I was able to reuse partially sorted sets of pixels across adjacent iterations, and achieve a dramatic speedup! You can’t do this to me!” To which a female guard replied, rather cryptically, “Oh god! She bit my fucking wrist!” Howling in what seemed a register of considerable pain, off in the distance, “MY FUCKING WRIST!”
So, yes, if you’re the kind of person that gets drunk as an excuse to get totally fucking recherché with your impromptu libations, pouring out some hooch in your neighbor’s rose garden for your deceased kitty and saying shit like, “You watched me use algorithms from TAoCP for graph problems, numerics, pseudorandom number generation and analysis, sorting, permuting, and much besides. I understood less than a quarter of what I saw in those Eldritch tomes, and you, owing to your lack of language software, understood even less. But you watched me squash a giant hornet with volume one, and that is enough. You will be missed.” Then, when said neighbor, whose cataracts swaddle his photosensitive organs in such heavy gauze that the spectacle of you adulterating his collection of Sweet Juliets with toilet wine is transformed into a pastel Rorschach which belies the criminal proceedings, says, “My first data structures course, in 1970, used volume one as a text and we used a MIXAL assembler and virtual machine. When I started working in industry in 1976, all my work was in Assembly code. My how things have changed. I suppose now that, building skill in assembly code is a bit like learning Latin. It will help your understanding of computers, but has limited application, perhaps in areas like embedded software and compiler writing." Causing you to laugh nervously and hunker down, because you have no fucking idea what kind of spell the man just uttered and what you should deem threatening about the unfurling phenomenology within its indeterminate casting window, whispering, "Maurice Jean Jacques Merleau-Ponty. Maurice Jean Jacques Merleau-Ponty. Maurice Jean Jacques Merleau-Ponty." While squatting in the rosarium and blasting the soft petals of a Black Velvet into the soil with nervous pissing. Freeing you from the semantic clutches of the importunate gentleman, as he mutters, "What a lovely young woman..." Over the raincoat staccato of urinary vandalism. Then I urge you to forfeit your precious legal tender to obtain this impossibly dense weapon of mass eusocial wasp destruction in order to pretend to have read and understood it.
But if you’re invited by the title to peruse its contents as a comprehensive introduction to programming, you’d be better off getting someone to stuff your cooter full of self modifying code and hermetically seal your flatulence in Pringles cans until enough are stockpiled to uncork them in your face in perpetuity, because this ain’t it, homie. Seasoned programmers may consider this a biblical work, and rightly so, (As deep a well of discrete mathematics and programming fundamentals as one could possibly wish for. A dazzling display of the power and elegance of assembly language in the gaffer’s legendary mitts. High level evocations of floating point calculations, prime number discoveries, generating functions, binomial coefficients, number theory, memory allocation, stacks, queues, linked lists, trees and garbage collection - you think you know these?! You don’t, bitch! An extensive treatment of many common programming problems with results that guide a programmer toward efficient implementations. As menacing a cudgel as ever wielded in the service of underscoring, over and over again, the mathematical underpinnings of the field of computer science, and how eminently applicable your training in calculus and linear algebra is. As rich a set of advanced exercises and problems as has ever been codified in a rectilinear object dedicated to the physical arrangement of information in petroleum based ink. An utterly invaluable reference for understanding how the data structures and algorithms that we use every day work and why they work), but even they tend to use it as a sort of reference. Unless, once again, they’re some kind of high powered mutant not fit for mass production.
There's a (possibly (definitely) apocryphal) story about Steve Jobs meeting Knuth. The first thing Jobs said to him was "It's a pleasure to meet you Dr. Knuth. I've read all your works!". Knuth's response was "You're full of shit."
For the novitiate: You’ll have difficulty imagining what these topics mean, and what they might represent. Here I suggest you refer to other structured introductions to Computer Science. Then I suggest actual university level courses. At least then you will be able to see where Knuth’s topics and his actual content fit into your learning.
But, OTOH: If, after engaging with perhaps the most important collection of books ever produced in the CS field, you don’t understand the joke, popular among the Chinese programming community, that the second book you should read is: How To Recover From Cervical Spondylosis, then slam dunk yourself in the fucking trash. If, after witnessing the life’s work of a miraculous, cognitive giga-chad, you don’t feel a flash of nucleic heat which spurs you to dedicate years of your life to reading each volume from cover to cover and attempt all the problems contained within, (even the level 50s), you should be terminally ashamed of yourself.
Buy it, pussy!
“Premature ejaculation is the root of all evil." Donald Knuth.
Perfection itself. Every few months I have to go back to my Knuth for some forgotten analysis or modeling, and it's always a savory treat -- I know no other books so dense and overflowing with rare and obscenely useful tricks, so immense in their scope and successful in coverage thereof; there's really nothing approachable in computer science or, so far as I know, in any field (the Hilbert-Courant volumes or Thorne's Gravitation might compare, if their subjects weren't so much vaster than computing, now in only its seventh or eighth decade as a proper discipline).
Don't bother with editions other than the magisterial Third (I've collected three editions, although I've only studied the most recent) -- remember that Knuth took ten years off to develop TeX as a response to the misery of preparing and printing the First. The Third is a beauty, some of the best-bound books in my library and practically indestructible to boot (note that Volume 3 is in only its Second Edition).
Don't get me wrong: TAOCP is not an introductory guide to programming by any means, and it'd have been fantastically difficult (although possible, in a Ramanujan-like way) to learn from these books alone (try Structure and Interpretation of Computer Programs, or A Discipline of Programming, for that). Indeed, I purchased them before I could put them to full use (and while mathematically, abstractly and computationally underexperienced at 18, I wasn't a tremendous dumbass or anything). Knuth demands, requires, and with epic results justifies a fair level of mathematical sophistication (indeed, the greatest value of early exposure to these classics might be the immediate and forceful demonstration of the absolutely critical role mathematics, abjured by all too many undergraduates brought up on cheesy web programming and mind-rotting video games, plays as a Real Programmer's cynosure and primary tool). Both continuous and discrete analysis are required for following along with the text or solving most of the elegant, absolutely stunning problem sets (Knuth has put more effort into his problems than any author I know, hands down). The sedulous reader will be rewarded many times over.
I've heard complaints about Knuth's use of assembly language; I'm bewildered by these objections and find them fatuous in the extreme. A well-defined assembly language (especially on the MIX/MMIX machines, intended as they are for abstraction) is surely much simpler than the majority of high-level languages, if rather more obscure in its mnemonics. I learned assembly languages for the MosTek 6502 (used in my ATARI 400) and Intel 8086 at the tender ages of 7 and 10, respectively, and found the former a far more sensible and reasonable (not to mention powerful) ontology than an ATARI BASIC that served primarily to eat from your precious 16K of RAM. Let's face a hard truth, gentlefolk: if you can't figure out freakin' assembly language, you'd be better giving up those dreams of code and sticking to blue shirts, smiles and Best Buy's stereo department.
Just as two quick examples of Knuth's power and reach: about a year ago, I needed to set up a multisite scanning platform driven by modular FSM's, designed to perform varied scans of the IPv4 space with an eye towards isotropy. I sought to offer several different targeting schemes, and opened volume 2 wondering semi-absentmindedly "how might one enumerate 2^32 elements in a pseudorandom fashion on a 32 bit architecture?" Simply, and in O(1) state -- iterate through a linear congruence having period 2^32. The necessary constraint equations were there on page 20 or so. I coded up the generating function before lunch that day, turned it into my (awestruck) boss, and it continues even now to form the heart of our active search operations. Secondly, for a recent analysis of a multicore sort viz various cache setups, I was struggling to properly model the transactions -- I opened up Volume 3, and was blinded by 5.3.2 "Minimum-Comparison Sorting", a section I swear I've read multiple times but never thought to apply. My analysis, much finer than it could have been otherwise, was completed within the hour.
Finally, they're uproariously funny at times. Knuth's is an understated and erudite humor, but every few dozen pages he'll toss a riotous throwaway, often two or three levels of reference deep, into the middle of a pile of equations.
Oh. It's full of jokes, by the way. Just as well I didn't have my cup of tea in hand when I came upon this one:
4. [M50] Prove that when n is an integer, n > 2, the equation xn + yn = zn has no solution in positive integers x, y, z. (NB the book was published in the 1960s.)
As programmers, this is our bible, along with "A method of programming" by E. W. Dijkstra, which somehow manages to condense into its few pages most of what Knuth expresses in these three (now four) large volumes. Nevertheless, "The Art of Computer Programming" represents an absolute in terms of exposition of the process: no programmer should be without the knowledge contained within. Where Dijkstra, the European, represents a terse, quick method of thinking with huge leaps of intuition, fierce intelligence and sparse, elegant beauty, Knuth's approach is American: methodical and complete, moving gradually from one step to another in a procedural fashion. But there is room for beauty here, too, as Knuth slowly unfolds what has been percolating in his mind these last fifty years, during which he has gradually honed these volumes to perfection. Reading them, one feels as though one has become part of that journey.
The definitive work on programming; without a doubt there is no more important book on Computer Science. However, it's almost totally impenetrable. I haven't read even a quarter of this, and fully understood much less, but that's nothing to be ashamed of, as probably no one else has either. All the examples are in a made up assembly language, and Knuth invented his own typesetting system to publish it, which became widespread and famous.
The book is an excellent read, and I'm quite certain it has contributed a great deal to helping me imrpove as a professional. I can't recommend it enough, especially for SENIOR developers. I'm not sure about junior developers though.
Some people consider these books a sort of bible for computer programmers. I wouldn't go so far. A bible always assumes some form of religion. And that would make the author a kind of deity, a pedestal upon which he certainly would not want to be put. If you like to read a "bible-ish" book by Donald Knuth read 3:16.
I learned a great deal from these books. As a poor student I could only afford to buy Volume 3 (Sorting and Searching). The other two I borrowed or read directly at the library (while listening to all the Ook's around me). I bought my copy of S&S almost exactly 30 years ago*. Back then algorithms were toys for me. It was fun to play around with them, and Knuth's books helped a lot in understanding algorithms, and improving my own. Later on, after my studies, those toys became tools in problem-solving. And that's what they still are – at least to me.
Other people now use algorithms as weapons, and I'm not even talking about hackers. With the advent of "BIG DATA" the possibilities become seemingly infinite. A brave new world awaits us. A world ruled by algorithms. Blessed be Amazon, Google, and the NSA — Hallelujah!
I recommend this set of books to anyone seriously interested in the subject. It's not intended as a pop-science read for laymen. If you get this joke on the traveling salesman problem you probably qualify:
*To give you an idea of how long ago this was: In my book I found a punch-card – *pauses* – a punch card! – that I used as a bookmark. We actually had to write programs on punch-cards back then. Those were the days.
I got the first edition of this book more than 10 years back. I have read (and re-read) the series in book in parts over the years, and every time I was impressed by the scholarly mastery and precision of the author. This arguably, is `the' most important text in computer science.
AOCP, along with Computer Algorithms by Corman, Leiserson and Rivest are the first books I turn to whenever I have an upcoming challenge or interview. Pinnacle of Precision!
I'd give this book more than 5 stars if I could. If you ever thought writing a piece of code is eerily similar to painting.. or writing a poem, this is the book for you.
This is one of those sets of books you put on your shelf so that people will recognize you as a Serious Programmer. I don't know anyone who has actually READ them, other than college students who were forced to do it. I actually used it as a reference once when I was writing a sort, but then I tossed my code and used library code, because when it comes down to it, who wants to write a sort by yourself???
I've read some other stuff Knuth has written, and he's actually a pretty good author. I wouldn't start with this, though, unless you're a masochist or you want someone to think that you're a Serious Programmer.
I haven't read these all the way through mind you, but these books along with the five Fascicles make up the greatest programing reference available, not for any language mind you, but programing in general, meta-programing if you well. Algorithms galore, sorting, and searching, and etc. If your looking for a solution to a programing problem its probibly here. Required for intermediate level skill and up, not for beginners.
I remember finding this book at a university library and, having heard of it, picked it to see why was it special. The book had a profound and lasting effect on the way I had to write computer programs, both academically and professionally. A must for computer science lovers.
What's old is new again; techniques developed for Memory Drum and Tape based machines that fell out of favor are showing their worth again in data heavy and cloud based environments.
Best algorithms reference out there, though it's often quite dense & it's useful to cross-reference with something simpler, like Algorithms in a Nutshell.
*The Art of Computer Programming* is a series of books by Donald Knuth. The first volume was published in 1962, and there have been two additional volumes published since then. There were originally supposed to be 7 volumes in the series, but, after volume 3 was published in the early 1970s, there was a hiatus of almost 40 years before the first part of volume 4 was published. Recently Knuth has been publishing small parts of the second half of volume 4 in epitaphs he calls “fascicle”, but, it looks as if the other three volumes will never be published once volume 4 is complete. (A real shame.)
Knuth set out in the 1960s to write the ultimate, complete volume on computer science, but, he was sidetracked in the 1970s when he decided to write a system for typesetting computer programs, documentation, and computer books. This ultimately lead to TeX, and MetaFont, and a series of books on computers and typesetting.
Knuth decided to illustrate the problems in *The Art of Computer Programming* with a custom made assembly language, called *MIX*. This has lead many modern day programmers to conclude that the books are old, and out-of-date, but, the principals illustrated in *TAOCP* are still valid, and the series of books is still one of the most comprehensive, and accurate descriptions of the computer problems it discusses.
I still believe that the only way to understand data structures is to learn them in assembly language.
This is the book that separates amateurs from professionals. One should do their homework and sorting and search before trying to execute any programs in any kind of language.
Although the book itself is so dated there is not a better definitive description of what is required for sorting and searching which is the main core of the power of computers. Even with today’s cognitive computing thrust, cognitive programs have to still sort and search.
I periodically get this book off the shelf and cruise it to find out what it is that I forgot where to brush up on new techniques for new projects.
This book is well worth the purchase price before contemplating any new projects. After which it makes a great reference book.