initLogs 3: Learnings from my experience on how to learn programming
Tags: codenewbie, beginners, javascript, programming
Published: 2021-05-17 14:08:38

---
series: [initLogs]
---

When you start your programming journey, you ask for recommendations from friends, colleagues or anybody who knows how to program. Either that or you just search online on how to learn programming.The recommendations would be something which you are blindly jumping into with no idea what to expect, in the hope that it will just “click”. This does works sometimes. Especially if you have a mentor to help you out, like a colleague in your company.

You might have seen stories of people who have failed several times in programming before “it clicked”. But what they meaning is the time they took to figure out what they want to learn or specialise within software development. Like front-end, back-end or full stack. Data visualisation, data analysis or web application security. This is possible only by moving forward with your journey to learn programming. And once you do, learning the actual thing like learning JavaScript for front-end development for instance needed less time comparatively. Because now you know what to do, which materials to use so that you can learn faster and move fast towards your goal.

There are things that I found repeatable during my journey on how to learn programming. I hope this saves your time and help you learn programming faster.

# Don't ask advice from too many people

If you're just starting your journey on learning to program, don't ask advises from too many people. It will not help you. Only confuse you more and could slow down your progress. People will recommend so many different ways and methods to learn or materials to use. So ask a very few people and try those methods and materials and see if it is working for you. Remember, the point is to learn and understand what is working *for you*, not blindly follow someone's advice. It doesn't matter how successful the person recommending something to you is. If it is not working for you just try something else. It will save you a world of time and help you not dread learning.

# Champion's bias

Another important thing I wanna talk about is the champion's bias or success bias. Champion's bias or success bias is the inability of a person to understand and think from the point of view of a beginner or novice. The champion's bias happens mainly because a person is more experienced now and forgot how it is to be a beginner. This means their recommendations and advises could be *from their level of experience* meaning it could waste several hours of us beginners. This effects you mainly when they recommend study materials or the course materials which will be extremely hard for you to grasp and costs you a lot of time. So always keep this in mind when you are talking to an experienced professional because teaching is a lot harder than learning things for yourself. You can always be a very good programmer and still suck at teaching.

# Use a material / method that works for you

If you have reached until this post, you probably already have a course, a material or a method that you are using to learn how to program. Like:

- Video courses: Like a Udemy course or Youtube videos .
- Books: Something like Eloquent JavaScript or Learn Python the hard way.
- Exercise based learning: Like freecodecamp.org or exercism.io
- Learning through building projects.

If it's working, great! But what if it isn't? What if you really dread opening that book or that video course? People are recommending things that worked *for them*. It doesn't mean they will work for you too. So if the material or the the method is not working for you, it means it is an issue with the material or the method. ***NOT you***. Find a method or material that works for you. I personally use a mix of exercises based materials, videos and learning through building as my preferred way. So try out things and if it is working, great! But if not, do not stick with it and make your life miserable. It doesn't matter who recommended it to you, if it is not working for you, it just means it is not working for you. So move on. *Fail fast to learn fast*.

# Stay away from Eloquent JavaScript if you are a beginner to programming or JavaScript!

