Some say they are without merit in this digital age, but I find that for highly technical topics they are still useful. True, you can read many papers and presentations online and acquire the same information, but that takes more time. A good book offers the same information in a condensed form. Yes, some there are survey papers out there that serve a similar purpose, but they are not as expansive as a good textbook, and you can't always find one that suits your interest. Not to mention the fact that books work without power, computers and even come with their own screen! :P Of course, products like Kindle are bridging this gap, but not everyone has access to that (i.e. Canadians like myself) and many speciality books are not available on it. Therefore, I believe books are still a worthy investment.
With that in mind, I'm trying to build a list of books I would like to have in my personal collection. I'm looking for texts that are comprehensive in their topic, but not so broad that they can only half-explain things. Certainly, they can be superficial if there are prerequisite concepts to a given topic and there isn't enough pages to explain them, but they should be intentionally so. They should defer these ideas to other materials that treat them directly and with the depth required, and give recommended reading. If a book starts going past 1000 pages, the author is likely isn't doing this and is probably getting carried away. Such a treatise may never really be finished in the author's lifetime (call it Donald's Dilemma). It's a noble goal, but ultimately yields something less like a book and more like a blunt weapon. I prefer a book that treats a manageable set of topics, and does it well.
I also want the book to be to the point, only including examples when they are the best way demonstrate an important concept or note a non-obvious application. This doesn't mean the book is dense and unapproachable, only that it recognizes your ability to reason with and creatively apply the ideas it discusses. The point of a book is to learn from it. A barrage of examples only encourages rote memorization and wastes paper. I neither want a book that assumes you know everything already by using opaque and ultra-dense terminology. I can read scholarly journals for that sort of masochistic indulgence. :P What I really want is a book that keeps me thinking by building up new ideas at a brisk pace.
I believe a good technical book should also be reference worthy. I don't care for a collection of best practises, common sense and opinion, because that can be found freely online in massive quantities. More easily, it can simply be deduced. Even if your thoughts are backed by hard data, just say what it means instead of waxing lyrical about it... Well, unless you're writing "Coding Practises in Iambic Pentameter", haha! Of course, I make exceptions if the book is a particularly compelling, definitive or authoritative collection of subjective discussions.
The most important thing, I don't want a book that shies away from abstracts. I need to know the fundamental principals and abstract concepts that are behind any given technique or idea. That's how I remember and learn things. My mind is like a vast network of concepts that I sample and compose into concrete ideas and methods. I don't expect the book to explain them all, just say what they are please. It annoys me to no end how many engineering textbooks simply state "do it this way", show a few examples to prove it works, and move on. Another one I often see is, "The reasons it is done this way are obvious." Is it so hard to simply note the ideas they are building upon?
Here's a concrete example of what I mean:
I was reading about linear recurrence relations with constant coefficients in an engineering math book I have. One of the steps in solving them involves finding the roots of the characteristic polynomial. It shows you how to do it for 2nd order recurrences, but it doesn't state why you are using those roots or any other significance they have.
After some thought, I realized that it was because using these roots you can split the constants in the recurrence up, such that you can rearrange and remove a variable from the relation. Doing this repeatedly to remove all but one variable will solve it. I reasoned that this process could probably be condensed using linear algebra constructs. A look at Wikipedia confirmed this, and revealed to me the relationships between recurrence relations, eigenvalues/vectors and linear differential equations. This is a powerful association that improves both my understanding and recall of these ideas.
However, I must note that relying on Wikipedia is unacceptable for advanced topics, because it's often impenetrable, disorganized, incomplete and confusing. Eventually I can parse it, but it takes an excessive amount of time. This is why I want to get some good books, to save time. My engineering math textbook could have done this if it just said something like, "Such-and-such property of polynomial roots enables rearranging the recurrence to remove a variable. See this-and-that for details." That is what I want the book I read to do. I want it to help me see the "big picture".
Far too often in technical education is the rote memorization of basic rules and mechanics stressed. I believe that one needs to bind these mechanics together with the abstract concepts and transforms that connect them. This shouldn't be done "in the future when you know everything", it has to be reinforced each day. If one starts with a few basic mechanics and attaches them to a larger conceptual framework, retention and interest will be far greater. I find the current state of technical education is like showing someone all the parts of a car one at a time, but neither the car itself nor each part's place in it. It's absurd.
In any case, my present interests lie primarily in computer graphics and physics, math, software engineering and management, and general computer science. I'm looking for the most definitive and/or informative texts in these areas. I have a high standard because I don't have much money to spend.
The books I've bought so far are:
- Real Time Rendering by Akenine-Moller
- Real Time Collision Detection by Christer Ericson
- All the Mathematics You Missed: But Need to Know for Graduate School by Thomas Garrity
I chose these because they seem to be held in high regard, and they cover a very interesting but focused range of topics. I must also say that the Morgan Kauffman Series in Computer Graphics seems to be very interesting as a whole.
As for the list of books I still want, I'm developing it on my Amazon Wishlist
. Be aware that I added a bunch of books recently, so it needs some trimming right now. I may move the list to some other medium at some point, so I can include freely available books and important papers also.
One problem I have making this list is that there is no technical library or book store near where I live (Brampton, Ontario). I have to go about an hour to Toronto by transit to the University of Toronto's engineering library, and I can't take out any books because I'm not a student. I'm also too busy with work and such that I can only practically go out there on weekends. It's not easy for me to view and evaluate them before buying. For the most part, I end up relying on the opinions of others, reviews, and the pages I can see on Amazon or Google Books. Also, I mainly use Amazon's recommendations to explore what's out there.
Compounding this is the fact that I don't have enough associates or friends with the same technical interests. I am not in university or graduate school, nor am I ever likely to be. Neither do I have any degrees, though I've done 2 years of a 3 year college diploma. However, I don't think that's an excuse not to self-educate myself at a high level, and I seem to manage just fine. MIT's open courseware is also helpful with this. Plus, regardless of your background, continuous learning is a must!
My question for the readers of this blog is simple: Are there any? :P Seriously though, what books for computer graphics/physics, math and software engineering do you recommend and why? What do you think of my thoughts here? Are there any books, articles or papers you know of that fit what I'm looking for?