The maze book for programmers!
mazesforprogrammers.com

Algorithms, circle mazes, hex grids, masking, weaving, braiding, 3D and 4D grids, spheres, and more!

DRM-Free Ebook

The Buckblog

assorted ramblings by Jamis Buck

Lessons from the Kitchen

30 January 2015 — A retrospective on a personal journey, wherein the author's experiences of growing as a cook are compared with learning how to write software — 5-minute read

Up until a few years ago, cooking was something I never gave much thought to. In my mind, it was maybe 10% science, and 90% superstition, just a daily ritual to appease the kitchen gods, and accompanied with all the corresponding ceremonial trappings. The incantations had to be made just so, the offerings presented with painstaking precision, and the results subject to whims every bit as Seussian as Zeus himself. What else could explain how a mixture as unlikely as flour, sugar, oil, and water could be transformed into something as lovely as a cake? Successes in the kitchen were miracles, and failures were somehow retribution for my multitude of culinary sins.

I had a deep fear of little mistakes, with vague Hollywood impressions of deflated soufflés to inspire me to vigilance. I kid you not—there was a time when I actually felt compelled to double check whether the recipe called for the flour first, and then sugar, or vice versa. Everything had to be done literally according to the book.

More than once my wife suggested a modification to a recipe—a simple substitution, or maybe even an innocuous addition—and I had to fight back panic. What if something went wrong? What if the soufflé deflated?

Experiment? Never! That was for the deeply initiated. Somewhere high in the French Alps, a monastery full of sous-chefs was chanting Vespers in a kitchen, combining obscure organic herbs and sauces in combinations dictated by ancient manuscripts. I knew, in my heart of hearts, that this was where the world’s cookbooks came from. Surely I had no business questioning their wisdom.

So it was that one day I was sitting in a dentist office, looking at desserts in a dog-eared copy of Bon Appétit (yeah, the irony was not lost on me), when I stumbled upon an article about homemade marshmallows.

What?

What kind of gastronomic blasphemy was this? Surely marshmallows, in all their fluffy white perfection, weren’t made, but rather grown, and grown only behind the righteous bastion of those gleaming monastic walls? Could it be that these marvelous confections could truly be made at home? Was this…legal?

I checked the ingredient list. Sugarcorn syrupgelatin… I had everything it called for. Did I dare…?

Yes. Yes, I did.

That first batch was far from perfect (I put in too much mint flavoring and the result was ironically toothpaste-flavored), but something about the experience changed my perspective on cooking. I suddenly itched to experiment with that recipe! I spent months trying new combinations, several times per week, searching for the perfect balance of water and sugar, testing different durations and temperatures and curing times.

Once that gate opened, it was just a matter of time before I started to wonder what else could be subject to experimentation. I picked up the book “Ratio”, by Michael Ruhlman, which was a real eye-opener. I started dabbling in bread recipes, and cheesecakes, and even kimchi!

The result of all that? Well, I’m hardly a world-class chef, but I’m definitely a lot less uptight in the kitchen. We don’t buy canned cream soup anymore—it’s just about as easy to make from scratch, and it tastes a lot better, too. I make my own bread, from a recipe I tweaked and adapted, about four loaves per week for the last nine months. And, of course, I make marshmallows.

I’ve recently reflected on this experience, this personal journey from paranoia to poise, and I’ve recognized a pattern that seems to match other aspects of my life as well. It’s a pretty standard process of learning, actually, fitting neatly into Bloom’s taxonomy, or even the four stages of competence, but the cooking metaphor speaks best to me. In particular, it meshes well with my observations of those new to writing software, and (in retrospect) with my own experiences when I was first learning the craft.

Now, I’ve been writing software professionally for just about two decades, and as with anything else continuous for that long, memory tends to blur around the edges a little bit. I don’t remember a lot of what I felt or did at first, but I do remember spending long hours copying BASIC program listings verbatim from books. (Yeah, it’s been that long ago…) I remember meticulously following examples from the Turbo Pascal manual, and trying to bend my mind around this concept called “pointers.” As with my early cooking experiences, I remember there being an element of uncertainty behind every program I copied, worrying what might happen if I deviated at all from the instructions.

Somewhere along the path, though, I began to gain a bit of confidence. I began to stray from the path of those published listings. The excursions were small at first, certainly—changing a string here, an if statement there—but they gradually grew larger and longer until eventually I was writing entire programs from scratch.

This perspective has given me a new way of thinking about newcomers to programming. It’s far too easy to grow impatient or even disgusted with “newb” posts that seem to ask the same questions over and over. Don’t they know to look around a little bit first? Don’t they understand they ought to maybe experiment some before they dare disturb our pond with their trivial little pebble?

Those posts written in seeming haste and posted to StackOverflow or forums across the Internet? Those aren’t necessarily symptoms of laziness or indifference. I wonder if my own voice might have mingled with theirs if I were just learning programming today, not because I would have tried to get someone else to solve my problem, but because of that paralyzing fear that some people feel when trying something new and unknown.

(My wife, an accomplished knitter, once read a post on a forum in which a newcomer asked if a particular sweater pattern—which specified a particular color of yarn—could be done in a different color. I’ll admit, we snickered a bit in incredulity, but in retrospect perhaps all that OP really needed was a little encouragement to “try it and see.”)

Timidity is the offspring of inexperience, an uncertainty about the consequences of different actions. It’s an inability to tell the difference between what must be done a particular way, and what may be done a particular way. The only cure for this is a generous cupful of practice, mixed well with opportunity, and sprinkled with a determination to observe and retain. Bake for a few weeks, or months, or years, and you’ll find that what comes out will be very unlike what went in at the beginning—uncertainty miraculously transformed into confidence, paralysis replaced with ability.

It’s far too easy for those beginner soufflés to fall. All it takes is a misplaced criticism from an experienced chef to discourage someone from taking those first tentative steps outside the recipe. Thinking about it this way makes me want to listen better to those cries for help, not so that I can bake their metaphorical cakes for them, but so that I can be more patient with their explorations.

Perhaps all they really need is a voice of experience giving them permission to try, and see.