I have the rare distinction of being a second-generation software developer. Most recently, I mentioned this in an interview when asked who my programming heroes are. It might sound kind of corny, but I'm serious when I say that my father is my programming hero.
He's been known as "r0ml" around the web since before there was a
web. If you are in a particularly typographically hip part of the
internet, it might even be "RØML". How many of your parents have a nom
de plume with a digit, or a non-ASCII character in it? Or, for that
matter, any kind of hacker pseudonym?
I had the good fortune to work with one of r0ml's colleagues, Amir Bakhtiar.
Amir paid me one of the highest compliments I've ever received: he
said that the code for systems I've worked on is similar to r0ml's in its
style and exposition. My dad taught me how to program in x86
assembler, and in that process, I learned a lot about the way he thought
about solving problems and building systems. I regard thinking that
well, or even comparably well, as a real achievement.
That's not to say that I would do everything exactly the way that he does.
For example, he writes a lot of networking code in Java. He
doesn't use Twisted, for the most part. If you know me and you know my
dad, you know that we disagree on plenty of stuff.
Unlike the stereotypical, often-satirized filial argument, these
discussions are something I look forward to. Disagreeing with my dad
is still one of the most intellectually challenging activities I've ever
engaged in. Whenever I have a conversation with him about a topic
where he has a different view, I come away enlightened – if not necessarily
Conversations among my friends occasionally turn to the topic of our
respective upbringings, as they do in any close group. One of the
recurring themes of my childhood is that, while my siblings and I were
sometimes told to be quiet, we were never told to be quiet because our
opinions weren't valuable. Sometimes we were told in unequivocal terms
that we were wrong, of course. However, my dad always
encouraged us to present our thoughts. Then, he wouldn't pull any
punches in relentlessly refuting our arguments, using a combination of
facts, estimates, calculations, and rhetorical flourishes. I learned
more about influencing people and thinking clearly around the dinner table
than in my entire formal education.
r0ml always questions glib answers, challenges the official version of
events, distrusts things that are "intuitively obvious" or "common sense".
The skepticism I've developed as a result of his consistent example
has rarely led me astray. Glib answers, official versions, and common
sense are frequently, if not always, wrong. He taught me to search for
the non-intuitive answer, the surprising inflection point in the data.
In a roundabout way, he also taught my siblings and I how to perform some
delightful rhetorical flourishes of our own, but also not to trust them.
Pretty phrases can be deployed equally effectively in the service of
illustration or deception. Although I can appreciate that parents
often come to a point where they've had enough and a
little deception can be a useful thing.
One cannot be a practiced rhetorician without a heaping helping of eclectic
life experience; r0ml has that too. He's a fencer. And
a juggler. He
still has the highest score on Space Harrier of anyone
I've ever met. (I can remember a crowd gathering in an arcade to see
him start level 18.) He's an avid scholar of medieval thought and
custom. For that matter, he's an avid scholar of a couple dozen other
things, but listing them all would take a whole day.
He has the common occupational affliction of being a science fiction fan.
However, fandom was never an identity for him. Again, by consistent
example, he taught me to focus on my own creativity, and do something cool,
never to just passively consume others' ideas. He treats entertainment
as an inspiration, rather than an escape. For instance, one of the
earliest memories I have about my father talking about software is a
reference to the movie "Terminator". (Please keep in mind that this
memory is ~20 years old at this point, so it might not be terribly
accurate.) I remember him saying something like "All software should
be relentless. If you remove its legs, it should use its arms.
Whatever errors it encounters, it should deal with them, and keep
going if it can."
Nevertheless, seeing "Tron: Legacy" with my dad, the hacker, in IMAX
3D, 20 years after we saw the original together... I didn't need to take a
life lesson from that to think it was pretty rad.
Unlike many quiet geniuses who labor in obscurity, dispensing wisdom only to
a fortunate few, r0ml is a somewhat notorious public speaker.
You can see him this
year at OSCON. If you hunt around the web, you can find some video
examples of his previous talks,
like this great 30-second interview about the nature of open
source process, from a talk he gave in 2008 (audio of the
full talk here).
(: Although, jeez, what was the point of that whole open-source subplot
at the beginning? It seemed like a great idea, but then it went
(: Speaking of not doing things exactly the way he does - where he
uses a metaphor to "single-threading" and "multi-threading", I would have
said "blocking" and "event-driven" - but more on that in a future post.)