Alex climbed the entire mountain without any ropes or harnesses, leaving little room for error. The thing that kept me thinking about it was that when you free solo, mistakes are literally deadly. Alex prepared in every way to have perfect execution climbing, but if the wind picked up… He falls.
Just like it’s hard to explain the mind of free soloist, it’s hard for me to explain why I like less protection while coding.
Free soloing is when a climber has no safety mechanism and they ascend cliffs to heights high enough that falling can kill them.
A misconception I had about free soloists is that they always climbed without ropes. I thought they woke up, chose a brand new mountain, and just figured it out as they went.
However, I learned that they practice difficult areas with ropes over and over, until they’re comfortable. Only after a number of iterations of success do they decide to remove their protective equipment. Sounds crazy, because it is.
Everybody who has made free soloing a big part of their life… is dead now.
- Tommy Caldwell, Free Solo
It’s hard to comprehend why someone would be drawn to such a high level of danger.
As a developer, I’m very familiar with mistakes. A large part of the tools I use are to try and prevent me from messing up. Compilers, type systems, code reviews, pair programming, etc. All of these are there to protect me. But even with all this equipment, I still manage to mess up and bring servers crashing to the ground.
Coding mistakes are so prevalent in coding you could almost eat them for breakfast. It’s surely an impossible task to achieve perfect execution while writing code.
My imagination decided to explore the possibility of free solo coding. If I easily mess up with a bunch of equipment, how would I do without any?
Here’s a recent mistake I made, I’m glad it wasn’t fatal.
Of course, there have been a number of fatal coding mistakes that resulted in people dying. One example I immediately thought of was the 737 Boeing aircraft.
The majority of the time, luckily for me, mistakes are usually fixable and have little consequence.
I mentioned the idea of free solo coding to a group of friends. We came up with some pretty exciting versions of what would be required to be a free solo coder.
free solo would be like writing raw machine code directly
free soloing is hex editing Voyager as it leaves the solar system only to have it return as V’ger 300 years later to destroy you and humanity for your poor programming
I write bash scripts. that’s like free soloing without the chalk bag or a plan for where you’re going to drop a poo
- Jeff, Erik, and Alen
However, some questions still remained. Would we need to remove all of the protective equipment to get the true experience? How could we simulate coding mistakes being fatal?
As the conversation progressed, my friend stumbled upon a free solo coder.
I’ll admit, when my friend mentioned Ken Thompson and ed, I had no idea who or what they were. After reading wikipedia for a bit, it made a lot more sense.
Ken Thompson is an American computer scientist known for his work designing and implementing the Unix operating system. He also created B, a direct predecessor to C programming language. Nowadays he works at Google where with Robert Griesemer he co-invented Go, one of the most popular languages in use today!
Ed is a minimalist text editor created by Ken and one of the first parts of Unix. Ed is infamous for giving almost no visual feedback and also known as the “the most user-hostile editor ever created”. I didn’t really understand what it was until I gave it a try.
Seeking the true free solo coder experience, I opened up a terminal and typed
ed which starts the editor. Ed is perfect for free soloing because there is literally nothing there to help you. It forces me to rely entirely on my own individual skill and knowledge.
I tried to figure out how it works. Here’s my first experience.
$ ed hi ? help ? -h ? ^C ? ^C ?
Notice the feedback to literally everything is
?. It’s quite frustrating and largely different from what I’m used to with modern tooling.
After practicing in ed for a while I thought I had learned enough to attempt free soloing. I decided to write the frontmatter (or metadata) for my blog post. Surely I would survive such a simple task without messing up.
Here’s my attempt at free solo coding. Spoiler: I died.
$ ed a --- title: Free solo c̶l̶i̶m̶b̶e̶r̶ coder date: 2021-08-28T06:25:00Z --- . 3a image: free-solo-coding . ,l ---$ title: Free solo C\314\266l\314\266i\314\266m\314\266b\314\266i\314\266n\314\266g\314\266 Coding$ date: 2021-08-28T06:25:00Z$ image: free-solo-coding$ ---$ w context/blog/free-solo-coding/index.md context/blog/free-solo-coding/index.md: No such file or directory ? I hate you ? w index.md 108 q
The mistake I made was I misspelled
content and wrote
context instead. Ed let me know that the folder
context didn’t exist. I was surprised that I got some feedback other than
?. I’ll thank the 52 years since the creation of ed for that informative error message.
As I discovered with my coding session in ed, removing all safety isn’t exactly what I want, but it was exciting. Perhaps the unexplainable thrill free solo climbers seek is the reason I’m drawn to programming languages without strict type systems.
Type systems are constraints enforced by the programming language, or the computer, rather. Think of it like a parent watching a child by a busy road. There is no way she is venturing out past the sidewalk - the parent prevents them.
Ruby, a programming language, has a lenient type system and thus feels more free. I’ve always enjoyed the freedom, knowing that the system trusts me. At the same time, the system also lets me shoot myself in the foot. I’m okay with that.
For me, especially when I’m using Go, I often feel like I’m fighting the type system. I find myself converting data structures from one to another for no other purpose than to succumb to the demands of the programming language. I’d much rather have less.
It’s hard to explain why I’d want that, but so is free solo.
What I really wish for is to have a optional, work in progress, type system. Something that lets me disable the type system while I flesh out what I actually want to achieve. Something that trusts me while I experiment with different implementations.
The best example of explaining what I want is giving an example of what I really bugs me. Go throws an error whenever you have an unused variable. This means Go prevents me from running my program, until I’ve deleted everything that isn’t used. I think about my days in college writing a rough draft of a research paper, it made little sense to delete content while I was still discovering what I wanted to write about.
Same goes for writing a program, at first I’m still exploring what I’m trying to do. I don’t need the type system (or compiler rather) nagging at me. When I’m a bit further down the road, past the draft phase and into the publish phase, then I’d be okay with a bit more rules and regulations.
I know my wish will never come true because if you give a backdoor, it’ll most likely get abused, but I can still hope.
I may never know why I’m drawn to the danger of no type systems. Maybe a part of me is a free solo coder… Perhaps I’m just crazy for wanting less things protecting me.