Learning to code has never been as accessible as it is today. You have thousands upon thousands of websites with free courses and some with paid material attempting to teach people how to become coders in a short amount of time.
There are also plenty of videos on YouTube and probably millions of blog articles (such as this one) free for the viewing.
Even so, having it so accessible, does not imply that you can or that you will learn it at a high enough rate to make into a full-time career.
But it does increase your chances.
You can get a good understanding of fundamental principles. But undoubtedly, you will eventually hit a wall and be unsure of where to go next. Here are a few common road-blocks that I see many developers encounter on their road to learning how to code and a few ways to potentially mitigate those.
3. Where to start?
Many people will jump on one of the many resources that we have today, such as YouTube and begin searching for "beginner coding...", "learn to code...", etc. And they will find content by the thousands. Videos and tutorials and "Top 100 languages" posts.
This is a good start for those with some basic understanding of programming concepts. If you are brand new however, this will be overwhelming as you encounter different languages and different frameworks and the many reasons why each is the best. Because everyone online will try and make you believe that their programming stack is the best.
You might look at a React video and enjoy the content so much that you decide to become a React developer. Until you find a Vue.js video and decide to make the switch. Until Angular.js enters your field of vision.
My best advice here is to have clear and concise goals for what you want to learn and why you want to learn it. If you are looking to get into Android Development for example, then learning HTML and CSS won't help you too much, so don't worry about watching those videos or reading those articles. And learning to just "code" in general, which I hear from many people, isn't realistic because coding encompasses many elements.
Coding in a state-based environment vs a non-state environment is completely different, just as learning iOS development won't translate over to Android Development.
So have your goals in order, and then start to learn and research based on those particular areas of interest. In this way, you are not overwhelmed by the amount of learning material that can be found online.
2. Keep motivated
College keeps you motivated by using a grading system and by costing you a small fortune. Sure, we complain and we hate it, but to some extent, it works. Particularly in this day and age where we have thousands upon thousands of more "things" that want our attention and are fighting tooth and nail for it. Even getting lunch can turn into an hour long internal debate these days.
You can give yourself grades, but that's not very fun. Deep down, you know you made those up and so you need something more tangible. You need a goal to keep you steady, as mentioned above. I don't recommend a time-based goal, at least not in the beginning. Those normally lead to higher levels of anxiety that make it harder to study and keep focused.
Don't give yourself specific timelines, but have a general idea of where you want to be in 6 months. Maybe you want to build and launch your own personal portfolio site. You can make changes and upgrades each day and in 1 month see how far you've gotten. Then re-evaluate your timeline and your goals concurrently and aim for a higher level achievement. Otherwise, you will eventually end up bored with small trivial work that you give yourself. Give yourself something tangible that the future you will thank you for.
And really that comes down to constantly challenging yourself and doing things that you have never done before (like coding this blog). So if you have a decent looking portfolio layout, great, now go and implement a contact form that saves data to Firebase. And once you do that, set up an S3 bucket to store your local resources.
1. You keep getting distracted
If there is one major thing that I have learned during my past 20 years in programming, it is that you can't learn everything under the sun. Often times younger developers want to learn multiple programming languages all at once to increase their odds of employment. But they all end up doing is slowly distracting themselves from becoming proficient at any one thing.
The same parallel can be used for learning multiple human languages. You could spend years learning all of the languages under the sun, but how many of those languages are actually relevant to you and how many are you going to be using on a day to day basis. If you were going to be living in France for a year let's say, then definitely adding French to your repertoire wouldn't hurt.
Similar in learning to code, if you are going to focus on web development, then learning JavaScript would be something on your to do list.
Focus is everything when it comes to the initial learning phase in whatever you do. So gve yourself the space, time and respect to focus on one thing long enough for it to stick. I assure you, the more proficient you become at any one technology, the less need you will have to want to switch.
And lastly...
As someone who has been in the industry for over 15 years, I can say that it takes time to get good engineering software. It takes times to learn a language and to learn how to query a database correctly and how to build a relational database on top of that.
I have met plenty of self-taught developers that have achieved big things in this field, but even they will tell you, that it's not an easy process and that you need to give it time.
Walter Guevara is a Computer Scientist, software engineer, startup founder and previous mentor for a coding bootcamp. He has been creating software for the past 20 years.