The Art of Computer Programming - eBook
informit.com
informit.com
For many years I've resisted temptations to put out a hasty electronic version of The Art of Computer Programming, because the samples sent to me were not well made.
But now, working together with experts at Mathematical Sciences Publishers, my publishers and I are launching an electronic edition that meets the highest standards. We've put special emphasis into making the search feature work well. Thousands of useful "clickable" cross-references are also provided --- from exercises to their answers and back, from the index to the text, from the text to important tables and figures, etc.
The first fascicle can now be ordered from Pearson's InformIT website, and we expect to release thousands of additional pages next year.
Not well made? It's a book that is a PDF at some point before it hits printing presses. What is there to make at all? The kindle has been out for how many years? how is the book so different when reading it on an e-ink display? He mentions that shortcuts were added, but still - how is it worse than a printed book (there are no links there either).
This seems disingenuous.
Also, most devices have zoom/text size capability, and PDFs don't play nicely with that, nor do they really work well with image placement on screen. When you bear in mind that a weighty technical tome like TAoCP has lots of equations, and equations use lots if images, it all gets pretty ugly when you're stuck with a fixed-form PDF.
Additionally, Pearson/InformIT have chosen to enhance the layout of each page by discreetly reminding the reader of their full name.
For anything technical (computer science/maths) I only buy an eBook if there's a PDF version available (a PDF that looks like the print edition). I've had nothing but bad experience with reflowable formats such as EPUB with technical books. Equations and graphs are stored as low resolution images, any complex layout (floats for example) has to be turned into a strictly linear flow, etc... A vector PDF, on the other hand, is infinitely scalable, so you can zoom in on graphs and equations without any loss of quality.
You have to not only figure out what format to release in, but also deal with various screen formats and linkages.
Sure you can release a version of the master file relying on the software's search feature and make your user deal with the formatting, but it will look bad in nearly every setting.
Note that this is especially true of ebooks which don't have responsive displays and need to be formated for to display as you would expect. You cannot simply throw a PDF with arbitrary dimensions and get good results.
Yet, that is exactly what they did.
That's why it's disingenuous.
It sounds to me like Knuth wanted something that wasn't just a straight up text dump of his book. If you're going to bother exporting your book to an interactive format, it makes sense to do it in such a way that it takes advantage of that format.
Just anecdotal information : my Kindle regularly reports the infamous "Low memory" error and closes down the book when I try to read my 8 MB copy of "Programming in Scala, 2nd Edition". It definitely detracts from the reading experience, especially knowing upfront that you can read only a few pages before you hit the dreaded error.
I suppose Knuth's book would be equally, or more, "heavy" and the Kindle would choke on the pdf versions.
It's a monster of a problem, which still isn't solved. As good as TeX/LaTeX is at handling paper sizes, the screen sizes / DPIs / pagination / font sizes of eReaders is a far more difficult platform to target.
Instead I'd suggest a good succinct explanation of Big O notation to be digested and promptly forgotten (anybody who studied calculus should have intuition for it anyway, it just nicely ties in to the "cost" of the code they'll produce) and straight to scripting in Python with them. :)
http://www.amazon.com/Lisp-3rd-Edition-Patrick-Winston/dp/02...
It's good reading if a person is fascinated by the subject. Otherwise it will be very very dry. Among the otherwise's, would be someone hoping to pick up a language or someone who wants an introduction to programming. With a math degree, you should not struggle with the math.
As a CS book, it teaches a lot of good CS concepts and techniques very thoroughly, and it analyzes the performance of algorithms very precisely. You'll not only use Big O notation, but you'll also figure out some of the constants. So, if your interest is in computer science proper, then this is a great introductory book.
On the other hand, if your goal is to be able to write programs, then definitely jump into using a language. Go find a book on a language and just start using the language to solve problems. After you get past the basics of programming, you'll start to see all the applications to math (especially discrete math). I've heard Structure and Interpretation of Computer Programs is a good book, and I plan to read it next semester, so maybe that's a good one for you. It uses Scheme (a Lisp) as the programming language, so the parallels with math are very clear.
It's challenging, where "challenging" means that it requires living with some bewilderment and frustration while reading it. And anyone who is not as smart and knowledgeable as Knuth will probably experience both to some degree because what makes tAoCP great is that Knuth doesn't dumb anything down.
Over the years, I've found that tAoCP works well without having to dig deeper into the math [or MIX] than I am able or interested in diving...the abstractions are laid out well and understandable as abstractions without getting buried in algorithmic analysis...though the analysis can be interesting.
My take is that if someone is serious enough to try to tackle it, it will give back more than the effort put in regardless of the person's computer science background.
No, absolutely not.
Knuth attempts to build the discipline more or less from the ground up, using a mathematical perspective, and he actually more or less succeeds. The resulting books are awesome as references, but they're incredibly information-dense: not beginner-friendly at all.
But learning computer science can be much different than learning software engineering. If you want to learn algorithms analysis, I would suggest you read, in order, Sipser and then pick and choose parts of CLR+S. This will give you a good overview of what is important and how proofs of correctness and complexity analysis are done.
In Knuth's book you learn about and work with the details of how computers work that Mathematica handles itself and explicitly hides from you. If you ever wondered, for example, how Mathematica might store a matrix in memory, or why when you evaluate 1/.99999 it returns .00001, but if you add one more 9 to the denominator it returns 1., then Knuth's book is a good one to turn to.
Knuth does not use a high-level language to describe computations--instead he uses a made-up computer called the MIX 1009, which has its own machine language. He came up with 1009 by taking 16 of the machines at the time and taking the average of their numbers (360, 650, 709, 7070, U3, SS80, 1107, 1604, G20, B220, S2000, 920, 601, H800, PDP-4, and II) He also points out that you can derive the same number by taking the name as Roman numerals. If that makes you laugh, you will also find it to be a deeply funny book.
If you want to learn about Algorithms and Data Structures and you have a strong math background, then CLRS is the book to get: http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...
An undergraduate CS curriculum will mostly cover the parts I-VI of the book (that's around 768 pages) plus a few chapters from the "Selected Topics Chapter" (we covered Linear Programming and String Matching). Mind you, this book is very theoretical, and all algorithms are given in pseudocode, so if you don't know any programming language, you might have to go with a an algorithms textbook that is more practical. In my DS course we had to implement a Red-Black tree and a binomial heap in Java, and in my Algorithms course we only wrote pseudocode.
Maybe Sedgewick's (Knuth was his PhD advisor!) "Algorithms (4th ed)" will be a better choice for a beginner, as it shows you algorithm implementations in Java: http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewic... (If you decide to go this route, you might as well take his two Algorithms courses on Coursera, they will really help).
There are also a bunch of Python-based introductions to computer science which have a broader focus than just teaching specific data structures and algorithms. Some of them emphasize proper program design, debugging and problem solving. I haven't read any of them, so I can't vouch for them, but here are a few of the more popular ones:
* http://www.amazon.com/Introduction-Computation-Programming-U...
This book was written to go along with John's edX course: https://www.edx.org/course/mitx/mitx-6-00-1x-introduction-co...
* http://www.amazon.com/Python-Programming-Introduction-Comput...
Oh and btw, there's also the Theory of Computation, which is a major part of CS theory. Here are a few MOOCs and recommended books on the subject:
MOOCS:
* https://www.coursera.org/course/automata
* https://www.udacity.com/course/cs313
Books:
* http://www.amazon.com/Introduction-Theory-Computation-Michae...
Sipser's book is probably the best introduction to the theory of computation, and I believe its last chapter deals with Complexity theory as well.
* http://www.amazon.com/The-Nature-Computation-Cristopher-Moor...
I loved this book very much. It has a very informal and conversational style (don't let it fool you, the problem sets can be HARD).
* http://www.amazon.com/Computational-Complexity-A-Modern-Appr...
Once you are familiar with some computation models, its time to study computational complexity and this is one of the best books on the subjects. It is used both for graduate and undergraduate courses.
edit: apparently this isn't the correct version, my mistake!
.multicol-column {
-ms-word-break: break-all;
word-break: break-all;
word-break: break-word;
}
Very strange!Oddly enough, it's not published on iBooks.
Does Volume4 have MMIX code for all algorithms presented?
For context:
Knuth created TeX.That's the postscript version of an unmaintained version. You can probably convert it to pdf and it ought to be similar (sans links, errata fixes and other changes) to the purchasable version with respect to the math layout.
who is the right audience, and what would be a prerequisite reading
No misleading intended, but I apologize for it coming across that way.