Mistakes I made when learning to code

If I could go back in time, I would save myself from countless hours, days, and months working on the wrong things. Knowing what I know now, there are a lot of things that I would do differently when learning to code. Hopefully this article will help you save time and avoid the mistakes that a lot of beginners make. Keep in mind that everybody’s experience is different and this is a point of view from one person (me). However, being a self taught programmer and having had a fairly successful career up to this point, hopefully you identify with some of the topics below.

Please share your own experiences in the comments and remember how overwhelmed you where when you first started trying to climb this intimidating mountain. It may help those that are just getting started.

Who are you?

If you care, then read on. Otherwise, just skip to the next section. I am a self taught programmer. Things have worked out quite well for me as I have gotten to work for some big tech companies. Last year, I changed things up and started teaching programming as well. I now teach about 80,000 programmers from 194 countries modern programming skills and some of them have gone on to work for large tech firms that you have definitely heard of. I have also seen countless friends go through expensive coding bootcamps and still not have a job long after graduating (which I have to admit has made me very frustrated at some of the claims and lies that some tutorials and bootcamps make). I am by no means the best programmer, but at least I have seen moderate success being self taught. Enough about me, let’s have a look at some of the lessons that I think may help you in your journey…

Selecting the wrong teacher/mentor

Compared to when I started learning many years ago, the number of resources online for learning to code has seen exponential growth. There are some really good quality content out there. However, now you have the paradox of choice: It’s impossible to study everything. Who do you trust, and what resources do you use? There are countless Youtube videos, books, coding bootcamps, online programs, Udemy courses, freeCodeCamp lessons, etc… What is up to date? Who is actually a good instructor and who is out there just to sell you and make money?

When you don’t know what you need to learn, it’s easy to read an article from one or two people online and decide:

“Ah yes! I need to learn PHP, cPanel, and also I need to make 30 projects, put them on my portfolio, and then also learn Python and machine learning. I heard that is hot right now. Oh and then all the frontend frameworks (Vue, Angular, and React) in order to get the job so let’s learn JavaScript too. I’ll just study everything from everyone. Then I will do Blockchain stuff too. Let me just youtube some videos”

This is the wrong mentality.

Not all content is created equal. Technology is always evolving and selecting who you learn from is one of the most important criteria in you succeeding. If you decide to follow an instructor, read a book, or do a course, make sure you know the background of that person teaching that material.

There is a big market right now for programmers, and there are a lot of “teachers” (yes, including myself). Everybody is trying to grab your attention and tell you “this is the right way of doing it”. However, how are you able to verify this if you don’t know what you need to know? Here is a simple checklist:

  1. Is the instructor active on Github? Do they have a history of working with what they are teaching you or are they just good at marketing?
  2. When was the content updated last? Is the instructor involved in updating the course?
  3. Do they have past students who have succeeded (not just fake testimony). Can you get in touch with them and ask them about their experiences?
  4. Have they worked in the field in the role that they are teaching (you can use LinkedIn profiles to check this). What are they currently doing to keep their skills sharp? Or are they just lifelong content creators that haven’t been in the field for a very long time?
  5. Do they teach you to build silly projects or do they build projects that would impress employers? (no, a dog dating app, calculator, todo list app is not impressive)
  6. Do they have a blog? What are some of their technical writing like/videos? Do they have credibility beyond the content they are providing?

Select the right teacher. A little research on your part can prevent you from investing the time in the wrong place.

(In my opinion this is the best instructor out there and all instructors should strive for David J. Malan level quality. Also, something like frontendmasters does a good job by only selecting top notch instructors. In a marketplace like Udemy where it’s very easy to be an instructor, you have to do more due diligence.)

Finally, there is no single instructor that can teach you everything. Have multiple instructors to learn from so that you consider different points of view and expertise.

Selecting the wrong course/resource

Similar to the above point, there are no shortages of resources and material online for you to learn from. Everybody is trying to grab your attention. But here is the problem: which course should you use, which material should you learn? Every resource is different, and when you are at the very beginning it’s hard to decide who is telling the truth and which course is outdated and which course is relevant. Before diving into a course, make sure that this is the type of work you are interested in (i.e. Web Development, Mobile development), and this is the modern or the right way to do things. When was the course updated last? Is it 3 years old? The tech industry is constantly changing so a course that is even 1 year old should probably be updated. This doesn’t mean it isn’t a good resource, but it should be something you consider (this is even more true when you are learning libraries like React instead of computer science fundamentals that don’t change as much).

