What's on Ted's Bookshelf?

Several people have asked me for a list of "recommended reading" on several subjects within Computer Science. I've promised this list so many times, I finally gave up stalling and decided to create one. :)

Please note that these recommendations are entirely personal--there are some books I recommend quite strongly, because I enjoyed reading the book or found it to be thoroughly educational. (One or two are on the list because I wrote them or helped in their creation--fair warning!) This is not to claim that my preferences are in any way scientific or based on some kind of poll; it's my personal recommendations, nothing more. If a well-known book isn't on the list, however, you can safely assume that I've looked at it (I do a LOT of shopping at bookstores), and I didn't care for it, didn't think it really added anything to the volume of material out there already, or felt the authors' opinions or facts are misplaced. (I'm an opinionated guy, I admit it.)

By the way, the books I've had a hand in show up in brown. That way, you can be forewarned about my inherent biases. :)

Note that the list is far from complete; it'll likely be incomplete for a very long time, as I've got a LOT of books on my bookshelf, some of which I want to share with you, some of which I want to warn you away from. :)

I've arranged the books by subject. Books whose title show up in red are books you should read, regardless of technical bent (Java, .NET, whatever):


Patterns and design books

Patterns are an interesting concept in software design, modeled after architectural (as in buildings, not software) patterns first described by Christopher Alexander in his book "A Timeless Way of Building". In essence, a software pattern describes a solution to a problem with certain forces to yield a set of consequences. By examining the set of patterns, and comparing our own problems and their forces, we can benefit from the experiences of those who've "been there before", regardless of domain.

Unfortunately, too many patterns books (including one semi-popular 3-volume set of books on patterns in Java) focus too much on the "solution" aspect of patterns, and ignore the "forces" and "consequences" parts, which I believe are by far the most important areas of any pattern. An easy way to tell if a patterns book falls into that category is to examine the "consequences" section of any particular pattern--if there's no negative consequences to the pattern, then the author doesn't understand the Zen of patterns.


Java books

Java, from Sun Microsystems is many things, all wrapped up under a single marketing term, "Java". It defines a language, a virtual machine, and a set of libraries, all for creating general-purpose programs that stretch from the Palm Pilot PDA to enterprise applications that run on massive servers.

One of Java's core principles has, from the very beginning, been "WORA", an acronym for "Write Once, Run Anywhere"--the idea that Java code, once compiled into .class files, will be executable on any platform that has a Java Virtual Machine installed on it. Unfortunately, this promise turned out to be far less feasible than originally envisioned, and Sun was eventually wise enough (perhaps "forced" would be a better term?) to break Java into three separate platforms: Java2 Micro Edition, Java2 Standard Edition, and Java2 Enterprise Edition.

The books below will be mostly J2SE- and J2EE-centric, reflecting my general preference for doing enterprise-level software. I've tended to focus more on aspects of the JVM, as well as on networking and enterprise-level software.

Java General-Purpose

Java Networking/Remoting

  • The Jini Specifications (2/E) by the Jini Team Jini is one of my "hot topics" right now, and this book is the single dead-trees version of all the current (as of Jini 1.1) specifications. It's not easy reading, probably best read after another, gentler introductory (Jini is not simple) Jini book.
  • Java RMI by ??? (O'Reilly) A good book explaining the nuts-and-bolts of the Java Remote Method Invocation protocol and stack. Essentially, one can view RMI as nothing more than "sockets, serialization and classloading", and this book takes an approach not too far from that; it first introduces streams, then serialization, talks briefly about ClassLoading, then brings RMI into the picture and shows how RMI builds on top of these concepts. If you're doing something with EJB and/or Jini, you need to understand RMI, and this book is a good place to start.
  • In-progress

    The following books are still on my "in-the-process-of-reading" list:


    .NET books


    COM books

    Why learn something that's already been obsoleted (by .NET, in this case)? Because COM, the Component Object Model, was the first technology platform to eschew components over objects, and its components that we're all interested in building these days. Reading and studying COM, even if you never actually have to use it in production code (I haven't), helps gain a deeper understanding of what component-oriented systems (like EJB or .NET) are trying to do.


    Win32 books


    C++ books


    PalmOS books


    Miscellaneous books

    Security

    Networking

    Last updated 20 Dec 2001