Shitty First Drafts

“Very few writers really know what they are doing until they’ve done it. Nor do they go about their business feeling dewy and thrilled. They do not type a few stiff warm-up sentences and then find themselves bounding along like huskies across the snow. One writer I know tells me that he sits down every morning and says to himself nicely, “It’s not like you don’t have a choice, because you do – you can either type, or kill yourself.” We all often feel like we are pulling teeth, even those writers whose prose ends up being the most natural and fluid. The right words and sentences just do not come pouring out like ticker tape most of the time. […] For me and most of the other writers I know, writing is not rapturous. In fact, the only way I can get anything written at all is to write really, really shitty first drafts.”

–Anne Lamott on shitty first drafts, from Bird By Bird

This is supposed to be a professional blog, but I hope you’ll pardon this bit of language, which comes with some of the best and dearest advice on professionalism I’ve read.

At the end of last week, I moved on to the second project of my apprenticeship: writing a simple HTTP server from scratch. Starting the project was not rapturous. I knew the basics—model the filesystem, connect over a socket, and transfer specially-formatted text back and forth—but had no idea where to start or what test to write first. I read up on sockets, browsed through the HTTP spec, and stared dumbly into IntelliJ for a while, and at long last, I started typing. What Anne Lamott calls “shitty first drafts” the TDD world calls “spikes”—short experiments, sometimes without tests, to figure out what to work on next. A spike is like a “child’s draft,” allowed to run wild and break things on condition that it will be thrown out and replaced with something decent (and well-tested).

Of course, as soon as I had a few lines of code down, the ideas started to flow (I started by parsing headers, by the way), and within an hour I had a feature-complete HTCPCP server (HTTP is still a work in progress). Another reminder that programming is craft, and writing code really is a creative act.

Comments