“The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination.” — Fred Brooks, The Mythical Man-Month
Not being as eloquent as Fred Brooks, I say “Invisible Blocks: for building invisible machines”, where he says “castles in the air.”
I write software, for a living, and for fun. I tinker, more than toil. As professional programmers go, I have a slight bias towards math-y, computer-science-y topics, but I actually write more about how software makes you think. I also think about design (both software-specifically, and in general). I’m an auto-didact.
I really like writing with Ruby. I’m starting to learn LISP and Scheme, via SICP and the 1981 lectures. I fool around with graphics, using processing. I’ve done 6 years of enterprise work (Java/J2EE), part of which involved leading an off-shored project. Today, I work at a small software company (C#/.Net).
Though I often write about work, I don’t mention the company name. This habit started during my corporate employment — I wasn’t sure whether keeping a blog was permitted, so discretion seemed prudent. I don’t think my new job would mind me using their name, but the habit is formed, and anyway it reinforces the obvious fact that these are only my thoughts. It’s no secret — anyone who knows me knows where I work(ed), and Google will probably tell you anyway — but it’s the way I do things here.
I opened this blog in January 2005 at blogger, and moved to WordPress in July 2006. The frog image at the top is from a photo I took in 2004, I believe. It has nothing to do with software, but I like it.

Hi Dan! As a newcomer to your blog, what posts do you recommend reading to a person in my position? I stumbled upon your post concerning finding out an average without using the sum of values.
Hello Cristopher,
I mostly write here about software, via JavaScript, Ruby, C#, and Java. Here are some posts I think are decent, but don’t get as much traffic as the more google-able ones:
A Faster, Cheaper Fibonnaci Definition
Why Functional JavaScript?
Fear, Uncertainty, and Doubt
Simplifying Boolean Expressions
Passing by reference, and dog leashes
Why We Abstract, and What to Do When We Can’t
Array.prototype.toString
A JavaScript War Story
I hope you like them!
I should really update this page one of these days…