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
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?
I have Real Time Rendering from Moller & Co. (both 2nd and 3rd editions, and I've read the 1st), in my opinion the best single volume reference for CG techniques/theory/whatnot. I've implemented lots of stuff based on what I read there - wherever the text is terse, the references (abound) promptly jump in to fill any gaps.
The best texts for me are the ones that can stimulate my mind to the point I go around thinking about the subject for quite some time after reading. I really don't mind if it's a paper, a book, some wikipedia article or whatever. Some of the books I have would probably fall short of the criteria you've established, but I believe there's always *something* to learn from them. Maybe a chapter or two of brilliance. Of course, if there's a problem acquiring lots of books just to get some 15-20% of real value, you're on the right track!
Do you like the C language? If you're at home with it, try Expert C Programming by Peter van der Linden. It's not for learning C from scratch, mind you, it's more like "I've programmed since I was eight, I know this shit!" and then you grab this book and learn that there's always something more to it.
About your journal so far, I've been enjoying it for some time. I'm "educated-guessing" you're quite a self-learner, just like me (and like many others here at gamedev). I think it's part of the spirit of this place - even if you get the answers to your questions, it's never quite enough. The kind of restlessness that makes you go ahead and find more questions.
Keep up the good work and don't forget to write about it.
M.