Everyone always ends up recommending what worked the best for them. Follow a tutorial, just build things, read a textbook, you have to do a bootcamp, have to get a CS degree, contribute to open source, etc.

Ultimately, I think the secret formula is pretty simple, though not easy. Absorb new information, build something using that knowledge, repeat. Obviously, first you need to pick something to learn. The example I’m going to use here is learning React.

The first step is to absorb.

Absorb new information whichever way you personally find to be most effective. Whether that is following along in a tutorial, reading a textbook, watching a video, etc. Let’s say you start learning React by reading the docs. Depending on your skill level, this might seem daunting at first. Even though the React docs are amazing, you still might be intimidated. In any case, you start reading. Maybe you absorb 10% of it and then move on to their equally amazing Tic-Tac-Toe tutorial. You follow along and feel like it all makes sense. I would challenge you at this point to ask yourself at every step:

“Would I know to do it this way? If I were doing this, what would I do? Why aren’t they doing it the way that I would do it?”

Questions like these seem to lengthen the learning process. You’re itching to start building things, right? But these kinds of questions will help you find gaps in your knowledge that you didn’t know were there. It’s not enough to look at the solution, and say “Yeah, that makes sense.” You need to pretend like you don’t know the solution and ask “Is that what I would have come up with?” Now that you have gone through the tutorial, you decide to build something.

The next step is to build.

Then comes the next question, “What should I build?”. The truth that no one wants to accept (myself included) is that it doesn’t really matter. You want it to be something you can put on a portfolio, something novel, something that you can show off. The reality is that you’re not building this thing to show off. You’re building it to learn React (in this example). Just finished a tic tac toe tutorial? Build a calculator. Or a to-do app. Or a recipe box. Maybe refactor one of your vanilla JavaScript projects and implement it in react. In general, I agree that you should try to build apps that you are passionate about because you are more likely to pull through when you run into obstacles. But I wouldn’t focus on trying to come up with that perfect idea. It isn’t worth the time.

Now that you know what you want to build…start building! This is the part that takes the most effort. At first you think you will know what you’re doing, but once you start building, you will realize that you didn’t retain all of the tutorial like you thought you did. You will realize that this is where the real learning begins. Your goal here should be to make it work. Don’t worry about doing things the right way, just make it work. Once it works, build something else and just make it work.

The final step is to iterate.

You’ll notice that this isn’t a final step at all. When learning something new and difficult, you won’t really ever be done. Now that you know how to build projects with React and make it work, now maybe focus on the right way to do things. Maybe your first projects were built with a monolith component. You now read the docs again or watched another video and this time you notice that they are using multiple components. So then you refactor your last React project to break it up into multiple components. Then you go back and read about performance and wasted renders. Then you go back to your projects and see if you have any wasted renders to fix.

Whether you like to build new projects every time you learn something new or you like to refactor an old project to incorporate something new you just learned, it is important to build after absorbing new information. On the same token, you can’t just build and not absorb new information. Some people will advise you to put your head down and build, build, build. This seems like it makes sense, but how are you going to learn and implement new techniques if you’re never exposed to them? Also, if it seems difficult, that’s because it is difficult!

One last step that could be added is to teach what you learned. Go to meetups and share your knowledge, walk someone through your project. They will be glad to learn React from someone that has a fresh perspective of what it’s like to learn it from scratch. And you will be glad to surface additional gaps in your knowledge. Win-win!