At the risk of sounding pretentious...
The path to learn to program is an exciting road. It used to be a rather obscure trail. But today there is a wealth of information available online that will guide you along on just about every language and technology under the sun. Nearly any topic that you wish to learn can be taught to you with endless variety from highly skilled teachers and effective materials that make the topics approachable and engaging. And quite often, these teachers are active, professional developers who have hard won experience and tips about the practical aspects of software development. It is truely a golden road for education. A budding developer with enough grit has a very effecient, and effective path to a lucrative career, and the resulting prosperty no matter what thier socioeconomic background. One must only take the first step on that journey.
But there is nasty, secret bog hidden along the path that inexperience developers should be wary of.
I call it the intermediate developer wonderland, where all the tutorials are trivial, where you are infinitely switching between languages and frameworks, and never proceeding to more substantial projects of your own. This is where you take one course or video series about a language, and instead of going on to build more and more substainial projects utilizing your newly found knowledge, instead the poor student opens up another course or video series about some other technology that all the blogs and journals are saying you need to know. The unsuspecting fool doesn't stand a chance. Even professional developers are prone to industry hype, but they have establish skills to fallback on and put food on the table. The torrent of innovation coming from the industry, and the popular literature of the media leaves the impression that if you aren't learning some new technology, right now!, that you are falling behind on your professional development.
It's rough, and it is an easy trap to fall into. The content is so well designed and executed, and makes you feel like you are learning something important when you are really running in place. I could, and have, watched Derek Banas for hours teaching some language or technology that I'll never used. I've spent hours reading and watching talks about Angular, or Aurelia, or Dart, or ClosureScript, or Reason, or Python and the list goes on an on.
Fortunately, Should you find yourself in this position early in your development, and should you find yourself fortunate to happen across this poorly constructed article, there is an easy solution.
The key strategy is to remove choice and thus avoid the resulting analysis paralysis. I am going to outline a plan for every budding developer to follow. it won't be optimal for everyone, but it's going to be as effective, and generalized, and simple as I believe is possible.
Here's the plan, I'll explain a bit more about the choices later in this article:
You will not deviate from this curriculum except for these reasons.
You will most likely be employed as a developer before you complete the program. You will start applying to jobs after you complete the Front End Libraries Cert.
After you are gainfully employed as a developer, then you can start learning other technologies.
The most import key is to pick something and run with it.
And then... Build. Build. Build.
Programming is not memorization of facts or syntax. It is not like cramming dates for a history test or latin names for a biology exam. It is a skill that must be developed through practice like a golf swing, painting, writing, or playing an instrument. You have to actually do the work and practice to develop the ability. You are going to write crappy programs. A LOT OF CRAPPY PROGRAMS. Don't worry about it, you'll get better on the next project. The key is the volume of work, not the quality. You can and will develop quality as you go along, and have the required context and experience to understand what quality means.
If you are not frequently at least uncomfortable about the thing you are trying to do, you aren't learning. You are stagnating. Comfort is the enemy, growth comes from discomfort.
And here's some additional tips:
Write down some affirmations and put them where you will see the daily. I have often put them in my daily schedule, so that every time I get a notification for block of time I've set aside for something, I get a message reminding me of my determination and keeping me from self destructive doubts. One of my common ones is "fake it until you make it". It sounds sappy or trite, but it more effective than you may initially believe.
Also I guess that's a tip itself as well. Make a schedule. I wasn't the schedule type. In fact, rigid schedules are very much an affront to my nature. But they work. Explicitly identify some short, medium and long team goals, and put aside time time in your schedule to work towards them every day, week and month. You'll be amazing at how effective it is making tiny little steps towards your goal. In the case of learning to program. Set aside at least an hour each weekday or several hours each weekend to working your development. You will get results. I promise.
These video have also helped me stay on track if I was getting unfocused, as silly as it sounds.:
"You Gotta Take the Hits": https://www.youtube.com/watch?v=5JAHAFvcr2o
"Coffee is for Closers": https://www.youtube.com/watch?v=GrhSLf0I-HM
Good Luck :)