Taking the self-directed path to learning code is difficult for a lot of reasons, not the least of which are unknown unknowns. You can spend a lot of time unnecessarily spinning your wheels getting good at software development: hours, days, weeks, or you can start learning with a framework to be organized and efficient. To help you do just that, I've put together this guide to prepare you to learn to code the right way!
Learning efficiently is a great skill to have regardless of your field of study, but the wide array of knowledge and fluid nature of web development makes the most efficient approach to learning much more of a must than a nice-to-have.
My recommendation here is to go through Andrei Neagoies's Learning to Learn course (available on both Udemy and his Zero To Mastery platform. Here, Andrei breaks down techniques and mindsets that will enable you to learn as efficiently as possible while wasting the least amount of time. Andrei is very good about referencing where he got certain tactics from, so there's a large and helpful bibliography that comes with this.
Coding can (and should be fun), but it is work, and it takes effort to engage in certain types of practice or practicing at all when you'd rather be doing something else. If I could only recommend one book to the brand-new coder, it would be James Clear's indispensable Atomic Habits.
The long and short of it is that you want to make good habits automatic and easy to perform, and bad habits more difficult. I was good about practicing code before I read this, but I got a lot better at the right kind of practice and got WAY more consistent with exercise, which really helped weather a lot of pandemic stress. Absolutely, positively, do not begin learning to code without reading this.
Part of effective learning is understanding the scope of the knowledge area you're learning, and for learning to code, there are various developer roadmaps. These roadmaps have been created to illustrate what goes into these technologies and provide some guidance into what methodologies/libraries/etc to prefer when you have a choice between several of them. I'll be making heavy use of these roadmaps (particularly the front-end roadmap) in future blog entries.
Learning to code can be complicated and overwhelming at first, especially on the front-end. One way you can help yourself stay focused on effective action is to use SMART criteria to outline what you're working on at any particular moment.
When it comes to tracking that progress, you'll want to avail yourself of Trello or some other type of kanban board. I don't know what it is about this, but there was a shocking "before" and "after" in my consistency and productivity after making regular use of Trello in my day-to-day.
Studies have shown that physically taking notes with pen/pencil and paper leads to better retention, so strongly consider doing just that. Additionally, recording what you're learning gives you the opportunity to rephrase it in your own words, forcing you to think critically about the topic.
What I personally do is maintain a folder of Markdown files on my desktop that I use to takes notes on a variety of topics, which I save to Github. I make this tradeoff because it's easier for me to organize, update, and use as a reference for blog posts.
Everybody is different and has different strengths, weaknesses, and constraints. You might have work or family obligations. You might be recovering from an injury or illness, or living with a disability of some kind. You shouldn't compare yourself or your progress to others because everybody's circumstances are so different. As countless others have said before me, this is a marathon, not a sprint, and you need to embrace that mindset and be good to yourself while you're working towards your goals.
This can be tricky to get a feel for at first, but there is a time and a place for struggling in learning. Some struggle IS essential for truly understanding new concepts, but too much frustration isn't a good thing. This is something I learned via trial and error in my first production job, and the way I approach it is something like this:
Is this struggle helping me understand the thing I'm struggling with better? This is good struggle.
Am I banging my head against the wall and have circled back to solutions that I've already tried and didn't work, or have I spent more than 30 minutes on a problem with no forward motion whatsoever? This is bad struggle and you need to get a second pair of eyes on the issue ASAP.
When it comes to where to look for help, this can vary a lot from technology to technology: When I do blog entries on specific technologies, I'll go into recommended sources, but I will note that you'll generally want to favor sources that are active and real-time based, over forums and message boards. If there's an official Slack or Discord channel for the technology in question, you'll want to be on there.
I hope this advice helps you: My goal with a lot of my blog entries to help people avoid some of the mistakes that I made when I was first learning to code, and I'll be going into more detail regarding how to approach specific technologies in the future, and I hope to see you there!