I write things down from time to time. Analog-style. For a programmer I'm a little more attached to non-technological ways of getting things done than many of my peers. Not to say I never archive my work in the digital world. Just not this time.

I was looking for a card my old co-workers gave me before I left a company I used to work for. The job was the first real programming job I ever had. The team I was on was small. People knew each other, they took an interest. They gave each other going away cards.

One of my old co-workers recently got a new job, the learning of which is what made me look for this card. After about 50 minutes of digging through junk I found it. Its generic Hallmark cover brought a smile to my face. Classic 200dpi with faded CMYK colors, tastefully aged so that they looked like popart. Like something from an inkjet printer from the 90's.

I opened it up and it was just like I remembered it. Signed goodbyes from all the people I used to work with. One in particular that made me laugh. A note, an inside joke from an old colleague that came from a late night in the office.

One of our QA people, this guy who lived in the Midwest, called in at about 8pm and told us about a bug he found on production. It’s the worst call to get on a Friday night. We stayed behind to patch it up but, as luck would have it, our deployment failed. The platform1 was down temporarily for maintenance. So we would have to wait.

Its times like this that bring a team together. We were small (like 5 people small) and bootstrapped, which means we shared a table four ways and were cramped into the corner of another company's office. In that kind of space there isn't much else you can do to pass the time but talk. Remember I like doing things the old-fashioned way.

So on that night, my co worker told me a story about a friend he knew in college. A wild spirit, this was a dude who constantly harped on about how life is wasted on work. Most people cross paths with a person like this at college, but from what I heard this guy was a little different. A programmer as well, this guy drafted a heartfelt letter of resignation to his colleagues out of the blue one day, and supposedly rode off into the sunset. What the exact contents of the letter was I don't know, but the thing my co worker told me, the part that I still remember to this day, and the part that was scrawled in my card, was the following:

No matter what people tell you, no matter what the movies show you, no matter how many times you try to convince yourselves, just know this. You cannot be free inside of a box.

Quite the freewheeling spirit this guy. According to the legend I was told, he bid farewell to his workstation and daily scrum to travel across the country on foot and… wait for it… drop acid in the desert. No joke.

A genuine acid trip (pun intended).

What does what he said mean? To be honest, I'm not really sure. For whatever reason it's one of the things that has stuck with me to this day. And while the card's cheap laminate pressed itself into my fingers, something I had never considered about my profession, the world, and what programmers do leapt out at me.

Every now and then a development comes along that splits open the way humans operate. A point of inflection; when it happens it cannot be undone, because the way the entire species operates is forever changed. Steel. The printing press. Electricity. Nuclear power. I believe that among these giants is perhaps the largest, most hulking titan to ever walk the annals of history: Computation.

For most people computational science is completely unknown. For the few who do know, it is still a vast mystery. But if the power and reach of computation has not floored you with awe, it just means you haven't understood it yet. Ever heard of the "Internet"?

Math is powerful stuff. Not just because it has the power to guide cars or rockets or have a car pick you up in the middle of nowhere, but because it can reveal truths that swim in the air around us. Sorry to whip out the ouija board here but programmers, in some sense, can be thought of as mystics. Shamans who coax insight out of raw information. And in this spirit I believe that programs, and by extension programmers, fall into one of two camps: automation and synthesis.

Automation, at its core, is about performing an action whose end is a known quantity. Display this text. Do it at this time. Change in this way for this language. Do something that I could do myself… but just don’t want to. More things fall into this category than you think. In fact, I think its fair to say that most of computation from the 70's to the present has been about automation. Crunch these numbers. Send this message. Throw up this website. Even things that seem surreal-ly high tech, like clicking a button and having a pizza show up at your door, are just automated ways of doing thing humans have already been doing. Want to chat with someone? You don't need Kik for that. Even if they live across the earth.

Automation masks an elegant and powerful concept: it is the graph that connects things the world needs and things that are possible. It is basically what computation is. If some wants it done and it can be done, computation is the path to making it real. Let me take a second to unpack that.

On a granular level, computers do exactly what their names say they do. They compute values. The original computer, the Turing Machine, was a device with a magnet-embedded head stationed above a ribbon of paper tape. The head could detect whether or not the section of tape below it had a hole punched. Using a set of pre-fed instructions and the ribbon itself, the machine could make decisions on what to do.

