In my start-of-year post, I talked about the gap between what you can do according to how we think life works, and the set of things that are actually possible. The most interesting work is always in the gap, where you realize the rules people believe about the world aren’t quite accurate, and you can hack your way to doing something that was technically possible, but didn’t appear so in the beginning.
It turns out for most things that seem difficult or unlikely, you can just… do them. Want to be a professional musician? Pick up an instrument, learn some basics on YouTube, and start putting music online. Want to be a writer? Start writing consistently in a public space. Want to learn how to make your own programming language? A little searching on the Internet will land you on a few high-quality blogs that can take you from zero to one. The reason most people aren’t small indie musicians or writers or compiler authors aren’t because they’re that much more difficult than the things everyone does every day. Most people don’t do those things because they mistake the work required to be really good at those things for the work required to get started at all.
For things that appear to be difficult or time-consuming or impossible, a good rule of thumb seems to be that you can just give it a shot, and more often than not, becoming better at something is just a matter of giving it a shot, many times, consistently, over time. You can just do things. And the set of things that you can just do is much broader than most people realize. What’s getting in the way may simply be that you haven’t given yourself permission to start something because it looks daunting from a distance.
Often the immensity of a big, long-term project gets in the way of ever starting the project in the first place. When I first started working on my programming language Ink, I didn’t realize it would become the basis of a dozen other projects and evolve to have a compiler written in itself in two years. If my project goal from the start was “build a programming language that can be used to build real web apps, and also compile itself,” I would never have started. But instead, my initial goal was just to make the first stages of a small basic interpreter, then I incrementally added on bits and pieces, until the whole was bigger than anything I could have planned on building on day one of the project.
The easiest way to do something big may be to never notice just how big it is in the first place, and start chipping away.
Steve Grand writes in Creation: Life and How to Make It,
If an architect believes for a moment that there are hooks in the sky to hang his creations from, he may be able to conceive of structures that he would otherwise not dare to think about. Once the design starts to take shape, he may then begin to see ways in which the essence of it can still be achieved without the need for sky-hooks at all. Maybe this will work for us, too.
I think this is a powerful and motivating problem-solving tactic: assume that a solution exists somewhere out there, and do things that will increase the chances of you stumbling into one such solution in your exploration through the space of possibilities. Imagine the sky-hooks to your big ambitions, and work incrementally but consistently towards them.
Often, the only difference between what’s possible and what’s not is that the impossible things just have not been done yet. To do the impossible things, first, go ahead and try.
← On the edge of life and death
The long future of artificial intelligence →
I share new posts on my newsletter. If you liked this one, you should consider joining the list.
Have a comment or response? You can email me.