(If you're looking for recommendations on Java books, I've got a page here that lists some strong contenders.)
There's a fair amount of stuff here (since I keep adding material when I realize I've forgotten a book I like), so I've organized it by category:
I've provided brief descriptions of why I think the books below are great;
you can click on the cover image to jump to the book's page. Please help
support this web site by buying your book on
Patterns of Design
Perhaps surprisingly, if you're unfamiliar with the patterns movement,
the first three books below have nothing to do with software! Chris
Alexander is an architect who first espoused the notion of patterns in
the context of the design of physical places. This work was later
inspirational to the software patterns community. The fourth book,
Design Patterns, is the bible for software patterns by the "Gang
of Four" of the patterns community (Gamma, Helm, Johnson, and Vlissides).
I highly recommend the software book if you want to start exploring
patterns for your own work. If you're interested in some of the inspiration
(or are curious about architecture), the Alexander books will fit the bill.
The books below are all important reading in the field of software patterns--the notion that software development produces common idioms of expression. By recognizing, understanding, and cataloging these idioms we can write better software.
Perhaps surprisingly, if you're unfamiliar with the patterns movement, the first three books below have nothing to do with software! Chris Alexander is an architect who first espoused the notion of patterns in the context of the design of physical places. This work was later inspirational to the software patterns community. The fourth book, Design Patterns, is the bible for software patterns by the "Gang of Four" of the patterns community (Gamma, Helm, Johnson, and Vlissides).
I highly recommend the software book if you want to start exploring patterns for your own work. If you're interested in some of the inspiration (or are curious about architecture), the Alexander books will fit the bill.
The first in Chris Alexander's series, The Timeless Way of Building
introduces the notion of patterns in architecture through a set of
examples. Alexander's (somewhat Utopian) vision is that we can
recognize, exploit, and then design in patterns that provide functional
benefits to the people that reside and work in our structures. The
patterns that are present in a space--whether put there knowingly or
unknowingly--can help bring create a sense of community. In the past
few years, the computer science community has seized on the idea of
patterns as a fundamental notion in software development, inspired by
Alexander's work. The principles of patterns have also been the main
organizing tool for the Jini Community.
The second in the series, A Pattern Language presents a catalog
of patterns--what Alexander calls a language--that represent common
features in architecture. These features aren't low-level constructs
like archways or columns, nor are they simple aesthetic embellishments.
They're higher-level systems of parts that serve some particular role
in the lives of the occupants of the structure. This book is a catalog
of architectural patterns; but even if you are not interested in
architecture per se, the form of the book still serves as an excellent
prototype for the various software patterns catalogs that have since
become available (see Design Patterns below).
The third book in the series, The Oregon Experiment presents a
case study of a university campus design, informed by Alexander's notions
of patterns. Of the three, this book is the one perhaps most closely
tied to architectural practice, and therefore of the least utility to
software developers. I'd recommend it if the previous two caught you
up in Alexander's ideas as they relate to architecture, but if you're
looking for background in software patterns, this is the one to skip.
The "Gang of Four's" book on design patterns in software is a classic,
and should be required reading for any object-oriented programmer. This
book is perhaps the most important text in the software patterns community.
The first part of the book provides some rationale behind the notion of
patterns (in case you want to skip Alexander's books), and covers
patterns as a higher-level organizational and compositional structure
than objects. This is all great material, but the real value of the
book is in the second part, which provides a catalog of patterns that
will be useful--and many will be recognizable--to any O-O programmer.
If you haven't been exposed to patterns, this book will be a great
resource, and may change the way you think about programming.
The next two books deserve some explanation as to why they're in this category. One of the things that current interfaces usually do a lousy job of is representing time. Most GUIs provide a window into only the current, instantaneous state of our applications. Most approaches to representing time (animated movies, state change graphs, etc.) are either clumsy to interpret, or clumsy to search. In contrast, comic book artists do an outstanding job of representing time in an easily-comprehensible way: you can page (browse or search) through a comic book quickly, salient information stands out, and so on. Part of this is due to the medium itself, but largely it's due to the sets of symbols and styles developed by the artists, and to which we've become attuned. Understanding Comics is a guide to these symbols and styles, written in the form of a comic book. It's an easy read, but there's an astonishing amount of depth here. Highly recommended for interface designers as well as those who just want to understand the subtle magic that's being worked on them by comic book artists.
Michael Polanyi's book, The Tacit Dimension, is one of the inspirations of the ubiquitous computing work at Xerox PARC. Polanyi's text discusses what it means for information to be tacit--that is, implicitly understood and usable, rather than explicitly and consciously thought about. The oft-missed idea behind ubiquitous computing isn't simply that small devices will be available everywhere in our surroundings. It's that by integrating themselves into our environments, they will fade into the periphery, becoming tacitly accessible to us. Be forewarned that while Polanyi's book is thin, it's also quite dense.
There are three books in Edward Tufte's amazing series on visual
information design. Don't be put off by the boring titles; these books
have been called the "Strunk and White" of information design. And
they're as visually appealing as they are informative.
The Visual Display of Quantitative Information
, deals largely with visual charts, and provides a set of principles
for creating representations of data with clarity and integrity.
Computing Reviews calls it "the century's best book on statistical
, is an even more visually appealing volume, which deals with
maps, color, and a broader range of "visualizations" of information than
simple graphs. This one is my personal favorite...and it's beautiful
enough to make a good "coffee table" book.
Finally, the third,
Visual Explanations: Images and Quantities, Evidence and Narrative
, which came out only a couple of years ago, deals primarily with
representations of dynamic data.
All three of these books are visually stunning, and at least the first
two have already made it to the status of modern classics.
An outstanding book on the form of comic art, written in the form of
a comic book. While definitely not a UI book, I think it has important
implications for interface design. The magic of this book is that
even if you don't care about comics, it'll give you an appreciation
for the craft of comic art. If you do care about comic art,
this is probably the best book available to guide you through the
subtle cues that artists use to carry the story (hence the subtitle,
The Invisible Art). Highly recommended.
Philosopher Michael Polanyi's book explores tacit knowing--the
unaccountable, inarticulate component of knowledge that is acquired
experientially, rather than by precept. This is knowledge that is
"personal" or "subjective"...in contrast to the purely exteriorized
(and exteriorizable) forms of knowledge espoused by objectivism. This
book is one of the philosophical bases of ubiquitous computing. UbiComp
aims to make computation available within this tacit dimension
(so that it is always available, often unspoken, and seldom consciously
acknowledged), rather than by the usual visual, focused, attention-centered
forms taken by current computers.
The subtitle of this book is Social Meanings of a New Technology,
the new technology in this case being electricity. This book is
an engrossing--and often hilarious--account of the introduction of
electricity in America and the attempts to apply the technology to
new uses. Example: "light girls," who were servants employed by the
wealthy to wear shoes with metal plates and walk on conducting "outlets"
embedded in the floor. Their job? Circulate through a soire
wearing light-emitting clothing, bringing illumination to partygoers.
Louis Bucciarelli's book looks at the engineering design process--how
artifacts are designed and built--from a social perspective. Far from
being some sort of idealized, individual process, design is (big
surprise) completely interconnected with and influenced by the social
setting in which it occurs. Negotiation, uncertainty, and ambiguity all
influence the myriad individual decisions that constitute the design
process, and affect the final result. Good reading if you're curious
about the process of design, or are a practicing engineer.
If you've never read the history of the HMS Bounty and her crew, you
owe yourself to learn about it. This book captures the Bounty's history
(all the way through the crew's time on Pitcairn Island), but is
much more. The central thesis here is that Bly was the victim not of
his own bad captaining, but of his lack of understanding of the
Royal Navy as a place of theater, pomp, and circumstance. You can
read it for the history or read it for the ethnography, but either way
it's an excellent book.
This book is a cultural study of Disney World consisting of a number
of essays on the park and its inhabitants. Published by Duke
University press, the book can tend toward academicspeak. But even
if you're not interested in cultural studies, the anecdotal
tales--particularly from the chapter on "Working at the Rat"--make for
Lakoff and Johnson's book is an exploration of metaphors--not just as
a linguistic construct, but as a fundamental basis of how we experience
the world. The book presents a precise theory of metaphor and the way
our cultures and experiental realities are defined by the metaphors
The authors are professors of linguistics and philosophy
(respectively) but, perhaps surprisingly, the book is an easy and quick
read for even an interested layman such as myself.
This book is an investigation of human behavior, and how we appear to
others. It's full of fascinating examples of behavior--both accepted
and outside the norm--drawn from various human societies. Goffman's
main tactic is to frame our presentation of ourselves in the terms
of theater. Captain Bligh (above) would have done well to read this
book before setting foot in the Bounty...
Winifred Gallagher's book looks at how place--our surroundings
and environment--affect our behavior, mood, and lifestyle. Gallagher
is a journalist, not an architect or psychologist, but she manages to
condense an amazing amount of material into a thin and easily-readable
volume. A fun, easy read for people who care about where they live
and work, and the architecture around them.
Definitely not a beginner's book! But if you're an experienced C++
programmer, James Coplien's book is an invaluable reference to a set of extremely
useful--and very C++ specific--idiomatic uses of the language. The
techniques here provide ways to implement program features not directly
found in the C++ language (such as "virtual" constructors, and
"polymorphic" objects which have can (appear to) change their
implementation types after construction). This book saved my butt.
Scott Meyers' book is more suitable for C++ beginners and intermediates
than Coplien's, above (in fact, I'd say it's required for
beginner and intermediate programmers). A more accurate title might
be, "Here are 50 ways you're likely to screw yourself with C++, and
how to prevent them." It's thin, it's informative, it's essential.
Meyers' has a new book called
More Effective C++, with 35 more specific tips, but I don't
do C++ anymore so I haven't read it. :-)
The first and most famous book of PARC's history. Fumbling the
Future has long been out of print (Xerox-orchestrated conspiracy?)
but has recently been re-released. It's a great read, albeit
a disheartening look at how difficult it is for an existing corporate
culture to bring about radical change in the face of technological
innovation. I'm not sure why this book was ever out of print, and I'm
not sure why it's back now, but it's an engrossing read.
Dealers of Lightning is a more recent history of PARC and its
involvement with the Alto personal computer. It also "goes a little
easier" on Xerox management at the time (some have said it lets them
off the hook). Dealers of Lightning makes a flashy counterpart
to Fumbling the Future, above.
The PAIR (PARC Artist In Residence) program is a coupling between
technology-savvy artists and art-interested technologists at the Xerox
Palo Alto Research Center. PAIR is predicated on the belief that artists
should be engaged in the design and creation of digital media, rather
than simply consumers of whatever is "tossed over the wall" by engineers.
This book presents the history of PAIR and looks at a half-dozen
or so of the past PAIR projects.