A long time ago, when I was training in China, I was struggling to learn a form correctly and my master threatened me with no food until I got it right.
This seemed like a terrible idea, I mean, it was hard enough to focus and be physical on the small amount of food (mostly chicken) that we did get, let alone without.
But today this came back to me as I continued a long battle with some code. That maybe he had a point and the answer was that I should lock myself away in my apartment, where there is no food, until I get it right.
(Knowing I was going to be working from home today, I did try to buy some, but it turns out after 3 months in Sydney I didn’t know where the fresh food in Woolworth’s was, not having had occasion to buy any yet.)
I’ve been trying to change something for nearly a week now, and I feel like I’m making very little progress. There’s a monster in our codebase, something we’ve written and rewritten because it deals with this poorly documented API and it’s been a case of look at the documentation, do something, try it, discover it fails on data quality or battery life, think, try again.
So there are a number of things that at the time seemed like good decisions, mostly were good decisions in the context of what we thought we knew, are there, and every time I go to change something, it’s a cascading thing of, oh, then I should change that, and that, and that. And so I cut change after change, making concrete improvements, trying to turn the monster into something that I can operate on.
And I just berate myself – how did I, who am so fanatical about design, who wrote or reviewed every line in this monster, let it get that way? Approaching it with fresh eyes after a break, having figured out this new way to do it (basically, all of the ways we’ve tried so far, in combination. Way more complicated that it should be with a decent API, but que sera sera).
Maybe this is the process, of figuring out how to do something that there’s no API well suited for, no blog posts explaining well, no expert down the hall to ask and review. Maybe this is just the part of what we’re doing that is learning, because everything else is pretty easy and I look at the design, or the feature spec, and know. This is the challenge.
And so I’ll go back to the office and keep poking this thing into shape. I’ll keep making improvements until it’s more of a Stegosaurus than a T-Rex. The compiler won’t hit me with a stick, but it might make me cry. And the determination that got me to master that form (long since forgotten), the thing that pushes me out of bed in time for early morning spin class is the same thing I need here to keep on fighting with it, until it’s tamed and improved.
Becoming a better engineer, becoming a better programmer, I think it’s really about being able to embracing this process of sucking. Of breaking things. Screwing up. Being mistaken. Thinking you’ve discovered all the goddamn ways you can be wrong, and then finding out you were wrong about that, too. And then making it better, whether you rip something out and replace it in a caffeine-fueled epiphany or snip away at it like you’re sculpting a tree.
This time 5 years ago, I was 22 and had just started on my year of being an “international hobo” (aka, fuckwit). And it seems like I did some really random stuff, but for all I joke about how grad school was a terrible life choice, I never feel that year was a waste. I learned so much about humans, about how to have an adventure, but I also learned how to suck.
I say learn how to suck, because it’s something we make such efforts to avoid, especially women. It’s not safe for us to fail, we view failure as a judgement on our innate abilities, not our learned ability to pick ourselves up and keep moving. And you know, that year, I got really, really good at sucking. I lost count of how many times I hit myself, hard, spinning my 5 foot staff. I came in last from climbing the steps, but I went up and down all four times instead of giving up part way through. I concussed myself and ended up in hospital. I concussed myself again (and again, and again, and again), but learned my lesson about the hospital. I wiped out in less dramatic ways. Flew out of my skiis leaving them upright in a ditch. Swam downhill in the sugary power that just kept knocking me over. Broke a ski pole, another, so many I used to buy them 2×2 at a time.
And now, you know, I suck less. I suck less at skiing. Less at kickboxing. And I suck less at sucking at programming.
So I went and lifted weights, and reminded myself that a year ago I couldn’t have lifted those, because my shoulder was such a mess.
And I came home and reminded myself of all the other things that I’m less terrible at now, than I used to be.
And tomorrow, I’ll go to work, and by the end of the day, this bit of code might not be amazing, but it’s going to be less monsterous than it is today.