There is never one resource that solves all your problems and will get you hired, just like in school you don’t have just one course on “success”. Use different resources to create your knowledge tree, but do your due diligence and make sure you’re studying the right things. Here is a nice checklist:

  1. Has the course been updated?
  2. Are there students who have finished the course and if so do they recommend it?
  3. Does the course align with what you see with the trends and job demands?You can use trends analysis like done in this article here, or something like HNTrends and StackOverflow Survey.
  4. Is the course taught by somebody who has been in the field or just a lifetime instructor (see above section)?
  5. Does the course cover content that you see in job postings of where you want to work?
  6. Looking at the first few videos. Does it look like the course is organized well and a lot of thought and work went into the structure, outline and preparation of the course? Or was it something that was created in a day on the fly?

No course is perfect, but your time is valuable so make sure you are spending it on the right things. A popular resource may be popular because of the marketing done on it and not actually on the quality of the content.

Trying to learn everything at once

Don’t get me wrong, it’s good to understand differences topics across the technology spectrum. It’s good to be curious and want to learn as many things as possible. But if you decide that you want to master 3 programming languages…

Hey, I hear Google is using Go, and I heard Python is used for Machine Learning. I need JavaScript for web apps too. I’m going to learn, Python, Go and JavaScript and be a superstar!

You’re doing it wrong.

If you do not have any work experience, stick with one language, and work with that language. Get good enough to get hired. Start working in teams with that language. That’s when the real learning starts: when you start working on real projects.

Only start learning other languages, tools, or frameworks because there is a clear benefit in learning it and there is a need in the market. Learn to do one thing really well first (or at least well enough to get hired).

Are you trying to learn React and Angular and Vue and you don’t have any job experience? Congratulations you just learned 3 frontend libraries/frameworks that at the end of the day do the same thing, and you didn’t have time to learn why you should use indexes in your databases. Pick one and stick with it.

Be focused! Learn one language/tool that does a specific thing and try to get hired so you start getting real life experience.

Striving for perfection

There is no perfect programmer. Everybody makes mistakes. Everybody has flaws. We all write buggy software. There is no perfect code. So don’t be intimidated. Your project will never be a masterpiece. In 2~3 years it will most likely be outdated anyway. Just build things that work even if the code isn’t clean. Mistakes are ok and are encouraged. They are the best way to learn. As a matter of fact, even the people you learn to code from are not perfect and write bad code.

Remember, when you climb that mountain and you get to the top, you realize that everybody here is just a child trapped in an adult’s body. We are all trying to navigate our way through code doing the best we can do. Some people just hide it better than others.

So, yes, you should probably stop waiting for perfection and go start applying to jobs, ship that project, or get started on that project you were thinking of. The people that do things and ship code will always win out over people that wait.

Selecting the wrong tool

You start to learn about programming and you read that you need to learn React, GraphQL, Node.js, MongoDB, Storybook, React Hooks, AWS, etc… you start learning libraries without understanding what they do or why they are popular. The worst thing you can do is jumping on any trend without understanding what problem it solves.

React Hooks YEY! We don’t need to use class components anymore in React and everything is a function. I’m converting everything to functional components now!

Nope. Try again.

Why is that good? If you cannot explain that to your friends, then you should learn it first before you just jump on the bandwagon. TypeScript is statically typed superset of JavaScript and now we will have less bugs in our code! Cool, in that case you better know the differences between dynamically typed languages and strictly typed languages and know about the pros and cons.

There is never a perfect solution.

So how do you select the right tool when you are just starting out and you don’t know what to learn? You can check out this article for one answer, but keep in mind that you should do your own due diligence (ps, you should probably start with JavaScript though). Also, remember that most libraries evolve and change over time. Nothing is constant, so focus on learning the fundamentals.

Swimming in tutorial purgatory

Don’t just watch people code and try to finish every single tutorial on youtube or Udemy or any other platform. Start building your own projects. The best learning you can do is to be working on real projects and in teams. If you’re watching youtube videos saying to yourself…

As soon as I finish watching these 5 courses, THEN I will start applying to jobs!

You are doing it wrong.

