With the rapid rise of artificial intelligence, there has never been a better time to produce digital products so quickly and with so little expertise. Artificial intelligence has enabled non-technical thinkers to create products with their imagination and ship them to production. As programmers, we are inherently curious about how things work and why. After all, what we do is program, not command and verify. Artificial intelligence has robbed us of the ability to be curious and, inevitably, skipped the learning journey.
Of course, I am not discounting the power of AI or its usefulness. I admittedly use it daily at my full-time job to help speed up the tedious parts of programming. I just have concerns that over-reliance on it will have similar effects on a programmer’s brain as social media and short-form content have on everyday phone users.
I picked up programming in my mid-20s by going back to university to learn Computer Science. In this time, I spent countless hours programming applications from scratch, debugging, pulling my hair out and running trial and error experiments. The time I spent in the trenches gave me the ability to deeply understand systems and build resilience when a system doesn’t behave the way it should.
Some of you may be asking, why learn the lower-level details when we can just ask AI to write it? My answer to that would be that we don’t know what we don’t know. How can we verify what “good” looks like if we never learned what “good” is? Do we just trust that AI (the accumulation of all the sub-par code on the internet) can tell us what “good” is? Skipping the learning journey not only robs you of the opportunity to produce quality work, but it also blinds you from knowing what quality is. If we continue this trend of vibing our way to a result, the AI cycle of training off real-world data will produce data that continues to decay and disintegrate.
Critical thinking is what will give you the edge over other programmers who are faced with the same crossroads as you. If everyone simply becomes prompt monkeys that just talk to an AI, what makes the engineering role special anymore? Your ability to understand the output of the AI, verify the quality of it, debug it and reverse engineer it will give you full control over the product you are shipping. You will have more performant code, a stronger relationship with your code, robust and well-tested code, better maintainability, clearer observability, etc., etc. When all of these tenets of good software are neglected by vibe coders, the pendulum will eventually swing, and the programmer who stayed true to learning will be in more demand than ever. Similarly to how people are willing to pay more for home-made or handcrafted products, rather than products that are mass-produced in a factory.
What happens when you write code yourself? When you write code yourself, you are making yourself accountable for what you write. If something goes wrong, you know exactly where it went wrong, why it went wrong, and how to fix it. If something goes right, you earn yourself a sense of accomplishment, you verify your assumptions and grow as a developer. The brain is like a muscle. If you don’t use it, you lose it. When you let AI write your code, you essentially become a spectator and a gatekeeper. With the overwhelming amounts of code that AI can produce in such a short amount of time, you eventually get fatigued from all the code reviews. This is when you start to accept all changes from the AI and hope for the best. You don’t gain any knowledge about how to solve a problem; you only learn what’s the best way to talk to your AI.
A results-first approach to programming has taken the fun out of it. One of my most important aspects of this job is that I love to do it. The dopamine hits you get when you solve a problem using a method you have never used before. It is all part of the fun. Enjoying the process is so important to sustaining a healthy relationship with programming. The grind, the pain, the joy, and the triumph are all the emotions needed to keep our monkey brains stimulated. Once you skip the learning journey, you remove the reason why you are doing the job in the first place.
So how do we balance learning and shipping code fast? I, of course, am not advocating for going back to handwriting code at all. I am just asking that we are aware of the effects of instantaneous results and that we embrace any opportunity to learn, use our brains and have some form of self-agency. I personally use AI for trivial tasks, such as refactoring code or auto-completion. When there is a tight deadline, I will use it more intensely, but I will always carefully inspect the results it produces. When faced with mathematical calculations, I actually do like to try to run the calculation in my head or write it down on paper. Even though I can just ask a chatbot in plain English for the answer, I have comfort knowing that I can still solve a problem, run a calculation or write a coherent sentence using my own brain when there is no internet present.