counter easy hit
How to find ideas for first projects
How to find ideas for first projects
July 21, 2020
Learn to code in 100 days
Learn to code in 100 days
July 24, 2020

How to go from a beginner to an intermediate programmer

How to go from a beginner to an intermediate programmer

How to go from a beginner to an intermediate programmer

The path you should take to go from a beginner to an intermediate programmer can be confusing, and I’ll try to make it easier for you.

I’m now finishing my degree in Mathematics – the majority of my programming knowledge is self-taught. I’ve interned at IBM, and a startup backed by Sequoia Capital (top 3 venture capital in the valley). I was going to intern at FAANG this summer but my offer, unfortunately, was rescinded. I don’t consider myself an intermediate in the real world. However, if you tell me to build a Trello/amazon/Instagram/twitter clone, I can do it.

The advice I’m going to give you is what I wish I received when I started coding. I strongly believe people can get to my level in half the time I took. Consistency and intensity >>> years of experience. As a non-coding example, I recently picked up a new hobby, dancing, and freestyling hip-hop/urban. I was able to catch up to dancers who danced for a few years because I was consistent, had intensity, and practiced deliberately.

You can do the same with coding, programming, and software development.

I started coding at 16 years old, and am 21 now. For the first 4 years, I was stuck in tutorial land. Doing basic HTML/CSS/Javascript, never pushing myself to harder resources. I literally read this HTML&CSS book front to back TWICE. I would follow tutorials that I knew how to do because they made me feel good about myself. The problem is that I wasn’t learning. Don’t do what I did.

The DEFINITION of learning is to move from a state of understanding less to understand more. In order to learn, there NEEDS to be an inequality in understanding. If there’s no inequality and you’re agreeing with everything you’re reading/listening/watching to then you’re not learning. So don’t be discouraged if you’re struggling to understand more intermediate resources. That just means you’re learning.

You might also like: How to find ideas for first projects

After you know your basic variables, control flow (if statements, loops), functions, gtfo out of the tutorials, and start moving to intermediate concepts. You will 100% struggle, and you might find gaps in your knowledge and foundation. That’s a good thing. You caught it early. Go back to the basics and make sure there are no gaps or false confidence in your understandings.

Don’t make the mistake I did. Move to more complex tutorials, and challenge yourself. Struggle with the material.

Now, the path I’m going to talk about relates to classical engineering and computer science concepts. On top of web/mobile development, it’s important for developers to become comfortable with concepts like object-oriented programming (OOP) and data structures/algorithms (DSA). They round you out as a software engineer.

There is a long journey before knowing how to go from a beginner to an intermediate programmer

OOP/DSA concept

You can learn OOP/DSA concept while you’re learning web/mobile dev. They supplement your learning. You’ll also realize that these patterns and algorithms are used in frameworks/libraries like React, Vue, Express, etc. Also, big companies like FAANG interview you on OOP/DSA. These big companies pay big money. Whoever said no to money?

However, if you need learning paths for web development, you can check out these two resources. Save this post for later. These two videos were created by whatsoever. He went through something similar to my experience (dabbling around for 5 years before he got serious). These two videos are some amazing stuff.

frontend roadmap

backend roadmap

If you’re ready to learn about OOP and DSA (data structures and algorithms) I have a channel that will be teaching all these concepts, but more on that later.

Here is the path you should take when learning OOP. I can also create a post that outlines the path for DSA is people are interested.

Here’s how to go from a beginner to an intermediate programmer:

  1. Pick your language
  2. Learn basic OOP principles
  3. Learn CLEAN and S.O.L.I.D code
  4. Know about Design Patterns
  5. Learn about Domain-Driven Design

Pick your weapon of choice

You can choose any language that has support for OOP, it’s your choice. Just make sure to stick with it. Java, C++, Python, Typescript. My advice would be to choose the language you’re creating applications in. If you’re creating web apps with python/flask, choose python.

I’m guessing that since you’re on this subreddit, you’re writing web apps in React, Vue, Node/Express. So choose Typescript. (My channel is focused on Typescript for example because I’m a full-stack javascript developer). This is a crucial part of knowing how to go from a beginner to an intermediate programmer.

You might also like: Git and GitHub for beginners

Basic OOP principles

You need to have a solid foundation of OOP principles before you jump into the advanced concepts.

Learn these concepts

  • encapsulation

  • abstraction

  • inheritance

  • polymorphism


Learn CLEAN and S.O.L.I.D code

Learning how to write clean and SOLID code is important no matter what paradigm you program in OOP or functional

Clean code

  • being consistent

  • meaningful variable names

  • writing pure functions

SOLID CODE Taken from this post

S for the Single Responsibility Principle(SRP), which guides you in creating classes that are responsible for one, and only one actor.

O for the Open/Closed Principle(OCP), which makes your code easy to extend by ensuring that it stays open for extension but closed for modification (this might be the most important of all 5)

L for the Liskov Substitution Principle(LSP), which keeps semantic consistency in complex inheritance hierarchies, making your classes easier to understand and use.

I for the Interface Segregation Principle(ISP), which protects objects from depending on the behavior they don’t really need.

D for the Dependency Inversion Principle(DIP), which controls the direction of dependencies in your code, ensuring that it always flows in the direction of more abstract entities.


Design Patterns

This is the bread and butter of object-oriented programming. Design patterns are typical solutions to commonly occurring problems in software design. They are like pre-made blueprints that you can customize to solve a recurring design problem in your code.


When I read, I want to truly understand. I get the best books and read them at the same time (concurrently) instead of a linear fashion. For example, if there’s a chapter about topic X, I will read each book’s chapter X. This way you understand the topic from different perspectives and examples. (IMO take this technique with you in your programming career no matter where you go). You can also go ahead and just pick 1 if you don’t have time, you’ll still be fine.

You might also like: The misconceptions about a programmer’s life

Domain-Driven Design

Apply everything you know back to modern-day web application development with domain-driven design. Domain-Driven Design is the idea that your code is structured, architected, and modeled according to how your business operates, making communication between stakeholders and engineers much cleaner.

The book that everyone recommends is the “Blue Book”.

However, this is getting a bit outdated and hard to read.

I recommend you to read Implementing Domain-Driven Design instead.

There are more advanced concepts, but I haven’t got there myself. Check out this post by Khalil Stemmler for more information.

Conclusion This is going to take a LOT of time to learn. Just because you can read the path/outline in a few minutes doesn’t mean it’s going to be easy. It’s going to take a lot of hard work, and grit. But there is a light at the end of the tunnel. Trust me.