Hello Codeforces!
Lately, I’ve become deeply immersed in the world of competitive programming. For me, at least, this has meant a commitment to studying every aspect of it in depth, with the goal of “learning it the right way.” Like many others, I began with the basics—identifying which problems to tackle, figuring out how to practice effectively, and learning how to keep my motivation up during the inevitable struggles. I grappled with questions like whether or not to read editorials. But as I delved deeper, I found myself contemplating broader questions: How do we truly learn? And perhaps more importantly, how do we process and retain information when we’re trying to master something as intricate as competitive programming?
Like any curious person, I dove headfirst into this exploration, and I was surprised by the sheer volume of posts on this plataform that touch on this subject. There are masters who have ventured into the psychological depths, crafting entire articles that dissect how to learn effectively, tailored to different types of learners. These pieces are an invaluable resource, offering insights into how we can better approach our learning journeys.
However, there’s a glaring gap in some of these discussions—how to teach and how to explain—especially in a field as complex as competitive programming. And I believe this is an area that deserves attention, as it extends beyond the individual struggling to learn and touches on a broader issue.
Perhaps learning how to teach and explain isn’t something everyone needs to pursue. For most of us beginners, the primary concern is simply mastering the topic at hand. In the context of competitive programming, the idea of teaching or explaining concepts clearly seems distant and irrelevant—after all, why would a newbie like me worry about teaching when I’m still grappling with the basics? This post isn’t a tutorial; it’s reflective in nature, a way for me to explore and articulate my thoughts. I hope, through sharing this, to receive recommendations, insights, or even just opinions from those who’ve been through similar struggles.
The motivation for writing this post comes from my years spent in the traditional education system, where I encountered many teachers who, frankly, didn’t teach well. When I finally ventured into the unfamiliar territory of competitive programming, I was hit hard by a similar realization: many editorials, algorithms, and data structures were difficult to grasp—not because of what they were, but because of how they were explained.
Competitive programming is hard. We know that. But it’s not just the complexity of the problems; it’s also the way these problems are presented and explained. After spending a considerable amount of time trying to understand these concepts, I noticed that many explanations skipped over crucial parts—like developing an intuitive understanding or nurturing a love for the problem itself. This makes any CP youtuber explaining intuition feel unique (i.e.: Back To Back SWE, Decoding Intuition , Errichto , etc...) Often, editorials dive straight into the solution, which can be necessary, but what happens when the real value lies in loving the problem enough to truly understand its deeper meaning?
I know that criticizing an editorial as “incomprehensible” requires evidence, and I could easily list twenty links to explanations that left me confused and frustrated. But I trust I’m not alone in this experience; surely, there are more than just a handful of people who resonate with this perspective.
And don’t get me wrong—I don’t just passively read; I practice, a lot. Maybe not as much as I’d like, but enough to see steady progress and growth. Yet, despite all this practice, I still encounter the same issue.
Initially, I assumed my difficulties stemmed from my inexperience. I thought I didn’t understand certain editorials because I was a newbie. But now, even when tackling relatively simple problems, I find myself confused by explanations that seem to skip over important details. It feels as though these crucial steps are left out, possibly because many of the authors are experts who’ve been immersed in this field for years.
Before, I convinced myself that I was the problem for not understanding the editorials, especially those involving mathematical concepts I supposedly should have known beforehand. To bridge this gap, I began reading Concrete Mathematics, a wonderful book that delves deeper into the mathematical foundations relevant to competitive programming. However, even this book wasn’t without its challenges. There were times when I stumbled upon problems that the text described as “**trivial**”, yet I found them anything but. Despite being true to intuition, things like this happened. This only strengthened my resolve to explore these issues further.
Then, I ask: Is the problem with how these topics are being taught? Is it that the full process of the solution isn’t shown due to laziness? Does it take too much time to pay attention to the explanation of a problem? Or is it us, the ones who don’t understand, who are truly “not understanding”? I hope it’s clear where I’m heading with this. However, I repeat the question better.
Where does the true challenge lie? Is it in the complexities of the subject matter, the way it’s taught and explained, or the gaps in our own understanding? That’s the question we need to explore.
I encourage anyone to try to learn how to explain a topic, because doing so will allow you to learn that topic. Teacher and student learn equally in that sense.
Thanks for reading!