Monday, 25 January, 2016 UTC


Summary

A few months ago (fall of 2015), my 6 year old daughter saw a crochet kit at a bookstore. It was the kind of kit that comes with a crochet hook, yarn and a book of patterns. There’s enough yarn to create two small projects and hopefully get you started with a new hobby.
My daughter immediately hatched an idea in her head – she would have us buy the kit, then she could learn how to crochet and create some adorable little animals to play with.
It was a perfect plan in a 6 year old’s mind… until we said no.
Teaching By Learning
We didn’t completely say no to the idea of her learning how to crochet, though. Really, I thought it was a good idea for her to learn, but I didn’t want to buy that $15 kit when I knew we could buy yarn and a hook at a craft store for $3 total. So, that’s what we did – we went to the craft store and bought few things of yarn and a couple of crochet hooks.
My grandma taught me to crochet when I was about 10 years old, so I knew what I was getting into. I told my daughter I would teach myself how to crochet again, and I would teach her at the same time. 
Do You Want To Build A Snowman?
Fast forward to Christmas vacation in December of 2015 and I have a storage container full of yarn, crochet hooks, needles, scissors and other accessories. I’ve made a dozen toys and my daughter has learned the basic crochet chain pattern.
Now my mom wants me to make her a snowman.
Only, I’ve never made a snowman.
Sure, I’ve made other round things – an octopus, a few heads for other little dolls, etc – but a snowman? How do I do that? Is it just two round balls and a scarf?
How do I do a hat? Or a nose that sticks out?
As I was figuring out the body sections, I made a guess as to how I could do a hat. The nose was based on turtle legs, and the scarf – well, I found a pattern for a stuffed toy scarf. In the end, the basic patterns I used, modified and repurposed, produced a result that was better than I had expected!
I am quite proud of what I made, and ended up creating a second snowman for my grandma. This one was a little shorter, a little cuter, and had a lot of other improvements in how I made it.
Both my mom and grandma were very pleased with their snowmen, and it was a good Christmas break, over-all.
Manipulating Patterns To Create Something New
During the creation of the second snowman, though, something about the reality of crocheting started to sink in.
I realized I don’t need to know how to make a snowman, to make one. All I need are a few basic patterns to manipulate, and I can probably produce the desired result.
So I take this new-found idea and I run with it. I start making things I’ve never seen before, or only have ideas about, including the BB8 droid from Star Wars: The Force Awakens (which I have seen 3 times, in theatre :P)
And somewhere in these moments of manipulating yarn in a single, continuous line, I recognized the parallels between patterns in crochet and software development.
I Don’t Know How… Not Yet
Like the snowman or the BB8 that I crochet’d, I don’t know exactly how to build most of the software projects, prior to building them. Rather, I have many small patterns in my mind, with each of these patterns being made of smaller patterns, still.
I know how to use MongoDB, SQL Server, Oracle and other database systems. I know how to handle HTTP requests with Express.js, and serve HTML in response. I can organize files into separate folders based on features and functionality… and so much more. 
Each of these things I know how to do represents a pattern – a basic method of solving a particular problem. But it’s not the one small thing that makes the software useful or complete. Neither does one round ball make a complete snowman or a BB8. Rather, it’s the combination of the individual pieces that produce the desired end result. 
Software Patterns
It’s not that I have a cookie-cutter, copy & paste chunk of code for each part that I need. Instead, I have worked through the basic crochet stitch patterns, the basic expand and reduce patterns, the basic shape of a ball or a hat, and I have begun to understand the purpose for the pattern.
In the same way, I have collected a series of software patterns through repetition, practice and use. I worked through the basics of database connections, HTTP request handling, middleware, messaging systems, and more. These represent patterns of implementation that I can use, modify and implement as needed.
And from there – from the place where I know the technology and the patterns – I can spend my time on the more important aspects of any given project: learning what the business needs, and understanding the problems they are trying to solve.