Technical Books

Published July 09, 2009
Advertisement
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?
0 likes 4 comments

Comments

Ng
Hum... Yours are indeed high standards for the books, it's tough to find ones that fit!

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.
July 09, 2009 07:54 AM
DudeMiester
Thanks :D Yeah, this is the first time I've really decided to take a serious approach to blogging, so I'm just happy that it doesn't suck, haha!

I just glanced at the TOC for Expert C, and I like what I see. (Another annoyance: Amazon.ca often doesn't have "look inside the book" when Amazon.com does, so I have to check every book on both sites.) Although, I didn't start programming when I was 8, but 12 (nearly 23 now). Although, I started with C++, templates and all, so I suppose that counts for bonus points, lol. However, I'm extremely tired right now, so I'll have to give it a more thorough consideration later.

You are right that I'm a self-learner. I became that way in elementary and high school, because the education system just couldn't keep pace with me. I got into a prestigious engineering school (University of Waterloo), but unfortunately after so many years of getting A+ effortlessly, I seriously lacked the self-discipline for such a program. So I ended up leaving, and now I'm studying game programming at Humber College in Toronto.

It's been a winding road, and has come with a lot of debt. Now I can't afford to go back to university, so I have no choice but to self-study to achieve the education I desire. For the same reason, I really can't afford to buy a book for only 2 brilliant chapters right now. I'm hoping though, once I get a job after graduating, I can do a math degree by distance or part time somewhere. That would be awesome! I really want to get a masters degree in something someday, but I know it won't be anytime soon.

PS:
I know what you mean about books that make you think. I subscribe to the Communications of the ACM, and that is great for doing this. Although, often an article or book will make me start thinking, and suddenly I'll think of an idea that has nothing to do with it, haha! It's just the state of mind I suppose.

I have a thought, since I come up with many more ideas than I can implement, to start posting them here. Maybe someone will turn one into a new technique or successful organization. Either way, I think it could make for interesting discussion.
July 09, 2009 11:34 PM
Ng
Heh, when I was 23, I programmed all day, almost every day (and in the evenings, par-tey! Hehehe). Now I'm 30 and when I get home from work I can hardly look at code anymore. But it's not as depressing as it may sound, anyway - I still plow through any articles/books/whatever I can find on programming, computer graphics, game design, philosophy... This is more of a phase, really, as I've been slowly gathering momentum to do some more personal programming - ideas, algorithms, concepts.

On C++, I'd like to mention that I started with C, then jumped to C++ for the extras and now I'm back to C! The thing is, C++ is great if you focus on the task at hand and only use what you need to get the job done. After all, it is by definition, multi-paradigm, right? I can't stand people shunning off good, decent C++ code because, for instance, it's not object oriented. Or because you used pointers, yadda, yadda. If you get carried away, C++ can grow quite baroque, mind you.

And yeah, that's exactly what I meant by good reading that makes you think. My definition of "food for thought" :P.

July 10, 2009 09:51 AM
DudeMiester
The interesting thing I find about C++ is that when you really leverage it's capabilities in OOP, metaprogramming and embedded DSLs, the code ends up looking more procedural. For example, once you create some decently sophisticated linear algebra classes with overloaded operators and expression templates, the code reads like they were primitive types, while having the same or better performance (see Blitz++). What I like the most about the C/C++ philosophies is the idea that you don't pay for what you don't use, and that most the "language" is the library. That's what makes these kind of high performance abstractions possible.

Like you say, it also means that you can make some really ugly C++ code if you have a strange compulsion to always use every language facility and trick. Library writing is its own art.
July 11, 2009 05:04 AM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement
Advertisement