Origami and Programming

Amit Zur
8 min readMar 25, 2016

--

I’m an avid origami folder. I’ve been folding since I was 6 years old, much more than my experience at programming. But today I view myself more as an expert at programming, specifically Javascript, and an origami hobbyist. Last week I attended the OASIS conference, and meeting so many talented people there, I noticed there’s a very strong analogy between the two skills.

Why this matters

I believe there is something very fundamental to my own personality that is driving my passion to programming. However, that thing is quite amorphic. I’m constantly trying to introspect it and find out what it is. Moreover, even in the world of programming I’m not attracted to just any type of field. Few software developer are. So giving shape to the ideas that attract me to write code and develop software can help me improve myself both in that and in other fields in life. The influence of origami helps me see this point of view. Plus, it’s just plain interesting to analyze.

How Folding Feels

I should probably illustrate what it means to be a folder. Origami models are immensely complex. Some models require hundreds of steps to complete, and may take up to dozens of hours to perfect. This requires remaining concentrated on the folding sequence for many hours straight. When folding a model you’re passionate about, one might go through the entire day (or night) without eating. Some enter a sort of meditative state in which thoughts are wandering around subconsciously as they are focused on the creases. There are many technical steps, repetitive work. Most models are symmetrical (some more than others), which calls for long sequences of steps to be repeated again on the other side. Some folding sequences drive the model forward in some direction for dozens of steps, then go back to unfold everything and repeat slightly differently with the existing creases. It’s tedious, it’s hard, often unrewarding for long periods of time, so it requires a great level of inner discipline and peace.

So, in what way is origami similar to writing code?

Break the Rules

First and foremost — the obvious — both fields are creation territory. You get to create. I believe creative people will find satisfaction in anything that will enable them to make something. The product is less important than the process itself. But I’m getting ahead of myself.

The analogy that resonates the most with me, is the impact of breaking the rules. In origami, almost all models are folded by following an instruction diagram. The 3D model is drawn and there is a sign language that explains how layers of paper should be moved. In programming there’s also a language that gives you tools to instruct the machine what to do. And on top of that there are paradigms and concepts that help abstract the way you code those instructions. Be it higher level languages, like Javascript, Haskell, Python, or Scala. Or whether it’s design patterns like pubsub, composite, factory. Or it might be the use of frameworks and tools. Which in the Javascript world has exploded into an absurd reality of a plethora of code projects that claim to solve some common problem. Today’s hotness is React, Angular, Redux, Webpack, but the churn rate is fast, and framework fatigue has been announced globally.

In origami, it’s very easy to fold by the instructions and reach a dazzling outcome. The artist who designed the model makes sure that adhering to the instructions guarantees a delightful outcome. But a lecture by Nicolas Terry has reassured what my intuition was telling me for years. Just following the instructions leads to copy paste. There is no added value by the folder herself other than enjoying the process. That might be a good enough target, but as Terry claims, this is what differentiates a good model from a great model. Bringing your own passion into the model is critical. And so it is in code. Creating a website with twitter bootstrap leads to just yet another website. Another example is the misuse of frameworks. I was exposed to a discussion between the author of React Router and some users about their demand for more features. Ryan Florence argued that he was not going to provide these features since it doesn’t make sense. The users expect his piece of software to be something it’s not. In so many words, he is saying “If you have other needs than what I believe, as the creator of this piece, should be provided — then please take it yourself and enhance it as you see fit.” In fact, that’s what open source software is all about. And that thing is what both developers and folders are afraid of. There’s a constant feeling that things that other people make are better than my own. But this feeling is just in our imagination. Most creators of both software and origami would be excited to see different interpretations of their creations. It gives their work another level of meaning. That’s how the world advances.

3 Wolves (mine at the middle) designed by Nicolas Terry

Art or Craft?

This leads me to ask whether writing code is an art. Because you do create something new. But I would argue that writing code in itself is not an art. The same way folding origami doesn’t make you an artist. But once you start to challenge the rules and give your own interpretation — that’s when things get interesting. When I was working to shape Nicolas Terry’s wolf, I could feel, physically, how I was moving from following instructions to working from imagination. And that, I think, is the fine line. Some pieces of software are a work of art. The innovative ideas imprinted in lines of code can be considered art if they are the product of a programmer’s own imagination and lead to some newly discovered idea. A clever abstraction, a smart use of a platform. When it reaches beyond a certain level of complexity and obviousness, it is a single time creation, totally dependent on the author’s mental state at the particular moment of creation. And that’s art. My wolf isn’t like any other folder’s wolf. And as I improve my skills and craft I open myself to the ability to create more artistic wolves. They might morph into something else during the process. But that depends on my own artistic mind.

So, both origami and software allow for different levels of creativity on top of a technical field. A craft morphing into art during the process, if the creator only lets themselves to stop following instructions.

https://www.flickr.com/photos/62652453@N08/9429531642/in/dateposted/

Who’s in the details?

I was astounded to see the attention to detail that folders give their models. Through every step of the folding process, there is a rigorous eye watching how every crease aligns on the same millimeter that it should. As opposed to programming, in origami this is a must for the model to succeed. You cannot engineer your way out of bad implementation. The details need to be well attended both at the beginning, when building the base, and at the end, when shaping the model. There is very little room for mistake, since a wrong placement at the beginning can have influence of dozens of layers of paper and leads to a deformed model. And disregarding a detail at the end means a less realistic result. It’s amazing how one can fold a model for hours, and then miss the details at the end, only to completely miss the whole atmosphere of a model.

Infrastructure vs. Application

In the software world, there is often this distinction between the low level infrastructure of a system, and the many applications built on top of that infrastructure. In origami it’s less obvious, but I found that the distinction exists, as well as the personal preference that goes with it. As programmers, we have a natural tendency towards one or the other. I, personally, am more an infrastructure kind of guy. In every component of a system I work on, I take more care to have the right architecture in place, than craft the actual details. Of course, there has to be the other someone who will shape these details — animations, styles, etc. But they will not be able to do so repeatedly and consistently if there isn’t a proper design of the underlying system.

Golden snitch (well, purple in this case) by Ben Goldberger

In much the same way, I found myself folding this model, by bright Israeli creator Ben Goldberger. In order to fold the snitch there’s a tedious pattern to be folded at the middle. I found difficulty in the folding process, and had a decision to make — I can proceed with this one model and brute force my way to the pattern, or I can investigate the pattern’s properties to find a better folding sequence. I saw many folders work on this model at the convention. Some didn’t have trouble with the fold at all. But the ones who did, had to make that decision, and I saw how differently people approach this problem. I think I’m quite extreme in my strive for answers, even at the expense of completing the model. For me, the result was not even the complete model. It was the unraveling the folding sequence. At some point I was starting to feel that I’m not going to finish this model at all, which was very unfortunate. I was already willing to give it up since I couldn’t find an easy enough solution. But then I did and you can see the outcome in the photo. In a different sliding door, I could have missed it. And then you wouldn’t have this picture to see, but the fruit of the process would still remain in my own mind, and who knows maybe it would have helped me somewhere else months later.

There is more. There’s always more to jabber about things you love. But in fear that this will become a shortlist instead of an article I’m stopping here. I’ve named a few analogies, but didn’t mention the need for far sight, abstract thinking, pattern recognition, design, knowledge transfer, community support, use of tools, and more.

My profession and my hobby require similar skills and have similar properties. That shouldn’t come as a surprise, should it? But I feel that putting the finger on it helps to improve on the things you care about and which make you happy.

--

--