Me after debugging this one thing for three days only to find it was a single extra period.. (Matthew Henry on Unsplash)
The summer holidays are here. The high schoolers that make up a large portion of my friend group are rejoicing. For the first couple of weeks or so, everyone relishes just doing nothing. Then, everyone starts complaining again.
You see, listlessness overcomes most of these students eventually. During the school year, everything is so boring and stressful that everyone is sick of it almost all the time and feel restless as a result. But as soon as the holidays roll in and they think things will start to look up, they get bored quickly. I call the phenomenon âHaving No Intrinsic Purposeâ.
My sisterâs descent into a hollow existence is a classic example of this phenomenon. After a few fruitless projects, she hit a rock bottom: a week-long period filled with makeup tutorials on YouTube, mobile gaming, and social media. At the end of this period, she became more vocal about her suffering, and I was obliged to help. And thatâs where this piece gets technical.
She wanted something mechanical to do that didnât require consistent creative input. Her previous intellectual avenue, fiction writing, needed conscious mental exertion most of the time, hence her regular burnout. After a quick search for âvaluable skills to learn in 2018â, I suggested she do some programming. I suggested it because itâs quite safe to say that itâs a valuable skill going forward, and I do it too, and could help her if things got hard. On day one of her coding streak (at the time of writing), things are looking good. Engagement is high and general fulfillment in life seems better.
So you might be wondering: whatâs with the title?
The truth is, I donât write much code.
Iâm building a software business out of an idea management platform, but I donât write much code. Tian Ooi is the lead engineer. When I do code, itâs because thereâs some extreme circumstance (deadlines, sick leaves, etc.). Even then, I hate programming after about two days of it.
I hate it because the majority of programming that is done feels robotic to me. The daily work of engineers in my business involves many popular, well-loved technologies like React Native, MongoDB, and Ruby on Rails, so itâs not like weâre writing any assembly code or (God forbid) Java. Itâs just that programming isnât what I would like it to be right now.
The focus of most programming is to follow a well-known recipe that was created by a handful of really smart people.
The aim of programming is usually quite clear, and so is the process of getting there. You have a set of things to accomplish, and you make the code do it to a satisfactory degree. The problem is that without any warning, twenty million things will go wrong throughout the process of getting the code to do this. From my experience, not every single thing that can screw up will screw up. But things that should just work will end up screwing up instead, causing even more problems than anticipated.
Programming is tedious. No, itâs fucking tedious. This makes it impossible to be creative with code, because even conventional, common uses of code barely work. Coding is not yet at the point where you can just start writing it without a clear goal in mind. You canât explore with code, you can only build with it. In oil painting, this is like only being able to paint a picture that you have clearly in your head already. Itâs like every drop of color must be pre-planned and pre-calculated, and every random stroke that is made on the canvas will cause the entire canvas to catch fire.
What most of the code you write is: trash. (Steve Johnson on Unsplash)
Because most code is not complete enough to exist without enormous, explicit intent.
Creativity is hardly possible with programming because randomness is hardly possible in programming. There are well-defined ways things are done, and on the basic level thatâs fine. The problem is that most coding environments are designed to only accept a limited subset of predefined workflows. Hence, when programming, you have to stick to these few ways things are done, otherwise your shit wonât work. This has a couple of important impacts on the programming experience:
First, venturing beyond the abilities of those set workflows is nearly impossible, or so unpleasant that you might as well not even try. Thatâs why new workflows are constantly being made in the form of new languages or frameworks. Yes, all the programming that has ever been done to this point could have been written in binary. The only reason this isnât done is because there arenât enough people who are that insane.
Second, when different, advanced things actually do need to be made, they have to stick to those few set ways too, and that makes the experience of programming them immensely difficult. This sounds like a restatement of the first point, but Iâm trying to highlight the experience here. Programming in this situation can be truly, universally, objectively hellish.
Everyone reading must understand this, and I feel that some readers unfamiliar with the tech pool might have difficulty understanding the nature of this suffering. So I came up with a close analogy: imagine youâre tasked with moving fifty watermelons from point A to point B, which are 30 miles away, within the span of six hours. You have a truck that can fit all fifty watermelons in it at once, easily.
Sounds like an easy solution, right? Just load the watermelons into the truck and drive to point B. Six hours is plenty of time to do that, right? Well, depending on what type of programming weâre talking about, this scenario could play out a few different ways for a programmer.
If youâre a C developer, youâre already screwed because you forgot to import anything. Also, your truck is full of garbage, rendering it unusable. If youâre a Javascript developer, youâll be able to start loading the watermelons onto the truck, but halfway through youâll be stalled by circular dependencies on 6 of your 79 npm packages. If youâre a systems developer, you havenât even got the truck, so you instead choose to harvest the seeds from some of the watermelons, jog the 30 miles, and plant the seeds at point B, hoping that youâll grow 30 watermelons there eventually. If youâre a Ruby on Rails developer, the truck is actually self-driving, so all you have to do is load all the watermelons. But in the process, you used an ActiveRecord method wrong and now all your watermelons are actually avocados. But on the bright side, youâve also got 24 different cookbooks on how to prepare avocados.
See? Itâs that infuriating. Seriously.
Photo by Dmitry Bayer on Unsplash
Programming is too unnatural and un-intuitive to be creative with.
Iâm not saying current programming technology is awful. Code is responsible for an incredible array of modern things like jet planes, computers, the stock market, and, soon, maybe even sentient intelligence. Iâm just asking you to stop debugging that gradle error for a minute and imagine what would be possible if we could code as easily as we can draw a picture with a pen on a piece of paper. What if we could make an app as easily as we could describe it with a few sentences? What if we could create the logic for a robotic arm using the relationships we can already express about it physically? What if we could write code thatâs so safe that we could randomly experiment with it to discover new things?
There is enormous power available through coding that would be more accessible, predictable, and potent if it were just more pleasant. If you donât believe me, try learning to code yourself. Your first month will be an ecstatic high where you feel like you have control over the entire galaxy. But as soon as you try and do any real world things with code, like put a software product on the market, youâll see what I mean. Thereâs a reason life in Silicon Valley tech companies is so stressful. Thereâs a reason engineers are paid so well at competitive companies that rely on this technology.
How do we make coding great again?
On a personal scale, if you remove all the pressures on your coding activities like deadlines or concrete goals, and instead focus on just the learning experience, you might enjoy it for a long time. You should be aware, however, that the industry is dominated by people who code for twelve hours straight six days a week. There are rare cases where some twelve year old comes up with self-aware artificial intelligence after two months of weekend coding sprees, but trust me, itâs not that easy.
On a bigger scale, we programmers are the ones who should take responsibility:
The only reason we should be writing code is to ensure we write less code tomorrow.
We should be making tools that enable people to do something with code and just have it work. Or at least, we should make that even remotely possible a bit more frequently than 10% of the time. We should be coming up with creative ways to turn simple project requirements and restrictions into safe, scalable code rather than inventing more and more abstract ways to represent information and relationships with code.
We should be making coding easier and more powerful. When we do that, weâll unlock the creativity of so many more people. When we make code more self-functioning, weâll make so many jobs that much more pleasant. More importantly, we can get on with our lives. Weâve wasted enough time already.
Come on, people. Coding is a pain in the ass. Itâs a pain in the ass way too often. You know itâs true. Itâs time to debug this shit and focus on the impact of what we make, rather than how to make it.