Most of us beginners who are learning JavaScript would have heard the book [Eloquent JavaScript](https://eloquentjavascript.net/). Recommended by people as a beginner friendly book. I have wasted countless amount of time and energy trying to make sense of this book. This was recommended to me by two experienced engineers. This was also recommended by the boot camp which I was planning to get into before the Covid-19 happened. So it has to be good right? No! It has been the main reason for me getting stuck and I see this recommended everywhere by experienced people, especially since this is a free book. This is not an unpopular opinion. There are so many people who are like me who have got stuck with this book. So if someone recommend you this book and you can't follow, don't stress yourself and waste too much on it. Try a different resource. 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c8s6mxqcz7xu8ke2szmy.png)
*This is just one tweet. Reading [reviews of Eloquent JavaScript in Goodreads](https://www.goodreads.com/book/show/8910666-eloquent-javascript#other_reviews) will give you a clear indication on how a beginner vs experienced programmer perceives the book.*



# Tutorial hell

It is common for beginners to get stuck with tutorials or exercises in loop. This is when you keep doing those exercises or going through course materials without doing anything with the information that you have learned. It can also be very hard to get out of this loop. Mainly because you will want to finish the entire course before doing anything with it. This is why course materials these days include projects after teaching you a specific topic.

Apart from building things, teaching by writing a blog post or by creating a YouTube video about what you learnt is also a great way to revise. These methods will challenge you to understand the topic you've just learned thoroughly. You will be surprised by the amount of information you are unable to explain properly when you start creating a video or starts writing a blog post. Doing this will make you learn topics thoroughly and overcome this problem.



# Difference between programming and coding

Programming is about thinking and understanding how to do and coding is about what to do. These both are two different things. To be a bit more clear, programming is about the thought process on how to solve a problem and coding is about the syntax to write once you know how to solve the problem. We use the word coder and programmer interchangeably. But as a beginner, you should strive to be a programmer, not a coder. You should be prioritising how to be a programmer over becoming a coder. Otherwise you will know what syntax to write but won't know how to write it. [Andy Harris's talk on How to begin thinking like a programmer](https://www.youtube.com/watch?v=azcrPFhaY9k) explains this very well. I would really recommend you to watch it. It is one the best video I have come across and I re-watch it from time to time.

# Community is important!

What I don't see people talk enough about this. It is important to be a part of a community while learning to program. freeCodeCamp has their forum and [The Odin Project](https://www.theodinproject.com/) has a Discord server which is faster than a forum. It is very useful to be a part of a community and to get involved with the community. You will learn about different point of views and see the problems others are facing. It is also a great place for you to find help and even make friends. So I recommend you find a community while you are learning to program. It could be the community channel of your course ware, a Telegram channel, Forum or even a subreddit. But do find it cos it will help a lot in your journey instead of doing a solo ride.

# Productivity tips as you learn

Here are some of the productivity tips and advises that I found useful. Maybe it will help you too.

### It is OK to search online for tips

I always had the feeling that I have to be able to do the exercises entirely based the material I was following. Searching online was thought as something bad. So when you are stuck, it's OK to search online. About how to loop through an array, a better explanation to higher order functions. Just search online for these building blocks.

### Switch between two tasks to be more productive

When you are on a problem or exercise and has been stuck for a while, you eventually might dread the problem. You will also end up wasting the entire day (or days) on it without being productive at all. The solution I found is to have a secondary task which you want to do when you don't feel like doing your primary task and toggle between the two. *I am NOT recommending multi tasking so don't take two big projects and switch between them or don't learn two programming languages at the same time!*

Find a secondary task which is inferior in importance and priority but still important enough. Like writing a blog post. The idea is to switch back to your primary task after a while. This way you have less wasted time and will be more productive.

### Accepting failures is part of learning

Following a material alone won't help you learn things faster. You also have to learn when to accept failure while learning new things. So that you won't waste a whole day (or days) on one problem. *Make sure you give your 100% before accepting defeat*. Try go for a walk and if it's late night, sleep it off. Or like I said before, switch your task, search online for tips etc. And if nothing works, accept defeat and ask for help with the community or your friend / mentor.

# Resources I like for learning programming

- [The Odin Project](https://www.theodinproject.com/): The complete and best resource I have found for learning programming or to learn web development / full stack development. They offer a full stack developer path for JavaScript or Ruby on Rails. Their best part is, instead of creating materials for their curriculum like everybody else, they curate the best resources available online and let's you track the progress through their website. Their Discord server will unlock a great community which is helpful and resourceful.

- [freeCodeCamp](https://www.freecodecamp.org/): If you love exercise based learning, you will love freeCodeCamp. They are home to a lot of exercises and I use fCC to practice algorithms and data structures among other things. They also have a forum which you should be part of if you are them. They offer certifications and courses for a wide range of specialities and is free.

- [The complete JavaScript course by Jonas Schmedtmann](https://www.udemy.com/course/the-complete-javascript-course/): This is the only paid course I have tried and it turned out to be amazing. This course dives deep into how JavaScript language works behind the scenes. It is focused on front end based exercises. The only caveat is that this course includes JavaScript only content. So if you don't know enough HTML or CSS, you might feel out of place. There is an HTML & CSS course by Jonas if you wanna take that route and pay for another course. Or just learn enough HTML and CSS through W3Schools. ;)

- [W3Schools](https://www.w3schools.com/): W3Schools is best for getting started with web development quickly. While I didn't use W3Schools as a standalone resource to learn programming or coding, I used it to get a quick start with HTML, CSS and JavaScript for web development and I found it very useful and beginner friendly.

- [Exercism](https://exercism.io/): This is an exercise based learning resource which cater to a wide range of languages. If you are into exercises, you will find it at home. I switch between freeCodeCamp and Exercism for their exercises.

# Secret sauce to learn programming?!

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jx4uwk2bzdhcp0b1y2bn.jpg)

Practice, practice and…… PRACTICE!

The secret sauce is practicing over and over again until you become great at programming!



*If you like the content, think I am wrong about something or have any questions, drop a comment or DM me on twitter [@unsungnovelty](https://twitter.com/unsungNovelty)*