the end of code tinkering
A decade ago, when I began my university 'journey', I was amazed by the abilities of my fellow students. While I was struggling with System.out.println during an intro course, they were already tackling rendering in Java3D. During that semester, I learned more about properly naming classes and properties. I witnessed polite but sometimes heated discussions among students how to name this function to reflect its itention and soul. I realized that programming for some was an art form: how to communicate my intentions to computer, and later at work, how to compose programs that are understandable to my colleagues.
Frankly, I decided to study computer science because people said it could make you some good money. I wasn't really into getting the most out of C++ or making super-efficient algorithms. But at work, I realized that speed did matter; sometimes it was even fun! My friends from uni and work, though, were super passionate about pushing programs to the max. They took a great pride in their craft and held it as a badge of honor. They are great beast masters, communicators with powerful machines that can positively affect the workflow of millions of people.
For me? I just wanted to get stuff done.
While I read about the Gang of Four, Uncle Bob and extreme programming, it concepts never resonated with me. My goal was to automate processes and reach the end of a problem asap, coding was merely a tool to solve the problem. When encountering a challenge, I could spend hours attempting to solve it, similar to my colleagues. However, my attitude differed when I discovered that a single faulty line caused the entire issue.
Them: "Oh, I've been trying to solve that problem for hours and I did it!! Wow programming is amazing." Well, I felt the same. But when I found out that a simple omission caused the whole issue, I was more frustrated than happy. Why is it so bad that software feels like a house of cards? We are having terabytes of storage, 20-core processors, but we are still tripping over bugs caused by one faulty line of code?
With each situation like this, it feels like programmers are strengthening their mental barriers to avoid making the same mistake again. They're dedicating more time to writing clean code and thorough testing. More time to debate the best architecture. And even more time to understand what went wrong, detaching themselves from from the project and what is essential now.
Companies also want to address the problems, so they're looking to hire. But the team is devastated after a recent outage, bugs in production, and endless debates about the state of the code. They also want knowledgeable folks on board, so having a comp sci degree is essential if you wanna join the code-tinkering club. What's the outcome? Most candidates end up getting rejected. They'd be super stoked to join the team, learn, and create simple yet understandable code without all the abstractions. Too bad, folks—maybe next time! Meanwhile, the team goes back to tinkering, crafting even more complex interfaces (spending even more time refactoring tests), and increasing the overall complexity. It's not so much about addressing business needs but rather transforming their anxiety into confidence that this time, everything will work out just fine...
This can be delegated to LLM models like GPT4, but not everyone is happy about that. I'm sure a lot of tech people who hated that stuff will think: tools like ChatGPT are amazing! Will we stop trying to figure out what went wrong? Nope, we'll complain about confusing answers from LLMs and their black-boxy nature. This could make creating software way easier for everyone. You know how you've always wanted to make your own to-do list app or website but never had the time? Well, now it could be possible. The bar for creating everyday software will drop, by a lot. But for crafting valuable, complex algorithms and products, it's gonna be raised quite a bit.
I don't think programming is going to die; it will evolve into something new. Or might just change into something like 'computer communication' (I know, terrible name), where we focus on making tools to talk to computers better. Right now programmers are all about frameworks, platforms, and specific languages. But when it comes to communicating with models and creating software, we might need to change perspective (or have a paradigm shift, tbh). Instead of just making programs in a certain language, we could develop new annotation systems or languages to debug and make sure models are safe, with built-in protections against misuse. Professional software will require more skills than ever, but tasks like crafting our own tools, automations, and software will become way easier for most folks (and especially for newcomers), and they'll definitely benefit from it.
Is there hope for code tinkerers? Experts suggest brushing up on the foundations of machine learning. Someone will need to fix the black box. And hopefully programmer’s gatekeeping will soon be over.
"Not being set but flexible. Liberation from the uneasy sense of confinement. It is being wholly and quietly alive, aware and alert, ready for whatever may come." - Bruce Lee
Inspired by brilliant posts The End of Programming and When programming is gone, will we like what's left?