So you’ve decided you're going to learn how to code and you’re going to teach yourself. You curate a small list of tutorials that you plan to start watching. You’re feeling super excited about your code-learning journey, you start working through your list - everything is going well and things seem to make sense. You end up having to rewatch a couple of videos as a few more advanced concepts start to rear their ugly heads. Nevertheless, you persevere and you manage to get through most of the tutorials. You’ve religiously followed them through, you’ve spent weeks doing so - months even. After finishing and feeling really impressed with your progress, you come up with a project idea. With this idea, you then decide to try and create something on your own, and all hell breaks loose. You hit a brick wall, you feel disheartened, and now you're thinking you don’t know anything at all.
Sound familiar? I’ve been there and I’m sure the overwhelming majority of self-taught developers have too. You’re stuck in tutorial-land or even ‘tutorial-hell’ as some term it. Don’t fret, and certainly don’t give up - you will be able to escape from this common trap that beginner coders find themselves in.
The first thing you need to recognise is that this proverbial brick wall is actually your best friend. You need to embrace the frustration and the sometimes helplessness that comes with it. Ultimately, this is where the real learning happens. In a real job, this is exactly what you’re going to come across all the time. You’ll need to solve problems that you aren’t sure how to solve and you’ll be doing it with deadlines looming too. For those that are self-teaching, once you recognise this situation is totally normal and expected then you can seek methods to overcome it.
I’m not suggesting tutorials aren’t useful, nor am I suggesting you shouldn’t watch them. Tutorials are useful for learning syntax and/or the basic foundational concepts behind certain technologies. Plus they’re great to get a quick overview of what a certain piece of tech does and how that may fit into the whole front-end landscape. They certainly provide a solid platform to work from. But in the end, they won’t do the work for you and there is no way you’re going to be able to watch tutorials, passively code along and magically develop the skills needed to bag yourself a job.
For you to truly understand something you will need to practically apply what you’re learning and doing so will improve your understanding and cement those concepts. Those that are self-teaching probably already recognise this, and are most likely being encouraged to build code-along projects as part of some tutorials. In my opinion, this isn’t always the best way to learn - it’s a very passive learning experience and all too easy. A lot of students that I mentor often tell me that they watch tutorials and code along but still feel like they’re not actually learning. If you’re learning how to code and you aren’t constantly hitting your head up against a brick wall then you’re doing something wrong. In reality, the process is enjoyable but also very challenging, frustrating, and at times incredibly tedious.
The truth is, being stuck in ‘tutorial-land’ or ‘tutorial-hell’ will most likely come down to a couple of things:
- You are coming up with project ideas that are too ambitious for your current skill set
- You are trying to learn too many things at the same time
If you’ve just started learning a new technology, let's say React for instance. You may have followed an extensive tutorial and you’re ready and eager to build a project using it - it may even be a project that you want to add to your portfolio and showcase to employers. I would almost definitely hold back on creating something too complex. Start with a very very simple app, and build lots of them. Lower the standards of the project you want to create, I guarantee the one you were thinking of was probably too complex for you at this time. With this approach you can focus on truly understanding the code you’re writing and because your project expectations are a lot lower you can focus on the things that matter.
Ultimately your goal should be to churn out lots of small, almost ugly projects that vary ever so slightly. After you’ve done this you might start finding the process kind of well, boring. That is a fantastic place to be! If the process becomes boring then you know it’s time to add some more complexity, but as mentioned make sure you’re realistic about this complexity, don’t go full steam ahead trying to build a full-stack CRUD app when you’re just starting to learn React.
During this process of churning out smaller apps, try not to copy and paste code. Be honest with yourself if you’re pasting code that you don’t understand. This will potentially bite you in the rear in the future especially when you’re trying to debug issues that involve that pasted code. This process might seem a little underwhelming. The thing is, a large part of effectively learning how to code is carrying out repetitive processes, being incredibly persistent, and practicing over and over again until it becomes second nature. That is how you cement what you’ve learned. Going forward, it will be much easier to build something more complex upon a solid foundation.
If you’re concurrently learning Vanilla JS, React, Angular, Vue, etc, how can you possibly find the time or have the mental energy left to learn any of these technologies thoroughly? I understand why people do this, they see junior developer job descriptions that list half a million technologies and skills so the logical approach is to start learning all of them. In reality, you may end up only working with a few of those skills, decent employers will be willing to give you a shot if you are well versed in the fundamentals and can show an appetite for learning.
Ultimately, you should aim to focus on one topic at a time, remove any unnecessary distractions, and eventually you’ll feel way more comfortable with the things you’re learning.
The goal for a lot of readers will be to land a position as a front-end developer. Having a semi-structured learning path will really help you achieve your goals. So far, we know that tutorials are useful for building base knowledge on a chosen technology or concept and now we know that building apps (that aren’t too complex) are a great way to cement those learnings. You’re probably thinking this is all well and good but at some point, you'll need to work with something more challenging.
Adding more complexity to the apps you're building may be one way of doing this. That’s great, but ultimately you want to get a job being paid to do this stuff, so your best bet is to try and replicate what you’d actually do in a real job as closely as possible. There are many analogies for this, I love mountaineering and when I’ve climbed some challenging mountains in the past, I always have to get myself into shape before-hand. The best way to get better at climbing mountains is to actually climb mountains. Seems simple and obvious enough, but so many people would head straight to the gym and jump on the treadmill. They might get super fit doing so, but once they put a 15 kg rucksack on their back and have to climb difficult terrain up into the sky they’ll definitely struggle.
Your next step should be to try and replicate what you’d actually do in a real development job as closely as possible. Contributing to open source is a great way to do this. A lot of beginners are hesitant about open source, there is a lot less hand-holding than the tutorials provide and it can be a pretty scary prospect. I’d encourage you to persist and try and find a project (it doesn’t have to be mega-popular or incredibly complex) that interests you and try and make a contribution in some way. This could be:
- Improving documentation
- Suggesting a new feature
- Reporting bugs
- Fixing any pre-existing bugs
You may be unsuccessful, maybe the maintainer(s) aren’t interested in your fixes or suggestions. Do persist because you will find a project that you will have success with. Even if you don’t, you would have acquired some really useful skills in the process. I plan to write in more detail about the whole open source contribution process soon, so watch this space.
This idea of ‘tutorial-land’ or ‘tutorial-hell’ probably doesn't even exist, it will most likely come down to your own project ideas that are a little too ambitious for your current skill set. On top of this, you’re also probably trying to learn too many things at once. The outcome of this will leave you demotivated and unsatisfied with your learning progression.
Stepping out of this safe, guided environment is tough, but by doing so your progress and the quality of your learning will almost certainly improve. There isn't a one-trick approach to learning how to code. Tutorials are a useful tool amongst many that you should be utilising - it boils down to you being able to recognise when you should reach for them whilst understanding their limitations.
Thank you for reading!
If you enjoy reading my content and want to support my work, please follow me on Twitter 😊