Every computer does this. Albeit hundreds of thousands of times a second, all computation proceeds in this way: perform an action based on the state produced by a previous action3. If the paper is pristine, 0, if not, 1. The elegance of binary in describing complex action is enough to make me stop typing and think about the possibility of the entire universe being a gigantic, infinitely large computer. But more on that in another post.

Given a complete set of instructions, a Turing machine can perform any action that can be described by those instructions. Here's where things get interesting. If a problem, or more importantly its solution, cannot be described then it cannot be computed. For example, if you live at Point X AND want a pizza AND know that the pizzeria is at Point Y, a Turing machine can tell you how to get there, given you tell it how to traverse points on a plane. However, the machine cannot tell you what pizza to get. That's because you haven't defined this action, getting a pizza, in your instruction set. This is a famous problem called the halting problem described by Alan Turing in his original paper, so named because a program that tries to compute this, what pizza you should order, will never complete.

Recommendation engines abound today, in almost every industry, to suit almost any need. Programs that tell you what Alan Turing claimed was impossible. So how are they doing this? Enter the second program(mer). Synthesis.

This is the one that breathes life into sci-fi fantasy. Synthesis attempts to solve a problem with something that only resembles what the solution might look like. It is automation's awkward brother. Where automated answers are precise, synthesized ones only might work. Where automated processes are self-contained, synthesized ones sprawl, taking in input from anywhere they can. Looking for a book to read? I see that you recently went to Mexico. I see that you recently bought a camera. I see that you're a man. Here's a book on Central American visual art through the ages. Is that what you were looking for?

It is the possibilities of synthesis that drive the mind crazy with wild concoctions of the future. A mathematician's wet dream. Imagine being able to derive value out of nonsense. The world is filled with noise--people walking, trains moving, wind blowing, seasons changing, what if there was a way to derive sense out of it? Pattern recognition is at the soul of innovation. It can create something entirely new, something that we, with a sea of noise constantly drowning it out, may not have been able to see before. And what's more, since derived insights themselves constitute a layer of data, these synthesizing systems can improve themselves.

Here is a hypothetical example. Say you have a sock drawer with socks of only 5 colors. When asked what sock to wear, the program draws out a random set of socks. Now you are able to tell it whether or not you approve.

Let's say you deem three of the five choices acceptable. The program takes your selection and modifies its next set to be slightly less random. In other words, the next set selected by the machine will be "weighted" in a particular way. The next day you are again presented with a set of five socks, except this time, you see more of your original choices in this set. You make another selection, and the machine adjusts its weight again, and then again, until finally you are presented with a pair that is just the way you like it.

This process of weighting and re-weighting decisions4 is how a system called a neural network operates. In the example above, all the network had to go on was your choices, but what if it could incorporate other data? Fashion trends of the day? Trends in how you tend to match your clothes? The season? All of this data could factor into how the weights are set, and could be used in adjusting how the network "learns". It is a fascinating area too broad to cover in this post, or even any one post alone. The point I'm trying to emphasize is that the final result is still speculation. The program is able to halt because it does not aim at precision. It is a great irony that a vague answer can be the most accurate one.

Let's get back to that pizza. Suppose you try to compute what pizza you should order. No program can tell you that exactly, but based on your eating habits, your preference for spice, your fitness goals, your dietary needs, one could come up with a list of possibilities. Having narrowed down that list to ones that you like, future recommendations will improve until the day you arrive on a choice of pizza that skims the asymptote. It may not be exactly what you want5 but it is somewhere in the ballpark.

So where is this going? My co-worker's friend sought liberation from "the box" by escaping the world of computation, but I think there may have been something he missed. That box that my co-worker's friend so strongly cautioned against is opening now, and whatever secret lightening lived inside is streaking into the world, separating the signal from the noise like hydrolysis. To those who are wise, crazy, or hopeful enough to chase it, the world is opening like an oyster guarding a pearl. Now is a glorious time to be alive.

There aren't many times in history when the world stands on the brink of metamorphosis. Einstein and Oppenheimer may have had to split the atom open to learn its secrets but all we have to do is collect data. Like panners that sifted precious metals during the late days of the California Gold Rush, there's gold in these hills. The two program(mer)s are right at the vanguard.

And the box? Just try to see the truth. There is no box. Freedom waits for you outside.

  1. ...cough cough ELB cough...

  2. For the math geeks out there, this also makes state-based computation a Markov process! But more on that in another post.

  3. formally called "backpropagation"

  4. But in a very real, computationally relevant way, who really knows what they want?