Books, Books, Books...

Last week it was blogs, this week it's books. On my bookshelves I have a ridiculous number of books that cover a wide range of topics and interests. I've stopped going into book stores because every time I enter one, I end up buying more books that I simply don't have the time to read.

Most of the books on my shelf I just read once. However, there are a number that I reference repeatedly for a variety of reasons, but more often related to work (which is programming scientific applications). Below is a list, in no particular order) of 10 of the ones I've found invaluable for expanding my understanding of all things computer related. Each time I reference one of them, I realize how little I know and how much more there is to learn...

Computer Architecture: A Quantitative Approach
John L. Hennessy and David A Patterson

This book is pretty weighty (both in terms of content and size). But it provides one of the better decompositions of computer architecture from the lowest levels. It's organized nicely and breaks down each section in a way that not only presents the material, but also dispels common misconceptions (common to a computer scientist, I guess), provides alternative views and plenty of real-world examples and exercises. It comes in at over 1000 pages (including index).

Elementary Functions: Algorithms and Implementations
Jean-Michel Muller

This one was a recommendation by my friend Eric (see below). It discusses the methods and procedures for understanding and developing transcendental functions. In particular I've used this book for developing fast exponential and sine/cosine functions for many of the applications I've worked on. There is one section that gives a step by step example (for exponentials) that walks the reader through calculating fast exponentials using a variety of techniques including Chebyshev approximations. Of course if I want to do this now, I just use Maple because it's easier. But for learning it's a very useful text.

Digital Image Processing
Kenneth R. Castleman

I used to work on a lot of image processing applications. This provides one the most comprehensive overviews of image processing techniques and algorithms I've come across. The focus of the book is a combination theoretical and applied approach to image analysis, processing and implmentation. It has many great sections for image filtering, including Fourier and wavelet based techniques. A good general purpose book to have around if you deal with image processing applications or work on one.

The C Programming Language
Brian W. Kernighan and Dennis M. Ritchie

This one goes without saying. Often referred to as the K&R Whitebook. There are things that I can never seem to commit to memory (actually a lot of things). I find myself looking at this book about once or twice a week for one reason or another.

Construction of a High-Performance FFT
Eric D. Postpischil

This one actually isn't a book, but I reference it quite a bit. Eric Postpischil is one of the engineers that works on the Accelerate framework at Apple (the one I referenced above). Not only is he extremely smart, but he's exceptionally talented at communicating complicated issues in a simple manner. Most important, he has no reservations about sharing his knowledge with others freely. Although this paper doesn't provide access to Apple's code, it does show how to, from start to finish, develop an FFT implementation and then optimize it to take advantage of hardware features present on systems like the PPC, in great detail. If you are looking for insight into how experts approach optimization problems, this is one of the best references you'll find anywhere. And best of all, it's free. He just gives away this knowledge!

Digital Signal Processing Fundamentals
Ashfaq A Khan

I use this book as reference namely for its FFT section. The first part of the book actually walks the reader though how to calculate an FFT (using pen and paper essentially). Most books adopt a purely mathematical approach. And while this one does delve into the math behind the FFT (and other algorithms), the easy introduction is good for those starting out to learn about FFTs.

Numerical Recipes in C/Fortran: The Art of Scientific Computing
William H. Press, Saul A. Teukolsky, William T. Vetterling and Brian R. Flannery

Again. This one is standard. You need to have this. Even if some of the code has been superseded by modern implementations or because of hardware changes, it's extremely valuable.

The Software Optimization Cookbook: High-Performance Recipes for IA-32 Platforms
Richerd Gerber, Aart J. C. Bik, Kevin B. Smith and Xinmin Tian

This one is good and it's kind of fun. Given that we now are in an Intel world it's also pertinent. If you are looking to start out trying to understand some of the basic considerations in program optimization, this book is an excellent place to start. It covers a wide variety of optimization techniques, presents many caveats to their usage, examples etc...from a systems approach. It is geared toward VTune, but presents the general material in a very user friendly way.

Inside the FFT Black Box: Serial and Parallel Fast Fourier Transform Algorithms
Eleanor Chu and Alan George

Another recommendation. If you are comfortable with the more detailed aspects of FFTs and their implementation, this book would serve well as a reference. If you are trying to understand the various aspects of implementation this book is also good for that. It can be a bit dense reading at times, but it's extremely thorough.

Cocoa Programming For Mac OS X
Aaron Hillegass

Have to throw in a Cocoa book. This book, by Aaron Hillegass of the Big Nerd Ranch, was my entry into Cocoa programming. I actually had the opportunity to meet Aaron at WWDC 2006, when he wandered into the Science Connection (probably to get away from the Cocoa-heads at the conference and check his email in peace). Anyway, not only was he extremely nice but when I made an off-the-cuff comment about something I didn't understand, he clarified the issue for me immediately and clearly. A very good introduction, this book deconstructs the core concepts of Cocoa programming and the examples are clearly laid out and well developed.

Comments

One more for the list

Of the Mac-specific programming books, clearly the best one, and the most relevant perhaps for this list, is "Advanced Mac OS X Programming" (the 2nd edition of "Core Mac OS X and Unix Programming") by Dalrymple and Hillegass.

It might be a very interesting community project to create an open source Scientific Programming on the Mac book, going over everything from linking old C++ and Fortran 95 (etc) libraries to scientific design patterns to making use of OS X-specific application-level presentation technologies. It could grow organically, of course, but would be invaluable, especially in going into fine details on porting, etc.

One more Mac book

The recently released "Mac OS X Internals: A Systems Approach", by Amit Singh has an excellent coverage of the Mac at the system architecture level. Have a look at its home page http://osxbook.com/

Warning for numerical recepies

Just a warning: numerical recepies is known for being very buggy. I thought it has improved a lot since the first edition came out, but even in 2003 (when I used it) I found a couple of bugs. And a couple of days ago, someone confirmed to me that NR is still famous for being buggy.

If you want to know about the algorirthm and study them then it's great, but if you use it (and I am not suggesting it's a bad book) be very careful: often when looking for a bug, the code given by such a famous book would be the last place where one would check.

Diego