The quest for the perfect stack

I was reading a blog the other day and I really liked the tagline:

Pursuit of a perfect algorithm

Its whimsical and meaningless (perfect algorithm for what task? With what users?). But it speaks to something. Its as if Design Thinking is some civilised front on a beast within me, and it speaks directly to the beast.


I love mechanical sympathy in my work. I love writing in C, not because its hard but because there's not much room between me and the computer. Earlier I was reading an article about the first hackers at MIT. They didn't have computers yet (not really), so they spent their time messing around building and refining an obnoxiously complicated model train system.

Why don't people still do things like that? I'd love to make a huge model train system. If I had a time machine I'd totally go back in time and join them... Really I don't need a time machine. I mean, I could do it anyway, but I won't. Somehow its not the same now that we all have smartphones in our pockets.

The puzzle is: Why not?

I don't have a good system 2 answer, but my gut says it feels the same as going back to a level 1 area in world of warcraft and doing all the quests.

Back in the late 50's it was impressive making this stuff work at all. The rules of their environment were static - they could use anything they could get their hands on, but mostly that consisted of wires and switches. Together that formed a simple set of pieces. To make something complicated they'd need ingenuity.

Even when the price of computers started dropping this was still true for awhile. Computers weren't big enough to be able to get away with anything. When I was a kid I played dozens of my uncles' old games on the atari 2600. Those things have 128 bytes of RAM. So, you have less than the size of a tweet to store everything about the state of your program.

Atari 2600

My phone has 2 gigs of ram. Which means that my phone has almost the same amount of ram as all 30 million atari 2600s sold, put together. I don't know when, but once you've added enough zeros programming starts feeling different. Maybe its because with the 2600 if you couldn't get something working, that was normal. Your tools were primitive enough that you needed to be inventing constantly to create. Today there's 20 ways to do everything and if you don't know the fast way its your fault. The word Engineer in german is Ein Genie, which literally means "A genius". You don't need to be a genius to program anymore; you just have to show up and memorise everything.

Even making model trains has been tainted. Microprocessors are so cheap now that a couple of dollars will buy you something that can run javascript.

We went from a skill which required not much knowledge but lots of insight and replaced it with something that needs no unique insights but lots of knowledge. It used to be an achievement to make something. Now its just a disappointment if you don't.

One way to reclaim that young hacker spirit is to artificially limit the set of tools you can use. Games are good for this, like TIS-100 or Factorio. In meatspace you can still limit yourself, but now the accomplishment isn't to do the thing at all, its to do it without using tool X.


I don't have words for this sort of engineering, where you're aiming to program with mastery. I know I'm not alone in wanting to put hard intellectual work into what we make. I get hints of it here and there. The modern mantra is 'user first'. I care about my users, but thats not why I program. I program for the craft. I program because I'm also searching for the perfect algorithm, the perfect stack, the perfect way to express myself through code. I want to make the perfect train set - and go to bed thinking about ripping it apart and remaking it tomorrow.

Everything else is boring.