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:
- Go to FreeCodeCamp.org
- Do all of the lessons in order. (You don't know enough to know when it's ok to skip things. When you know enough, you don't need the program at all.)
- Complete all the projects and certs along the way.
- If you get stuck at any point, you are going to reach out to the FCC community for assistance. In fact, you should try to be active in the community. You'll build professional relationships, and it will help with your communication skills, which are extremely important.
- You will only graduate from this plan when you have a full time job as a developer or you complete the full program.
You will not deviate from this curriculum except for these reasons.
- You have a personal project idea you are very passionate about and that you are actively working successfully towards competition.
- You have ingratiated yourself with an open source project as a regular active contributor and you have people that are actively mentoring you within the project.
- You have gotten an internship in development and have regular contact with senior developers to guide your progress.
- You no are no longer interested in become a developer.
- You will go back to the program if any of these are not the case.
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.
Now us you may argue about alternatives to FCC. But it isn't important. What is important is that Javascript is extremely easy to learn, very high demand, and has low entry level requirements. And the FCC community is huge and active. This is why I chose it, and why other options are only muddying the waters with choice and less optimal consideration for job opportunities. Yes, you can learn Django or Rails, and there are great free online programs for those, but there are 10 JS jobs for every one of those other stacks, and JS has true multiplaform viability and demand which gives greater long term return on investment and flexibility. JS is simply the optimal choice even considering local job market oddities. Any company that touches the web is going to need JS developers in all but the most dead market.
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.:
Good Luck :)