I spent an hour or two yesterday evening correcting a problem in the error-handling code
for one of the finite element programs I develop.
Today, I spent some hours tracking down a problem in the `eigs` routine
in MATLAB R14. There were two issues, one of them subtle and the other obvious but
hard to locate (it resulted in a negative value which would be theoretically impossible --
even in floating point -- if things were working right).
This evening, I walked to Long's to buy machine oil so that I could fix the office door lock,
which had become nearly impossible to open.

In total, I've spent about half the productive hours since this time yesterday working on fixing problems with one thing or the other. But it's easy to see how those few hours could have become an entire week. So why didn't they?

The reason I'm spending this evening trying to clarify several pages of tedious algebra
that I wrote a year ago rather than trying to diagnose problems with `eigs` and
locks and sealing wax is that I have a set of mental models -- of all sorts of things --
that I can employ to find likely problem causes and solutions. My mental model of a lock
is pretty crude -- you push in the key and it lifts the pins -- but it's sufficient to
tell me that a little oil will probably help things along. My mental model of what goes on
inside of `eigs` is a good bit more sophisticated, and includes a general
mathematical component (which is what told me something was *very* wrong when I
got negative numbers for this particular problem), a software architecture component
(which told me where to start looking in a thousand line mass of MATLAB code),
and a numerical analysis component
(which told me why one of the bugs has probably remained undiagnosed for the past
several years, and has made little difference to many users). My mental model of my own code
is even more sophisticated, since I wrote the thing, and since I've been writing similar codes
-- and thinking about how they should be written -- for a few years now.

Now, this collection of mental models is pretty handy for me. Some of those models contain
a lot of details that few other people know about, which is probably why people knock on my
office doors and ask me questions and then get excited by the simple (sometimes) answers and
go off to do cool things (this is how most of my current collaborations got started).
But I have not yet figured out how to do a telepathic brain dump to instantly teach another
person everything I know about computer arithmetic or real analysis or mixed-language software
engineering. I've been tuning some of those skills for over a decade, and while it takes me
less time to teach them than it did for me to learn them, it's not an instantaneous thing.
But I have more ideas than time, and I would dearly love to give *someone* enough of
my mental models to make some headway on the ideas I end up neglecting.

I suppose I ought to finish being a graduate student before I start aspiring to take on students of my own.

**Currently drinking**: Jasmine tea