How to get hooked on programming
I hated math growing up. Except for very rare exceptions, math exercises were the worst kind of task for me. I remember being given the deeply unrewarding task of memorizing proofs and regurgitating them back during highschool, and how much of a miserable experience it was. Proofs can be interesting, elegant in their own way, new knowledge being created line by line. But during an exam, they’re just a cruel memory test. Each step is unique, distinct, and once you forget one, you have to reinvent math on the spot. That’s a tall order, considering that it took a lot of effort by some very bored geniuses centuries ago. My chances of getting it right during the last 20 minutes of an exam were, frankly, not great.
Physics was better. You still had a single answer you had to reach, but the process was much more flexible. In the most enjoyable parts of physics you have to memorize a few formulas, and then you get to use them as tools to describe your problem, tinkering your way toward a solution. The problems make more sense to me, less abstract, and if you understand the basic concepts you may be able to reason your way out of trouble.
Then I discovered programming, and what can I say: It was bliss. You get presented with a problem with infinite solutions, and all you needed to get started was learning some very few, simple tools. You build absurdly complex systems out of tiny, colored blocks, ifs, fors, and elses, and it all somehow works. Then the floor is yours. No set paths, no truly optimal solution. A balance has to be struck every time. Do you want cleaner code, shorter code, faster code, or just code that actually makes sense tomorrow?
It's the freedom that makes it click for me. It's LEGO, minecraft, painting - whatever you want to call it, and after you are done writing your solution you get to push a button and see the machine react to your instructions. Or maybe it doesn't! Still, what a delight it is to see the machine run, even when your instructions are wrong! Unlike a math test on a static page of paper, a staring contest between an idiot and the math-that-will-not-be, looking back at you in disbelief at the horrors you've written, you get instant feedback on what you’ve done. When you make a mistake in your code it's all there, it screams back at you, highlighted in red and underlined with a squiggly line. You get to retrace your steps, follow the logic, and fix it in a pinch. The realization is much nicer, the mistakes, at least the basic ones, easier to correct, just a line here or a semicolon there.
Enjoyable problem-solving and thinking tools
Have you ever played a puzzle game? My first experiences with puzzles were as distractions within other videogames, a way for the developer to switch things around from the standard looting and shooting, and those are almost always boring. Because the game is about adventuring, or shooting, or climbing, or whatever, they can't make the puzzles too challenging or engaging. They’re usually just a perception check or some very basic pattern recognition.
I've always fixated in the mind-numbing experience of entering the solutions. Once the puzzle is solved in your head, walking around pushing slow moving blocks for 5 minutes to input a solution is not interesting. The challenge is gone, and during that time we are just an overly-designed character in a very unusual room, being guided by a bored player, waiting for the real game to start again.
Programming can be like that. I like solving the puzzles enabled by programming, but eventually I get tired of entering the solutions. The first time you implement something new is challenging, the second one is rewarding, the 10th? Pass. I've already seen that particular arrangent of if's and elses before, I've already crossed the Ts and dotteed the Is for those same edge cases. Which brings me, inevitably, to the new tools added to my game: the ones that think back.
Today, when programming, LLMs are entering the solutions for me. I get to solve the issue in my head, design and describe what to do, and see if I am right even faster than before. I can see the LLM working through my instructions, implementing my solution the best it can. Cursor and other LLM-integrated IDEs are great in that regard. You can see the code appear at lightning speed, with a show of color and flashing lights that almost seems designed on purpose to feel like a casino machine.
However, as the agents increase in capabilities, ever more autonomous "let-me-solve-that-for-you", it feels off. The solutions they offer often work (this very blog is proof of that, I paid a miserable half a cent for it to the Anthropic fellas, pray for all Junior developers). But the solutions were not mine, so I did not care for them. I did not get to solve the puzzle.
Soon enough, my beloved toolset of if-and-elses will still be useful, but not needed. And that’s fine. I figured out that the puzzles were the fun part all along. When the agents finally do all the important thinking for us, I’ll still be here, solving different problems, having fun.