Like A Girl

Pushing the conversation on gender equality.

Code Like A Girl

Code like a Weaver

My mom’s never written a line of software in her life, but she taught me how to program. She taught me arithmetic and fractions through baking, data structures through laundry, and programming and algorithms through weaving. Does that sound crazy? Let me explain.

Baking and Fractions

Photo by Mira on Unsplash

How one might learn fractions and arithmetic through baking is pretty obvious, if you’ve ever followed a recipe. Something requires 1 1/2 teaspoons? That’s half a tablespoon, if you’re in North America. Or three half teaspoons. And a half cup is two quarter cup scoops. Or eight tablespoons. Once you’ve got the hang of basic fractions, you start getting into halving or doubling a recipe. Eventually, you just know these conversions, but when you’re a kid, it’s a good way to learn how to multiply and divide.

I clued in early that this math stuff isn’t purely academic.

Laundry and Data Structures

My clothesline

A little while ago, I was hanging clothes out on the line, and it occurred to me that my mother taught me my first data structure concept: first in, last out. A clothesline is a physical manifestation of a stack.

If you wash the jeans first, and put them on the line first, they can stay out there the longest, because they take the most time to dry. If you hang up your quick-drying workout gear last, you might be ready to take them down and replace them with another load before your jeans have even thought of drying.

Alternatively, if you’ve got enough space on the line, so that you don’t need to cycle things on and off the top of the stack (closest to the house), you may want to hang your most wrinkle-prone clothes out first, so they end up on the top of the pile when everything’s folded in the basket.

As with data, the way you use things should dictate how you organize and store them.

Maker, Crafter, or is it simply “Having a Hobby”?

I went down the rabbit hole on a Twitter thread recently (usually a bad idea, unless it’s one of Sarah Mei’s insightful tweet storms about the hard problems of software [ie: people]), and ran into an argument around a distinction between the terms “Making” and “Crafting.” One side seemed to be implying that hobbies that involved fabric were Crafting, whereas Making applied to electronics, hardware, 3D printing, woodworking, etc. Say what?

This distinction has actually been codified in a couple of publications by Maker Media, Inc. You can see how Maker Media categorizes the two terms, if you compare Make Magazine and Craft Magazine.

Personally, I’d rather build BB-8 out of cake.

It doesn’t stop in print. At makezine.com, you can see that they’ve given that publication a full website, whereas the craftzine.com domain currently redirects to an old blog post on makezine.com that explains how to follow crafting authors via an RSS feed. Maybe they could just fully merge their two publications, and stop contributing to this type of nonsense?

Whether you call it Making or Crafting, I think it’s funny how language evolves. My parents’ and grandparents generations didn’t call themselves Makers. They simply had hobbies, like gardening and woodworking. My Grandpa John made furniture for his family & friends. Mom wove, and left many beautiful warm blankets with friends & family that we stayed with on family trips back and forth across Canada. My sister knits things like socks, following patterns of knit and purl stitches.

Maker, Crafter, or Fibre Artist, I’d call that a physical manifestation of an algorithm.

Code like a Weaver

Maybe somewhere in a history of technology class, you heard about a relationship between Babbage’s first working analytic engine and a Jacquard loom. Do you know how the mechanism works?

A Jacquard loom has a series of punched cards. The holes in the cards tell the loom when to raise and lower the heddles. The warp threads have been threaded through heddles attached to the mechanisms of the loom, and raising and lowering those shafts creates the programming that makes the pattern in the finished piece. Clear as mud? Detailed pictures of a simpler loom might help.

The metal things are heddles. The threads that go through a small hole in them are the warp. Some go through heddles on the front shaft, some go through the second, some the third, and others the fourth. No thread goes through more than one heddle.
The different shafts of the loom are ‘tied up’ to different treadles, so the shafts can be raised or lowered by pressing the treadle with my feet, according to the pattern.
Pressing one of the treadles lowers the shafts connected to that treadle, resulting in rest of the shafts being raised. This creates an opening in the warp called a “shed,” where the weft thread is passed through on a shuttle.

Programming the Weave

My loom is a fairly simple 4-shaft, 6-treadle counterbalance. I’ve currently got it programmed to weave Swedish lace.

To decide how to thread the loom and what treadling pattern to use, I took the basic structure of Swedish lace, and fed it into a google spreadsheet. The first 4 rows across the top define the threading: which warp threads go through the heddles on which shafts. I used the first 8 columns in the spreadsheet to play with treadling & tie-up patterns until I got an overall fabric structure that I liked. It turned out that I only needed 6 of the columns for the patterns I wanted to do, which is great — because I only have 6 treadles.

It’s a bit of a hack, but I figured out a formula I could use in every cell to trigger an on/off pattern to colour the cells, and get a sense of what the finished weave would look like.

Without changing the threading of the warp, a different treadling pattern (algorithm, really) in the columns on the left results in a substantially different structure to the weave.

With this treadling, I’m able to get a windowpane effect, rather than the all-over lace weave in the previous example.
This is what the two patterns above look like, woven up. I haven’t changed the fundamental programming (the threading), just the algorithm (the treadling).

With a Jacquard loom like the one at the Royal Ontario Museum that I pictured earlier, you can weave much more complicated patterns. This is both because this loom can handle way more warp threads for a wider & finer weave, and because the punch card system & associated mechanism allows for individual heddles to be raised and lowered independently, instead of as a pre-programmed unit per shaft.

A Jacquard loom allows for complex programming where patterns can easily be created that aren’t purely linear along the warp.

Building out a beautiful piece of weaving means coding the thread into the loom properly. That code base is then manipulated by changing how those threads are moving to create the pattern.

The Analytic Engine

The earliest version of a general-purpose computing machine directly borrowed the punched card mechanism of the Jacquard Loom. Babbage’s Analytical Engine used several sets of punched cards, providing both the data and the instruction sets, in order to compute complex mathematical formulas. Instead of determining when to raise and lower the warp threads like the loom, in the difference engine, the holes in the cards were to be used to define the binary programming.

You know what I think is the coolest part about the association between the loom, the analytical engine and my hobby? Ada Lovelace is the one who took a look at a loom, and the art that it could produce, using the same mechanism as the analytical engine, and was the one to identify that the proposed analytical engine could someday do far more than just number crunching.

From the Bibliothèque Universelle de Genève, October, 1842, №82:

“ The operating mechanism can even be thrown into action independently of any object to operate upon (although of course no result could then be developed). Again, it might act upon other things besides number, were objects found whose mutual fundamental relations could be expressed by those of the abstract science of operations, and which should be also susceptible of adaptations to the action of the operating notation and mechanism of the engine. Supposing, for instance, that the fundamental relations of pitched sounds in the science of harmony and of musical composition were susceptible of such expression and adaptations, the engine might compose elaborate and scientific pieces of music of any degree of complexity or extent.”

The mental leap from mathematical engine to programmable multi-purpose computer was made by someone who coded exactly like a girl.