Thinking in 3D
World events, perhaps, have driven me away from my usual “work”, thinking and writing about “Agile” software development. (That said, Chet and I will be doing a talk at the San Diego Scrum Gathering, and a keynote at the Agile Alliance Tech Conference. The latter, if it works at all, should be quite fun. (And if it doesn’t work, worth some laughs.))
Is everything the same, or is it just me?
What I’ve been doing instead includes working with Blender, a 3D drawing package. I set myself the task of building something that could be imported into Second Life, a place I frequent under an assumed name.
I’m no artist, as those who have read Nature know full well, but I keep trying to learn. This 3D exercise fits into that somehow.
And yesterday I noticed something striking.
Blender is quite complex. It’s very powerful, with the ability to create very complex three-dimensional objects, texture them, even make them move about. The standard working screen layout has at least half a dozen panels in it and each panel has literally dozens of buttons, fields, pull-downs and other widgets. Think Photoshop 3D, with all the ease of use of GIMP. It’s a big first step to do anything beyond making a cube, which comes built in.
The Blender manual, well, the less said about that, the better. It’s comprehensive but in no sense is it a document to learn from. Fortunately, there are lots of video tutorials on line and some good articles as well.
So I began by working through a series of tutorials that I found, which seemed to suit my learning style and to proceed in a direction that made sense given what I was doing. I’d follow along with the video, pausing it, doing what the instructor was doing. Command-Z for Undo became my closest friend. I’d mess up, back up, watch a segment of video again, do again until I got it right.
My tutorial instructor recommended making a reference card of the commands that we actually used, instead of one of those comprehensive cards that lists all the things you could possibly do, including things no one in their right mind would ever do. I did that, and found the card to be fairly useful in keeping track of what was going on, since much of Blender is knowing when to type which one of its innumerable commands, all a single letter with or without shift, control, alt, or a combination.
Pretty soon, though, I realized that I had learned enough to start building the object I had in mind. So I stopped stepping through the tutorials one after another. Instead, I built up my object using the techniques I’d learned so far, and then I’d go back and watch the next tutorial to learn how to paint the thing or whatever next aspect I needed.
And it seemed to be working pretty well. My project was shaping up, moving right along. Some good layout of the main thing, some very nice little details. None of it germane to the point here.
My learning has slowed
Then last night I noticed something.
I’m not learning much. There are a handful of techniques that I use over and over to build my object. And I discovered that if you type a space character and then a word, Blender creates a dynamic menu of all the commands containing what you’re typing. Need a seam? Type space s-e-a and sure enough there’s “Mark Seam” and “Clear Seam” and you click and go. Very nice.
Except I’m not learning the best way to do it, which is, it turns out, control e, a. E for edge, a because m is taken for “make” something or other. I know a decent way to do things, relying greatly on the command search, and sometimes using the menus and pull-downs. When I can’t remember or don’t even know a way to do something, I’ll type some words into Google and usually find a page with a clue. Once in a while, I’ll open Blender for Dummies, which has my picture in the dedication (no, not really) and search it for some background. Or I’ll watch a short video to find the trick I need.
And then I’m right back to my object. I do the thing I found, and move on, back to doing the things I know how to do.
I’m so engaged in the doing, that I’ve almost stopped learning. I repeat the same pattern: I build using the handful of tools I know; I use search to find commands I know about but use rarely; I go find a new technique when I must – and then I apply it quickly and don’t work with it enough to add it to my bag of tricks.
Just like some teams
In your work, have you or your team spent so much time trying to get things done that you didn’t learn better ways of doing things that would quickly have helped you go faster and do better? I know that I have, and I’ve certainly seen – and unfortunately even led – teams that tried so hard they failed to learn how to succeed.
Now, for myself, in programming, I’ve nearly learned to do the things that help me go faster, such as TDD (test-driven development). I’ve learned to keep my code habitable. And, best of all, I’ve learned to detect quickly when I’m not doing well. I’m more aware of when I’m getting stuck or when I’m just slogging along in the mud when there’s pavement nearby, or I could build some.
So – if I’m correct in what I say above – I don’t fall quite so easily into doing without learning.
But I’m sure not correct in general. I’ve been blendering very poorly, and have slowed down my learning when I clearly could use more. What if I’m not improving in my real work as fast as I could be?
I remember Kent Beck and Ward Cunningham talking about how, when they worked together, they’d continually challenge each other with better ways to do things. If one of them was doing something in a round-about way, the other would call them on it, make sure they knew the better way, and they’d practice doing it enough to begin to burn it into memory. And when it wasn’t burned in yet, they’d remind each other again.
Now if I were pairing with someone in Blender, we could do the same thing, teaching, confirming, burning in the better ideas. But I’m not – I’m working on my own.
Will I do better just by noticing this?
So this makes me think. I probably can’t really magically increase my awareness. But then what can I do, how can I change my Blender habits to accelerate my learning? And, perhaps more important, what am I not learning about programming by assuming that I’m sensitive to trouble and have good ways of getting out of it? How could I improve my programming habits to keep me learning?
And what am I not learning about writing, and communicating with you, by doing it the same way I always do? How can I be sure to improve there?
We all know we’re not perfect, and we probably all like to think that we’re learning and picking up new ideas all the time. But are we proceeding at the best pace, balanced between productivity now and productivity tomorrow?
When I do a thing in Blender, it may be uncommon but it won’t be the only time I do it. Same with programming. The patterns come around again and again. A few extra moments drilling the better way into our brain will pay off more like tomorrow than like next year.
How can we refocus our work to increase learning? How can we better notice when we’re just grinding instead of working wisely?
How will you do that, starting today?