Learning to code is hard.

You will feel overwhelmed. Confused. Frustrated.

All three at the same time.

You'll think about quitting. More than once.

As a self-taught developer that knows how difficult it can be. I believe it could be a little bit easier if I could give my younger self some tips.

Here is what I would tell myself if I had to start all over.

1. Set a clear goal first

Before you dive in and start consuming tutorials, courses and books. Take a moment to think about the end goal. Do you want to build games, develop websites or maybe build iOS apps? Do you want to become a founder, freelancer or employee? Where would you want to work?

Get clear on your goals first, then reverse engineer them.

Let's say you would like to get a job as a front-end developer at Microsoft. Check out their website and find any open listings they have (or had) for this role and look at the job requirements. Now you know how to qualify for that role and you can use these requirements as a checklist for things you need to learn.

A big part of learning effectively is not wasting time learning things you won't use. Remember all the things you had to memorize in high school only to never use it again after the test? Now that you are not optimizing for high test scores but for practical knowledge, you can skip learning the redundant bits. They'll always be one web search away anyway.

2. Find what medium works best for you

The internet has solved the scarcity of information problem but in the process it gave us the information overload problem. There are so many resources out there it's easy to get overwhelmed.

To narrow this down, first find out what medium works the best for you personally. Do you like video tutorials or would you rather learn from books?

For me personally, watching video tutorials was pointless. I would watch these videos, do exactly as the teacher said and than realize the next day that I retained none of what I learned.

For me, freeCodeCamp worked a lot better. I could read the explanation and instructions and read them again if they were not clear for
me. Having to figure out how to solve a problem and implement it in code without handholding gave me a much better understanding and I retained more of what I learned.

3. Start working on a project of your own

This one made all the difference in the world for me.

You can keep watching or reading tutorials but you will learn much quicker when you are building something vs. when you are just following tutorials.

You can read books on how to swim or how to ride a bicycle but it won't click until you actually do it yourself. The same goes for coding.

4. Ignore online discussions

There is a ton of value in talking to other programmers, having a mentor or having a meetup with a group of people that are learning to code.

But what you should ignore are the many online discussions that developers like to have on places like Hacker News or Twitter. Developers like to have heated debates about things that really don't matter that much.

What the best programming language or framework is (they all have their pros and cons). What back-end language scales the best. Whether you should add comments or your code should be self-documenting. Why you should switch to a different iterator because it tested 81ms faster on jsperf.

Just use what works best for you and focus on learning. Don't get caught up in the details.

5. Make peace with not knowing everything

I used to be under the impression that one day everything would click and I would be a good developer capable of building everything I wanted. I've now realized that it's not that binary, like a switch that suddenly flips.

Even though I built a React app that has had over 70.000 unique users (Screely), I'm still learning new things about React every week.

Think about driving a car. You probably know how to drive a car. Maybe you can do some basic maintenance like an oil change. Maybe you can do some repairs like changing a broken light bulb or a flat tire.

But, could you rebuild the transmission? Probably not, but you are perfectly capable of driving a car without.

Tools, languages and frameworks have been getting easier to use due to build-in abstractions so you don't have to worry about the low-level functionality.

Enjoy not having to learn everything and make use of these abstractions. It won't make you a bad developer.

Hopefully these tips can make it a little bit easier to learn how to code.