My Favorite Programming Books

Attitude

Mr. Bunny's Big Cup o' Java.
Carlton Egremont III. Addison-Wesley 1999.

"...the official place to go when you simply must go someplace official."

There is simply no better way to learn Java than to have the pineal gland of an expert Java programmer surgically implanted in you brain. Sadly, most HMOs refuse to pay for this career-saving procedure, deeming Java to be too experimental. At last there is an alternative treatment for those of us who cannot wait for sweeping health care reforms.

Visit Mr. Bunny's Home Page at http://www.mrbunny.com

Just Java.
Peter van der Linden. SunSoft 1996.
(Out of print. Later edition shown here.)

General Introduction to Java and One-Day Orientation.

Includes step-by-step instructions for folding the Origami Kamikaze water bomber.

http://www.afu.com/

Design

Java Look and Feel Design Guidelines.
Sun Microsystems, Inc. Addison-Wesley 1999.

OK, this is official. Really, really official. Note the logo. A wholly owned subsidiary.

Nevertheless:

This book does not provide detailed discussions of human interface design principles or the design process...
For authoritative explications of human interface design principles and the design process, see Macintosh Human Interface Design Guidelines.
http://java.sun.com/products/jlf/dg/index.htm
Macintosh Human Interface Guidelines.
Apple Computer, Inc. Addison-Wesley 1992.

OK, they stole it all from Xerox PARC. So what. They were the first to steal it.

You'll want this book primarily for the first chapter, "Human Interface Principles." Buy it for that alone, unless you really plan to write Macintosh apps.

Even better than this over-priced and ego-laden rewrite, find an old copy of Inside Macintosh, Volume I. It has the same chapter on principles, along with the quaint feel and musty odor of a real historic document.

http://devworld.apple.com/techpubs/mac/HIGuidelines/HIGuidelines-2.html

Refactoring: Improving the Design of Existing Code.
Martin Fowler, with contributions by Kent Beck, John Bryant, William Opdyke, and Don Roberts. Addison-Wesley 1999.

What is Refactoring?

Changing the internal code and structure of a software system without altering its external behavior. Cleaning up code in a disciplined way that minimizes the chances of introducing bugs. In essence, improving the design of the code that you (or your predecessors) have already written.

How, in other words, to turn a Rube Goldberg contraption into a Mercedes Benz.

Mr. Fowler maintains a web site at http://www.refactoring.com/

UML Toolkit.
Hans-Erik Eriksson and Magnus Penker. Wiley 1998.

You'll need at least one UML reference.

Eriksson and Penker beat Booch and Gang to the press by at least six months. I couldn't wait for them, and, in retrospect, I'm glad I didn't. I like this one better.

Comes with a CD full of obsolete versions of trial software. Don't worry if it's missing.

Patterns in Java, Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML.
Mark Grand. Wiley 1998.

The Gang of Four translated into Java, with a few of Grand's own patterns thrown in. If you don't know patterns yet, it's time you learn. The more you learn, the better you'll code.

Mr. Grand has a web site at http://www.mindspring.com/~mgrand/

Patterns in Java, Volume 2.
Mark Grand. Wiley 1999.

More patterns--GUI design, coding, optimization, robustness, and testing. Grand's own, mostly.

Mr. Grand has plans for Patterns in Java, Volume 3.

Data Model Patterns: Conventions of Thought.
David C. Hay. Dorset House 1996.

David C. Hay took his degree in philosophy, and brings the rigorous logic of that discipline to bear on the problem of data modeling.

This book is based on the assumption that the underlying structures of enterprises are similar ... ... widely differing organizations, from government health protection agencies to oil refineries, have many similar components.

An analyst who has these components in his intellectual tool kit is in a good position to grasp quickly what is unique about an enterprise and to draw a data model that both embodies universal truths and specifically represents the business at hand.

A data model that "embodies universal truths?" Yes! In an ambitious final chapter he presents his Universal Data Model which "covers all things in the Universe."

The Algorithm Design Manual.
Steven S. Skiena. Springer-Verlag 1998.

From the back cover:

... a unique catalog of the 75 most important algorithmic problems. By browsing through this catalog, readers can quickly identify what their problem is called, what is known about it, and how they should proceed to solve it.
Now if only I had time to read it!

Visit Mr. Skiena at The Stony Brook Algorithm Repository

Java in General

Java in a Nutshell, Third Edition: A Desktop Quick Reference.
David Flanagan. O'Reilly 1999.

The single best introduction to the Java language. In this third edition Mr. Flanagan no longer assumes that the reader comes to Java from C++.

http://www.davidflanagan.com/

Java Examples in a Nutshell: A Tutorial Companion to Java in a Nutshell.
David Flanagan. O'Reilly 1997.

The Missouri approach: Show Me.

Now available: Java Examples in a Nutshell, 2nd Edition.

You can download all the example code from O'Reilly.

Java Language Reference, Second Edition.
Mark Grand. O'Reilly 1997.

A language reference manual with user-friendly BNF notation.

Mr. Grand also wrote the Patterns in Java books, mentioned above.

Mr. Grand has a web site at http://www.mindspring.com/~mgrand/

Java in Particular

Java Distributed Computing.
Jim Farley. O'Reilly 1998.

I like the Tinkertoy analogy. I think of well-designed systems that way--as small, discrete objects with well-defined interfaces that make them easy to plug together.

