algorithms |
Aftersleep Books
|
||||||||||||||||||||
Art of Computer Programming Volume 2 SeminumericThe following report compares books using the SERCount Rating (base on the result count from the search engine). |
|||||||||||||||||||||
|
Aftersleep Books - 2005-06-20 07:00:00 | © Copyright 2004 - www.aftersleep.com () | sitemap | top |
Like all of Knuth's "Art of Programming" books, this one is really starting to age. Like other reviewers, I really don't like the MIX assembly examples. (MIX is a fictional computer that he invented purely for the purpose of teaching.) His rationale for using MIX is because he says that he doesn't want to just discuss topics in theory, sometimes it's necessary to show how it's actually implemented. He does this in MIX. He says that he chose MIX, rather than any actual existing machine language, so that it wouldn't be out of date or be tied to a particular platform. Unfortuanetly, there are several problems with the MIX examples:
* First, it's assembly language. I used to do lots of assembly language. (I make video games.) Now I do almost none at all. In general, very few programmers do assembly language programming. I understand how in many cases using a high-level language could possibly have glossed over some of the details. However, still, I think a language like C is sufficiently low level that he could have acheived the same results with C, and it would have been much mor readable and accessible to today's audience.
* MIX is purposely contrived to be "weird" (6-bit word size???)
* Most importantly, using a fictious computer system introduces an unnecessary extra step to understanding the examples. Not only do you have to learn the material, but you have to wade through learning MIX - information you won't use anywhere else. I know that any of C, Java, Pascal, x86, MIPS, etc would have had people who didn't know that language and so it would have been an impediment to them. Unfortunatly, Knuth has chosen a language that NOBODY knows and so EVERYBODY has this extra learning curve.
The books are also really heavy on the math. I think it's not unfair to say that these books are more math books than they are computer books. Knuth is famous for setting computer science on a mathematical foundation. He proves everything and RIGOROUSLY discusses the math behind every topic. For some readers, this is enlightening. Now I am not shy on math (I wrote a book on 3D math myself) however I usually found the detailed proofs unnecessary. I also wish he would have expressed ideas in English more that equations. For example, Knuth would never write "the elements sum to one" - instead, he'd have an equation using sigma notation. Which is consise and precise and in some sense "elegent" - but it takes a lot of mental "work" to read. I think many readers will share this sentiment.
The above comments apply to all the three Knuth "Art of Computer Programming" books I own. In general, I think there are better alternatives for most readers, and I wouldn't recommend them. HOWEVER - a slight exception could be made for this volume, because the subject matter is highly mathematical in the first place. You don't buy a book like this to avoid the math. You buy a book like this BECAUSE of the math. So if you have a need to dig very deep into the math behind random numbers, or how to multiple polynomials, or factoring, or learn a LOT about prime numbers, then this is the book for you.
An interesting anecdote on how much I have been actually able to use this book - perhaps it will help you estimate if you will get enough use out of it to justify the price tag. We discovered that the rand() function in the C library on the PS2 was buried underneath several layers of funtion calls and checks for different random number modes, etc, and it was causing a performance problem, and we needed to write a replacement. I was thrilled. Finally, an opportunity to pull the Knuth off the shelf! This book is one of the the bibles on random numbers. I looked for advice on chosing A and C for the linear congruential generator. There was SOOOO much information. (The first 190 pages of the book deal with random numbers.) It was all very facinating. Yet in the end, we dug up the gcc source for rand() and just used the numbers they chose!