Build stuff on your own…expand it. It’s always good to learn, but if you are doing tutorial after tutorial and you don’t have a job yet, or a reason to learn something other than because it is “trendy”, it’s time you pause and reflect. You will never get things right. Just build stuff. The code will suck. It doesn’t matter.

Watching 100 youtube videos isn’t impressive to anybody. Anybody can do that. You need to build things which is what most people don’t do.

Remember: You learn these tools to build things. At the end of the day, programming gives you access to tools for you to build real things that real people use. People care about these things not the tools that you know. It’s like watching all the videos in the world on soccer but not actually practicing. You show up to soccer tryouts and you tell the coach you have watched more soccer videos than any player. Nobody cares.

Start building your own projects that take longer than a day to complete. You will immediately stand out from 90% of people learning to code right there.


Should you go to a bootcamp?

99% of the time, the answer is no. If you have the money to spend, and you have checked that the bootcamp has successful graduates that you have spoken to and can trust, then do a bootcamp (yes, there are some good ones out there). However, keep in mind that what bootcamps offer are the same as what you can find online. You can read more about it here, but just like with everything in this day and age, there are good bootcamps and bad bootcamps. If you are spending $10,000+ on something, you better make sure it’s going to get you were you want to be. Most of the time though, you can find your own resources online and you do not need these expensive bootcamps. The nature of how bootcamps work actually make them less flexible to adapt and update their content compared to online resources. The one benefit they give is a clear structure (and stakes because you just paid so much to enroll) and classmates (which with the right online course and community online can be achieved without bootcamps).

Trust me, doing a bootcamp is not a sure ticket to success. You still need hard work and discipline. Anything in life that is worth having, or a skill that pays well, requires hard work because by definition it is hard to acquire and hard to find talent for.

Relax you will get there

Sure, it seems like there is no chance that you will ever know all the things you need to become a great developer. Good, you won’t. Nobody does. There is no such thing as a perfect programmer that knows everything and can answer all coding question. Technology is always evolving. It’s a path for people that want to constantly learn. If you feel like you have so much to learn and you don’t have enough time in your life to learn everything, then good. Welcome to the club and enjoy your ride. Even small steps each day to learn have compounding effects in 10 years. If you’re looking to master everything in a month, make 7 figure salary and retire in 3 years, you’re probably in the wrong field.

If you want to focus on mastery, constantly evolve your knowledge, and build real things that matter, then welcome.

Ask questions

If you don’t know something, ask. Don’t pretend like you know what something means just because you think the person next to you knows it and you will sound dumb for asking the question. You are in this for the long run. This isn’t an instagram post where you’re perfect and you are sitting on the side of an infinity pool looking at the mountains with a cup of matcha tea and you talk about how you have your life figured out. This is your career. It’s ok to ask questions and show that you don’t have everything figured out.

Conclusion

One last thing…don’t blindly take an online course or tutorial. Any time that you invest your own time into something, you are giving up the opportunity to do something else. Not all learning is created equal, so spend a bit of time doing some research deciding what you should put your time and efforts into. It’s not about cramming the most amount of work to become better. Those who succeed are those that can learn efficiently. This is a skill that goes beyond just learning to code.

At the end of the day though, don’t take my word for it. Just like I mentioned in this article, do your own research and figure out things on your own and find few mentors you can trust. Eventually you will get there. Once you get over the hurdle, and once you climb that mountain that most people give up and turn around on, that’s when you start seeing the gains, realizing that the mountain was simply the obstacle that rewarded those who climb it and made your skill truly valuable.

If you enjoyed my writing you may like some of my other articles:

→Don’t Be a Junior Developer
→Learn to code in 2019, get hired, and have fun along the way


Thank you for reading this far. If you enjoyed this post, please share, comment, and press/hold that 👏 a few times (up to 50 times). . . I will keep doing these if there is enough interest!

Follow me on Twitter or on Medium if you want to keep up with my writing. By the way, my full time job is to teach people to code in the most efficient way possible. You can see my courses below (use coupon code LEVELUPZTM for a nice discount):

Or my other 3 courses that are more advanced:

Advanced JavaScript Concepts

Master the Coding Interview: Data Structures + Algorithms

Junior to Senior Web Developer Roadmap (2019)

Remember: don’t just go ahead and buy the courses because you read this article. Do your own research, figure out what you want to do and decide what’s best for you.