The systems I generally inherit are more analogous to mudballs and masking tape.

I know Mr. Farley has a web site but I couldn't find it.

Java Network Programming.
Elliotte Rusty Harold. O'Reilly 1997.

Plenty of background and introductory material, as well as exemplary code. Do you know the difference between a URL, a URI, and a URN? Maybe you should.

Interestingly enough, the screen shots have a distinctive Macintosh appearance. Mr. Harold has since given up an the Mac, as have I, unless OSX proves really, astoundingly, good.

Mr. Harold maintains a web site entitled Cafe au Lait.

Java Threads, Second Edition.
Scott Oaks and Henry Wong. O'Reilly 1999.

To program effectively in Java, you have to lose your fear of threads. I advise you to just wade right in and start coding (small test programs).

Oaks and Wong like to make things more complicated than necessary, but the folks at Sun have made that tougher than usual with a nice, clean, threading API. It takes a deliberate effort to screw up multithreading in Java.

One more thing. Threads, like sub-atomic particles, are invisible to the naked eye. You have to smash 'em together to see how they work. This book will show you how.

Java I/O.
Elliotte Rusty Harold. O'Reilly 1999.

Just as students of calculus find themselves struggling with basic algebra, so do students of distributed computing struggle with basic I/O.

A careful study of the Java I/O Taxonomy will clarify much, and this book should take care of the rest.

Mr. Harold maintains a web site entitled Cafe au Lait.

Java Servlet Programming.
Jason Hunter with William Crawford. O'Reilly 1998.

I'd love to have a job writing servlets sometime. Then I'd have an excuse to finish reading this book.

I've only read enough to tell you that it's well written and worth the price.

Mr. Hunter publishes the Web site http://www.servlets.com.

Other Languages, Not Including English

The C++ Programming Language, Second Edition.
Bjarne Stroustrup. Addison-Wesley 1991.

He invented C++ (pronounced C plus plus). He wrote the book.

Many years later, James Gosling invented another language, based on C++.

Some people have referred to that language, Java, as "C plus plus minus minus."

If you must interface with legacy code, you must have this book.

Effective C++: 50 Specific Ways to Improve Your Programs and Design.
Scott Meyers. Addison-Wesley 1992.
(Out of print. Later edition shown here.)
15 Have operator= return a reference to *this.

28 Use structs to partition the global namespace.

43 Use multiple inheritance judiciously.

Aren't you glad you use Java?

PostScript Language Reference Manual.
Adobe Systems Incorporated. Addison-Wesley 1985.
(Out of print. Later edition shown here.)

After AppleSoft Basic, I taught myself PostScript, and bought an incredibly expensive ($1700) laser printer.

For some years afterward, we generated our own Christmas cards using my hand-crafted PostScript.

Later, to simplify things, I wrote Pascal programs to generate the PostScript code.

PostScript Language Tutorial and Cookbook.
Adobe Systems Incorporated. Addison-Wesley 1985.

Like the M. C. Escher drawing of the hands drawing themselves

Camera-ready copy for this book was created entirely with PostScript... Successive drafts were processed... each time generating a single PostScript file. The book was proofed when needed by printing the file on an Apple LaserWriter PostScript printer. The final version was printed without modification on a Linotype Linotron 101 typesetter and delivered to Addison-Wesley. No manual paste-up of any kind was required.
In 1985, that was pretty incredible.

English and Languages Similar to English

The Elements of Style, Third Edition.
William Strunk and E. B. White. Macmillan 1979.

You must read this.

This small book (1/4 inch thick) will teach you more about writing in less time than any other book ever written.

Don't bother with the later editions. You can find this one at almost any used book store.

To be or Not: An E-Prime Anthology

To be or Not: An E-Prime Anthology.
Edited by D. David Bourland, Jr. and Paul Dennithorne Johnston. International Society for General Semantics 1991.
What if the word is didn't exist? Words give us mental tools to apprehend our environment. The use of words for creating and storing knowledge distinguishes humans from other species. Yet language, the tool that makes us human, can also hurt us, if it corrupts our ability to make accurate evaluations. When tool tolerances go awry, we can fine-tune. Those who use E-Prime, a recent version of fine-tuned English, drop the verb to be in order to put people back in control of the language they use.
If nothing else, this will improve your product specification documents.

Business, Death and Glory

Janet Ruhl's Answers for Computer Contractors: How to Get the Highest Rates and the Fairest Deals from Consulting Firms, Agencies and Clients.
Janet Ruhl. Technion 1998.

Do you love your work but hate office politics?

Do your "benefits" cost more than they're worth?

Have you ever hoped to end to your life-as-chattel?

Find out what you're worth at Janet Ruhl's Realrates.com.

The Bell Curve: Intelligence and Class Structure in American Life.
Charles Murray and Richard J. Herrnstein. Free Press 1996.

One thing about the engineering profession--we're all from the same side of the curve.

Find out how the other half lives.

And you ride yourselves over your fields
And you make all your animal deals
And your wise men don't know how it feels
To be Thick As A Brick.
-Jethro Tull

Where to Buy

O'Reilly publishes more good books than any other. (Shop there but buy somewhere else.)

AllDirect.com has the best prices.

Amazon.com has the greatest selection.

Fatbrain.com specializes in technical books.

And the largest used book store in the world is Powell's Books.