A little bit of history
The first steps
My plan was simple:
- Learn how to learn and memorize things easy
- Get into the deep and learn the advanced stuff.
- Start building projects.
I like to call it "the long never-ending plan" and you will see why. I will cover all these topics one by one, but I would like to share a couple of things first. Know that your journey can be very bumpy at times and you may have times of total despair, but don't let this scare you. Everyone has gone down this road and even the brightest minds in programming were novice at some time. It's part of the process and you have to accept it as something normal.
So, without any further ado, let's get to the interesting parts. :)
Learn to learn
Technical writing as a way of learning
Something that worked really well for me was writing everything I learned about. For example, you can create a blog journal and write there. If that is too ambitious for you, you can get a notebook and write in it. You will see the results in no time - not only will you train your memory, but you will also get a proper view of how well you understand the concept. Another big advantage of technical writing is that you will develop the skill to explain difficult things in a lucid way.
This is one of my favorite ways for fast learning. Traditionally, tests are seen as a necessary evil of education, but are actually a really powerful way for memorizing. So, how can you practise testing yourself?
Take your time
The worst time for learning is when you feel tired or demotivated, so don't force yourself. Take a break for a day or two and get back only when you feel ready and motivated. I also strongly suggest using the Pomodoro technique. The idea behind this technique is pretty straightforward - you focus on a task for 25 minutes and rest for 5, then repeat again.
Find a mentor
- Free Code Camp - Free Code Camp is a community where you will work through self-paced coding challenges, build projects, and earn certificates. It's really fun to do and can be done simultaneously with any of the other resources.
After finishing one or more of these, you will have a solid foundation of the language and you will be able to create your first programs and apps. This is where you may feel you know enough and your interest will start flitting from one topic to another. You may also find other languages interesting. Stay on track and focus! Don't let your demons take you over.
"I've learned the basics, what now?"
Something that helped me overcome that phase was not panicking and knowing that this is a part of the process, and it would eventually pass. Having the right mindset (we will talk about that later) is beneficial. If you get the feeling that everything is hard and unknown, know that you are ready to take your skills to the next level.
Routines of a great developer
Think of a blacksmith. He may know every little detail about his mastery, but without practice he is nothing. Same is the case with programming. If you don't practise and don't build things, you are probably doing nothing. So, my advice to you is - learn and code at the same time. Don't worry that your code will be sloppy and unoptimized. Just get an idea and start working on it. Create a GitHub account, commit every single day, and make it a routine. When you finish a project, share it with the world and seek feedback. Productive feedback is the most wonderful thing that can happen to you - you will learn about the new best practices, code linting, build tools and of course, acquire soft skills like communication, project managing, project organization etc. These are the skills and techniques that will take you very far and the sooner you learn them, the better.
Embracing the "never stop learning" philosophy
Now that you have a solid foundation and you are building cool projects, we have to tackle the next problem - how to stay relevant in one of the fastest changing industries in the world. Something that worked great for me was building a "never-ending flow of information". The "flow" can be anything - newsletters, videos, online courses or even in-person training as long as you do it occasionally. Here is what I'm doing.
This can be done with videos and online tutorials too, as long as you make it a routine.
How to handle frustration and anxiety
Every developer, regardless of number of years of experience, goes through periods of frustration and anxiety. This is because the nature of programming is frustrating - you try to solve something and you don't know how. Then you get frustrated, try harder, step back, have an epiphany and eventually get your program to work. Getting frustrated is absolutely normal. The anxiety and frustration will never go. It will just make solving the problem more satisfying. You need to get comfortable working through that frustrating feeling.
When you feel you are burned out, take a break. Find a non-tech hobby, start exercising, spend time with friends or take a vacation. Do something different for a few days and then get back. You will be way more energised and motivated. I've gone through several burnout phases and taking time away from the computers always does wonders.
What I learned on the way
There are three major things that I learned through my journey :
Learned how to search
Learned how and when to ask
Asking questions is probably the hardest thing for a beginner. You are exposing your ignorance, which in most cases feels humiliating. Or at least that's how I felt in my early days. Well, guess what... I was wrong. Not knowing something is absolutely normal and asking a question is the most reasonable thing to do. The rule I use is - if I can't make it in 20 minutes, I ask a question or search for it. You will be amazed by the number people who are ready to help you. :)
On helping others
When you learn enough, the best thing you can do is share, and by sharing I mean helping others. Find a community (Hashnode or Stack Overflow for example) and help other developers. Teaching others will not only offer you a pleasant feeling of achieving something meaningful, but also help you brush up some old material or technology you are interested in. It's never too late to help a fellow programmer.
I enjoyed this. Very good advice. I'm a little surprised you didn't mention Eric Elliott. His content is great especially for people who struggle with learning from books. Great webcasts that walk you through code in his Shotgun series. Full disclosure. I'm his wife and a tech agent who helps devs get jobs. Thanks for giving good advice to the community. Yay!