Steve Barber's Java, OO & CORBA Book List

Circa February 2000

This list of books is geared to people who want to get deeper into Java and object-oriented programming; it will not be of much use for people who only want to use Java to pretty up their Web experience. I originally developed it for my students in Sun Education's Introduction to Java Programming class back in 1996 and have tried to update it since. The reach of the list has expanded as my own technical interests have evolved, but so far it all kind of fits together.

Java Books

There are a heck of a lot of Java books out there by now. The last number I saw was over 1100. I have looked through many of them, and read a dozen or so from cover to cover. Most of them are either not worth your time, or cover the same territory as the books below without as much authority or style. The ones listed below are worth the trouble unless I state otherwise.

Good first books on Java

These are good for people with C or C++ backgrounds.

First Java books for people with no programming background

THE Second Book on Java

Deeper Stuff

If that's not enough for you, here's a much more comprehensive Listing of Java Books with some capsule reviews from Elliotte Rusty Harold. If that's still not way more than enough, the mother of all Java book lists is maintained at JavaWorld magazine's site.

Object-Oriented Theory, Design and Methodology

Since many people come to Java straight from C, it's a good idea to get a background in Object Oriented Programming, Analysis and Design.

I don't claim to have covered this whole field; I am still kind of bumbling through it and am pretty unhappy with the material that's out there -- much of it is fragmentary, theoretical, dense and barely supported or field-tested. Even worse for the working developer, much of it requires serious mental effort to extract the good stuff and apply to real projects. Much OO writing seems designed to keep people in the dark; I can only assume from this that no one really understands how all the various topics in this field tie together yet, and certainly no one understands yet how to teach these concepts really well.

I've got two categories of books mixed together here: "Important" OO books, and books that have actually helped me. See if you can figure out which ones are which. I have included some important books here because even though they didn't help me work, they seem to be highly influential and I suspect that different people benefit from very different approaches to this material.

Good intro:

A very good, very comprehensive, but ultimately very odd book that is nonetheless kind of a classic OO book:
  • Bertrand Meyer, Object-oriented Software Construction, 2nd Edition, Prentice-Hall 1997

  • This book is pretty unique in that it attempts to cover the whole software development lifecycle, especially implementation, in a well-integrated way. Meyer is the name primarily associated with a very useful technique called "Design By Contract" that many other OO gurus integrate into their own methodologies. What makes this book a little weird is that Meyer's notation and framework turns out to be Eiffel, a reasonably obscure OO language. So while learning to think in Eiffel is a bit sidetracking to those of us trying to build Java and CORBA systems, Meyer's approach is so comprehensive and well-presented that OO heads everywhere ought to have it within easy reach.
    The following are methodology books; not programming. No one likes all of these, all have fierce cults surrounding them, none are easy to read, much less to apply.

    The thing to remember about methodologies is that they are not silver bullets -- they give only a framework in which to solve problems and do not solve problems on their own. Further, there are lots of competing methodologies, and some are better at some things than others. The reason I'm bothering to say this is that some people tend to learn a methodology and become religiously attached to it, and have trouble seeing its shortcomings, which there always are.

    Why bother with methodologies? Because, absent long experience and true genius, following one or the other or some combination is about the only way to really up the odds of success for OO systems design. They also give frameworks for structuring development processes.The tricky part is to figure out when the methodology is helping, and when to ignore it. Unfortunately, this knowledge pretty much only comes with experience.

    I am not by any means a guru on this topic, which is surrounded by religious wars, schisms, and beset by numerous approaches with confusing terminology. But these books have helped me understand the issues and become a decent practitioner.

    All of these methodologies have their own notations, all of which are rapidly becoming obsolete since the "three amigos" above have joined the same company and merged their notations, if not their methodologies, as UML. Notations are really languages, and each language has its strengths and weaknesses. Languages are about communication, and, to me, the most important thing about using a notation is that it facilitiates communication about the system among humans. Therefore, it's not so important which notation you use, as it is that everyone involved in building a system use the same notation.

    There are lots of books on UML by now. The best introduction is still:

  • Martin Fowler, UML Distilled, 2nd Edition, Addison-Wesley, 2000
  • The book I'm currently recommending to people who want to learn OOA&D from scratch is:
  • Peter Coad, "Object Models: Strategies, Patterns, and Applications, 2nd Edition," 1997

  • This book is refreshingly jargon free and focuses on object modelling as the central task in OOA&D. Demystification is a central and very welcome theme. Coad has a methodology in mind, but he doesn't bash you over the head with it. He teaches by example, not by lecturing. By the end of the book you have stepped through the creation of five different, substantial object models and absorbed through osmosis a method of building them that includes both analysis and design. Object models are built using Coad's own very simple notation, and the results are presented in OMT, Coad and UML notations to allow very easy comparison between the notations. Note: this book can get very, very repetitive but stick with it. The repetitions are actually teaching you something and are there for very good reason.

    Books on using Java with CORBA

    CORBA is a cross-language, cross-platform architecture for building distributed object systems. It is a set of industry standards prepared under the auspices of the Object Management Group. CORBA is the only reasonable way to integrated non-object legacy systems into distributed object architectures. Much serious development is now underway with CORBA. Building new CORBA objects is easily done with Java. The intersection of CORBA and Java has become a hot topic, and the books below present different aspects of this rich area. I have at least scanned every CORBA/Java book written in English, and if a book is not on the list below then I didn't get much from it.

    General CORBA

    If you read any of the first three Java/CORBA books above, you won't need to read a separate introduction to CORBA. However, if you find you want a broader and deeper survey of CORBA and and introduction to CORBA-style OO architecture, I find that Mowbray & Ruh's Inside CORBA, Addison-Wesley 1997, represents the state of the art, at least that part of the state of the art that's available in print today. This book also provides up to date coverage of the structure and processes of the Object Management Group. CORBA novices often wonder why many CORBA books discuss such arcane and seemingly political material, but this knowledge is essential when trying to predict where CORBA is going and also in trying to find the most recent versions of various CORBA specifications, which are generally filed under the name of the committee that last touched them.

    To take your budding CORBA design skills to the next level, Mowbray & Malveau's CORBA Design Patterns, Wiley 1997 can be quite useful, though it is not as profound as its title implies.

    Beyond these, your best source of CORBA information is the extensive archives of the OMG available through the OMG Web site at http://www.omg.org, particularly the formal OMG specifications themselves and the Object Management Architecture (OMA) Guide.

    In general, however, really good books on designing and architecting systems with CORBA have yet to be written.

    I'm also hoping that someday some insider will write a political history of the OMG, because only then will we users be able to figure out why things in the OMG specs are the way they are, and what we can safely ignore as the artifact of some long-forgotten hallway compromise, as opposed to things that may turn out to be crucial hooks in the future evolution of this fascinating technology.


    I'm always on the lookout for good books. If you know of any, please drop me a note. I'm especially looking for good introductions to OO.