Python Principles

A roadmap for learning to code

This post describes what the overall process for learning to code is like. Reading it should give you an overview of what you will be learning as you progress from being a complete beginner to programming at a professional level.

Three stages of learning

Learning to code can be split into different stages: beginner, intermediate and advanced.

In the beginner stage, the focus is on learning the fundamental building blocks of programming. The beginner learns new concepts and practices applying them.

In the intermediate stage, the focus is on becoming fluid at combining the building blocks into increasingly complex programs.

In the advanced stage, the focus is on managing complexity and having a breadth of knowledge.


All programs are built up from simple building blocks. Professional software developers use the same building blocks as beginners -- they just put them together in more clever and complex ways.

Some examples of building blocks are functions, conditionals, and loops. All programs are built from a combination of these.

There aren't that many building blocks; perhaps there's a dozen. To get past the beginner stage, it is necessary to understand each building block and know the syntax well enough to be able to use it. You can refer to our Lessons list to get an overview of what there is to learn. After learning all of these concepts, you're essentially past the beginner stage and ready to tackle your own projects.

In addition to conceptually understanding each building block, it is also crucial to become familiar with the syntax of it: the how of programming. The beginner must learn precisely which symbols to type in which order to make the computer understand them.

It is crucial to have enough practice actually writing code with each building block that it can be naturally used in different contexts.

To summarize, before this stage, the programmer knows nothing. After this stage, they are familiar with the terminology and can use the different building blocks.


In the intermediate stage, the programmer can use all the building blocks. However they do not yet have much experience combining these building blocks to create useful, realistically-sized programs.

There is not much conceptual learning in the intermediate stage. Instead, the focus is on craftmanship and gathering experience. To get beyond this stage, the best approach is to build real projects.

Before this stage, the programmer is only able to solve toy problems. After this stage, the programmer is able to solve real problems and develop small projects.

If you are at this stage, have a look at our Project Ideas blog post and pick a project that is interesting to you. Complete projects to build up a portfolio and gather experience. Once you have a few projects down, you're essentially employable!

Another option to increase your skill is to use the Challenges section of this site to practice on more difficult problems.


In the advanced stage of programming, the focus is on learning techniques that make developing even huge, complex programs manageable.

It is difficult to make a comprehensive list, since there are so many factors that all play a role. But we will list some prerequisites.

Having a breadth of knowledge becomes necessary. The developed programs should scale well, which requires a deep understanding of algorithmics. They should be reliable, which requires good software architecture and could involve using a test-based development approach. They should be secure, which requires understanding common security pitfalls.

The advanced programmer should also have mastered various programming tools, such as version control systems and their preferred editor.

At this stage, design and architecture start to matter significantly, to make large code bases maintainable and relatively bug-free.

There are many other things to learn than those we have listed, but once you reach this stage you'll have a good idea about these things already.


In short, following this roadmap will get you sufficiently skilled to be able to complete your own projects and be employable as a programmer:

  • learn all the building blocks conceptually
  • practice enough with each building block to be fluid with it
  • complete 2-4 larger personal projects of gradually increasing difficulty

You can use our interactive Lessons to effectively master the building blocks. Each lesson explains a concept and ensures you have plenty of practice with it. Once you are past the beginner stage, we are also happy to help you one-on-one with projects if you get in touch via Discord.