I am writing this blog post in conjunction with me working towards solving all 10 years of Advent of Code problems. At present I’ve tackled 2015 (here) and 2016 (here) (github), so 8 more to go! I love learning, but with the advent of LLMs (Large Language Models – like Claude, Deepseek, ChaatGPT, Gemini, LLama, check them out for yourself!), there’s some very real concerns to talk about. Is learning how to solve problems like these still worth it? (of course, it’s fun) Should anyone even still learn how to program? (absolutely).
Our brains can be viewed as a muscle, but contrary to other muscles in our body, when we learn it doesn’t expand – at least not outwards. When we learn, the number of connections in our brains grows and strengthens. Since brain changes are not visible to the naked eye, I will first use the analogy of strengthening other muscles (i.e. exercise), then relate it to our brains (learning) and finally, how LLMs might impact that.
There are four key points to the process of improving that I’d like to highlight and reference as I’m writing about this topic:
- grounding (our starting point)
- exploring the unknown (learning new things)
- repetition (solidifying existing knowledge)
- connecting the dots (augmenting our knowledge in different areas)
Side note, I’ve written a couple of blog posts before on this general topic, such as comparing university and bootcamps, and some thoughts on AI.
Exercise
As an example of training our muscles, I’ll use running. Perhaps we want to run a marathon or simply get “in shape”.
First we obviously need to know where we are right now. Grounding is a good word for it. When’s the last time we exercised (has it been months or years, or was it more recent)? Did we ever practice running before in our lives?
If we already know the drill, then perhaps we can skip right into doing it. Figure out when we’ll have time to run and get to it. Rinse and repeat. With it, also exploring what our body can currently handle and where can we push ourselves to start building muscle and being able to run more and more.
On the other hand, if we have no idea what we’re doing, then perhaps we need to learn a few things first (exploring), including asking others for help, coaching or just moral support. Do we need to buy new running shoes? What kind? Are running socks important? Do we want to follow a specific regiment like couch to 5k? Do we try at our own pace and listen to our body? Is there a running meetup we can join? Or do we have a running buddy? When can we do it (what time of day)? Do we want to run outside or indoors, or a combination (depending on the weather)?
Keep in mind a lot of these questions we may not think of initially; we might get to them once we actually start running and see what obstacles we’re dealing with. Are there things in our day that can be moved around for us to always run at the same time? Do we need to wake up early? Do we need to always stop at the gym right after work?
And then finally, the connecting part. Here’s the thing. I highly doubt anyone starts running because they love it from the start. And even if someone does, I’m sure eventually they get tired of it. In order to keep going and improving, the activity somehow needs to connect with us. Whether that means building a routine and making it automatic, or perhaps recognizing that our brain is working much better if we’re exercising (mens sana in corpore sano as the latin saying goes). Whatever it is, it somehow needs to make sense to us, to our very being, so that we keep on with it (repetition).
On top of that, running itself can help us think and give us ideas (more connecting) on how to solve some other problems that are on our mind.
Learning
I guess I could call this mental growth or stimulation, but to keep it simple, just call it learning. I’ll use the example of Advent of Code.
Every puzzle obviously begins by both grounding and exploring. Even if ultimately I figure out a solution relatively quickly, it’s still a matter of understanding what the puzzle is asking for. I will always try to think if I have the tools necessary to solve it and if I do, I’ll try it. Repetition. Sometimes that works, and I’ve just refreshed my memory and moved on. Other times, I run into a brick wall. And I need to explore other options, including doing more research online or asking others for help. For example, in the 2016 cases I’ve learned of the structure in python called “deque”. It’s essentially an optimized version of lists if we’re adding or taking out elements from its beginning or end. And it can be used to effectively replace recursive functions (exploring, connecting).
An even better example is actually a puzzle that I did I think in the 2023 AOC (that was my first year learning of it). I didn’t yet finish that one as I got busy with other things. Anyway, there was a particular puzzle where I was able to figure out how to trace the path in a two-dimensional space. Super fun. But then I had no idea how to calculate the area. That lead me to explore and understand the difference between left and right-bound polygons and solve the puzzle.
But there was another very real connection that actually came months later. At work I began using geopandas more. And that package is built really well and can easily draw geometric shapes, regardless of their orientation. Just using gdf.plot() or gdf.explore() with set geometries, EZ. However, I was trying to draw something using plotly. Aaand it broke down in one of those incomprehensible python error traces that might as well have been written in Cyrillic. No idea WTF it said. And searching online wasn’t getting me any closer. But then I had one of those AHA moments, thinking … wait a second, could it be that the geometries are not wound in the way plotly expects them to be? That was exactly it. I needed to re-wind the geometries in order to make it work with that particular library. Solved a work-related problem by playing around with advent of code for fun.
The LLM conundrum
So what does all of that have to do with LLMs? Well, the LLMs can, at every single stage of this process make it much easier to solve and shortcut. In fact, most AOC problems (if not all?) you could just dump the entire text into an LLM and ask for a solution with a particular programming language. Bam, solved, moving on. And in doing so, we’d skip all of the grounding, exploring, repetition and ultimately connecting.
How are we going to be able to solve new problems if we don’t understand the basics? Will we be able to be creative if we don’t struggle through various different challenges, giving us a breath of varied experiences? When there’s shortcuts available for everything, what’s stopping us from using them all the time? And when the shortcut breaks, how will we know what path to take? How to break things down if we don’t even know where to start?
I think this is where we need to be very honest with ourselves and keep examining what we actually understand and what not. Use the tools that are available to us for sure (and that includes LLMs), but make sure that we continue to struggle and think. Because if we don’t … well, we don’t want to end up like humanity in Wall-E, do we?


Leave a comment