This page references various useful tools: software, diagrams, etc., for the most part created by Allen. A few goodies are available only to subscribers of the mailing list. (These are marked with a button. Click to subscribe.)

You should also check out the various documents in the Software and Articles sections.

Design-Pattern Goodies


Holub on Patterns

This page is the main page for Allen's book Holub on Patterns: Learning Design Patterns by Looking at Code. It contains various pattern-related links, and also provides links to the source code from the book: The Game of Life and an Embedded SQL intepreter. (Purchase a copy on Amazon.)

OO-Design Goodies


An OO Reading List

Unfortunately, no single book can possibly cover OO Design and programming in real depth. Consequently, I've put together a reading list that provides broad coverage of the various topics that compmrise the OO-Design field. The list is not comprehensive; I've tried to list only the best books in a given category. Reading all the books on the list will certainly give you a broad understanding of what OO Design and Programming are all about, however. I'll be tweaking this list periodically.


UML Quick Reference

The Unified Modeling Language (UML) has won the OO-design notation wars. It both amalgamates and expands the notations of Booch and Rumbaugh (OMT) in a way that I find pretty useful. This UML Quick Reference summarizes the parts of notation that, in my humble and completely unbiased opinion, are actually useful. I've also included my own extensions and modifications to UML, necessary because the standard occasionally doesn't present ways to do essential things. (Surprisingly, a modified UML is still UML—I think of UML as a nonstandard, since it gives the implementer so much flexibility that you could have two fully compliant implementations that look completely different.)


UML Templates for Visio

I've put together Visio templates for the parts of UML that I use most often. (I used them to make the shapes in the quick reference, above.) You can get a copy here.

Java Goodies


Java Order-of-Precedence and Hierarchy Charts

When programming, I've found the following charts to be useful:

Java Order-of-Precedence: Shows operator precedence and associativity for Java.
Swing Hierarchy A class-hierarchy chart for the Swing Classes.
Collection Hierarchy: A class-hierarchy chart for the Collection and Map classes


Programming Rules of Thumb

This document lists 160-some programming rules of thumb. It is essentially the table of contents for my book Enough Rope to Shoot Yourself in the Foot (McGraw-Hill, 1995). The book was written with C/C++ in mind, but most of the rules apply to programming in general and OO programming in other languages (such as Java) in particular. You should go get the book if you want to see why the rules are what they are and to see detailed explanations for each rule. Bear in mind that all of these are just rules of thumb. There are always exceptions.

Miscellaneous Goodies


Get the Logitech R800 presenter remote to work with Keynote on a Mac. .

The Logitech R800 is one of the best presenter remotes out there. Unfortunately, Logitech, in its infinite wisdom, refuses to support the Apple platform, even though the remote works fine on the Mac (with a little fiddling). Here are instructions.


Adding Dividers to the Google Chrome Toolbar

This page provides an easy way to add dividers to the Google Chrome toolbar. Chrome lets you create a very compact bookmarks toolbar by removing all the text associated with a bookmark, leaving only the icon. The browser provides no way to put dividers between groups of icons, however.

This page solves the problem by displaying an icon that's a simple vertical bar. All you have to do is put a bookmark to this page on Chrome's bookmarks toolbar, and it will appear there as a vertical bar.


IBM's Santa Teresa Laboratory

This article, from IBM Systems Journal, sumarizes the classic (perhaps the only) formal study done on the development of office buildings expressly for use by programming teams. It's a must read for anyone who's putting together office space for programmers to use. It's cited in Tom Demarco's Classic Book, Peopleware, which, along with The Deadline, are the two best books on management that I know of.

(The file is a 3.3Mb .pdf file that contains a scanned image of the original article. I didn't run it through an OCR program because IBMs copyright notice requires that the file be distributed "without alteration," but it will take a while to print as a consequence. It's well worth the wait.)


Falling Debris

Here's the full Ariane 5 Failure Report from the European equivalent of the NTSB. It describes why the rocket blew up back in the Summer of 1996. To make a long story short: someone forgot to catch an exception thrown in response to a float-to-int-conversion overflow. This report should be required reading for all programmers. It makes abundantly clear why you should care about software design. I stole it from James Gosling's web page, but I've seen it other places as well.



Bookmarklets are a way to spoof your browser's bookmarks system into doing work for you. Here's a discussion of how to make them from my friend Ben Gross.