software development is a *temporal* activity: it takes place over time.
any temporal activity can be shown as a series of snapshots. this is a way of “speeding them up”, usually for the purposes of analysis or instruction. it’s a kind of “as if” thing. for some kinds of thinking, we can just elide, ignore, or lightly annotate the face that the activity takes time to happen.
there’s nothing inherently sinful about these “as if” visions, but sometimes, when their conclusions are ramified into prescription, especially rule-centric process, they can produce unexpectedly unpleasant results. the whole snapshotting conversation is really about the framerate we choose in which to talk about our way of making software.
how often do i take a snapshot of “my way” to make it valuable to onlookers? and the answer depends almost entirely on who those onlookers are and what they want to do with the resulting sequence of images.
the most common answers in development pedagogy seem to be 1) just show the final result and explain it. 2) one second = one second, and, the most common 3) snapshot once an interesting change has occurred.
at different times, i’ve used all these methods as consumer and producer both. i generally prefer the third when i’m learning something brand new, and the first when i’m out there looking for “how i implemented X?” type answers. i want to hone in on the third, because i think it’s most useful for the largest part of the trade. if we double the population of working geeks every five years, that means that any given time half of the trade is composed of — no offense — noobs.
what noobs — often including me, depending on domain — seem to benefit the most from is sequential frames where each frame has an “interesting” change from the frame before it.
didja ever do something dumb that got your mom mad at you? and she said, “oh, child, what were you *thinking*!?!?” as a noob forging my way into a new domain, that is the question i most often want to get the answers to. “what were you thinking?”
geekery is the sociotechnical act of integrating high levels of creativity with high levels of rigorous technique.
a rewrite: geekery is the sociotechnical act of integrating high levels of creativity with high levels of rigorous technique over susbtantial periods of time to make artifacts that please.(i added that rewrite cuz it mentions or implies all the muddinesses present in this very muse.)
if we are to learn, do, analyze, teach, or give advice about geekery, we have to incorporate *all* of this into our vision.we have to address the artifacts, the pleasing, the creativity, the technique, the sociotechnicality, the humanity, and temporal flow of the enterprise. honestly, nothing else will do.
perhaps my biggest whine — this is not a rant today — about these branded prescriptive processes i encounter every day everywhere all the time: it is the extent to which they seem so often to leave out one of these key aspects.
what i am after is a description of software development that is formulated to include all of it.i don’t know that i have such a thing inside me, or that any of the geeks i love and respect have it in them, either.
at the end of the nineteenth century, david hilbert produced a famous list of “problems we must solve” in mathematics. i guess i believe the most pressing problem we must solve, as an industry, a trade, a discipline, a way of being and living and working, is just this: how can those of us who are successful at this express what we do to those of us who are less successful at it?