📝 Author's Note This article was originally written for and published on the Nearsoft (originally in Spanish) blog.

Throughout my career I’ve noticed many books and courses that promise to teach you everything you need to know about a programming language or software methodology in 24 hours, 7 days, or a month. This idea always struck me as curious, even back in college, and I confirmed it was largely a fallacy once I started programming professionally.

Learning that way in such a short time means going from beginner to master in 24 hours, 7 days, or a month. That’s practically impossible unless you already have deep knowledge in a discipline that heavily overlaps with the one you’re trying to learn.

Through my own experience and with the help of colleagues and mentors, I’ve come to see that there are four broad stages every programmer goes through on the way to advanced software engineering knowledge: Novice, Beginner, Intermediate, and Advanced. These apply to the professional world and are based on the Dreyfus model of skill acquisition, originally proposed at UC Berkeley for the U.S. Air Force Office of Research.

  1. Novice. The person has started learning the fundamentals and has a lot of room to grow. They’re picking up core concepts — inheritance, encapsulation, abstraction, polymorphism — mostly in the abstract, without much depth yet. They can’t complete tasks on their own. Using a hunting analogy: they know a lion exists and that it’s dangerous. But the lion would hunt them, not the other way around.

  2. Beginner. They have enough skills to succeed in their role and genuinely understand software engineering concepts. Their knowledge goes deeper into the specific technology they use — things like LINQ, generics, and extension methods in C#. They can solve problems without help. In the analogy: they can hunt lions, but with guides who lead them to the pride and warn them when one charges — and who might step in themselves if the lion is particularly nasty.

  3. Intermediate. They know which technique to use and when. They can rationalize why things work the way they do, and apply concepts across different contexts — understanding not just how, but why certain patterns work sometimes and fail other times. They’ve mastered their tools (IDEs, languages, RDBMS) and can handle ambiguity. They know advanced universal concepts: composition over inheritance, design patterns, asynchronous programming, unit testing. In the analogy: they hunt lions alone, in record time, and can coach beginners. If someone asks for a coat, they already know you have to go hunt something first.

  4. Advanced. They can do this in their sleep — and have probably debugged something in a dream. They have a solid, internalized understanding of programming and take an active role in leading and teaching others. They understand techniques that transcend their niche: AOP, functional programming, software architecture, when and how to apply each. They define the approach, not just follow it. In the analogy: they train other hunters, know to move downwind so the lion doesn’t smell them, and invent new techniques. They’ll also take down the occasional bear, even though lions are their specialty.

After these four, there’s a fifth stage that very few people pursue — and that most managers don’t actively push for, since it actually lowers raw productivity. This stage is about research and extending known techniques to solve entirely new classes of problems. In the analogy: this person hunts lions, tigers, bears, and even the Yeti. They give weekend talks about having bagged five Yetis on time and under budget, and their closing slide explains why Gantt charts aren’t the right tool for Yeti hunting.

A newly graduated engineer typically lands at Beginner, though it’s not guaranteed — some stay at Novice even after graduating. Research suggests productivity actually dips when moving from Beginner to Intermediate, then rises sharply through Intermediate and Advanced. The jump from Beginner to Intermediate takes roughly 6–18 months; Intermediate to Advanced takes another 18–36 months. Getting there is not automatic — it depends on the projects you work on, your enthusiasm, and the mentors you find along the way.