What is Programming Learning - or the Five Stages of Becoming a Great Programmer

Learning programming is more than becoming familiar with a programming language. Picking a good programming language and learning its syntax, however, is (only) the first step.

The Craftsmanship

  1. Syntax: This is the "alphabet" of code: the keywords, symbols, and structure that let you write valid programs. Mastering syntax means you can read and write simple scripts without mysterious errors - your "hello world" finally prints!
  2. Library: Libraries are pre-written collections of functions and classes that solve common problems. Rather than reinventing the wheel every time you need to parse JSON or draw a graph, you learn which libraries to import and how to use their building blocks.
  3. Frameworks: Frameworks sit on top of libraries to provide opinionated scaffolding for your entire application - think web servers, UI toolkits, or game engines. Learning a framework is like moving from Lego bricks to a whole Lego kit: you still snap pieces together, but there's a blueprint that guides you.
  4. Patterns: Design patterns are tried-and-true blueprints for solving recurring architecture and organization challenges (for example, Model–View–Controller or Observer). At this stage you start to think about "how should my code be structured?" instead of just "does it run?"
  5. DSLs (Domain-Specific Libraries): At this stage you dive into tools and mini-languages built for a narrow problem space - think TensorFlow or PyTorch for machine learning, OpenGL/Vulkan libraries for CGI, physics-engine APIs for simulations, SQL for databases, or even node-based shader graphs in Blender. These domain-specific libraries (and languages) let you express complex concepts in concise, expressive code tailored exactly to your field.

And after these five stages, you gradually get a better hang of what a complete program looks like and moving from a basic programmer to a software developer and eventually a software architect, but there's still more: multiple programming languages, cloud platforms, DevOps tools, performance tuning, security best practices, domain specific topics, and on and on. Programming is a lifelong learning journey!

Domain Mastery - The True Crown Jewel of Programming

Today, with AI-driven code generators readily handling syntax, libraries and even framework wiring, simply knowing the pieces isn’t enough. The real differentiator - the true "holy grail" of programming - is deep domain expertise: the ability to understand your field’s unique challenges and translate them into robust, maintainable code.

(Nowadays with AI code generators abundant, those few topics are becoming more and more foundamental and less and less dominant on its own, more importantly, it's the sixth stage:

Whether you’re building real-time control systems in robotics, designing quantitative models in financial analysis, architecting generative workflows in automated design, or tackling complex data pipelines in bioinformatics, it’s your specialized knowledge that unlocks the highest value. By combining programming fundamentals with in-depth subject-matter insight you’ll be the one guiding AI assistants and custom code alike toward solutions that truly move the needle.

Side Note

The same applies to designing a programming language - it's not just about syntax. In fact, a language can have extremely limited syntax (think of those node-based shader graphs in 3D software), yet still be powerful enough to express complex behaviors. What really makes a language useful is the combination of its syntax, built-in libraries, tooling, and the patterns you can build on top of it.