I want to share with you what I feel are some of the worse ways to learn a new technology or programming language. After that, I promise to brighten up the mood and share with you the fastest and most effective approach I’ve seen to learning any technology. Now days, the software development space is polluted with online code-in-the-browser tutorials. These are the kind of tutorials that require no environment setup and everything is simulated in the browser so that you can immediately roll up your sleeves and learn a new technology or code a language hands on directly in the browser. I believe anyone who is serious about improving in the craft of software development, should stay away from these resources. There are far more efficient and faster methods of learning about a technology or framework. If the student is a complete newbie and has never programmed before, these code-in-the-browser projects could be a nice thing to help them at least get exposure to the ABCs of the technology or language. But if you have some level of experience as a programmer (1+ years) I believe this is probably not the best use of your time.

I consider sites like codecademy and codeschool to be like baby feeders. Once you get to a certain level, its best to wean yourself off to more practical resources such as highly ranked books and nicely paced lectures otherwise you’ll be wasting precious time and getting only an illusion of productivity. I feel like the projects developed on these code-in-the-browser sites are spoon-fed to the student through guided exercises that seem more like those fill in the blank sentences you got for homework in first grade English class. As you complete these little bits, you get rewarded badges and so on. Often times, the end result is, the student doesn’t get the entire picture. And at the end of the tutorial, he or she is still pondering the answers to questions like:

Have I retained any of this material?
Can I start my own project from scratch?
Do I really understand the big picture and know how everything fits together?

Let’s face it, the experience you gain from these code-in-the-browser tutorials will not be practical. A lot of the details related to the way the project is setup is behind the scenes and the student ends up taking a lot for granted – narrowly focused on completing a little piece of the puzzle and by the end, boom – you’ve completed the project and gained a badge. I strongly feel this is not the best way to learn a framework or a programming language.

As you gain a little bit of experience it becomes very important to OWN your development environment rather than tinker with an almost completed project in a browser. Some websites provide short 2-3 minute videos going over a small topic and then they give you a little coding window to complete exercises with hints to tug you along. I don’t like this approach either because it builds a weak foundation. Most new technical concepts cannot be explained well enough for first-time retention in videos that are less than 5 min. The sweet spot for a video lecture with a good presenter is 15 minutes.From my experience, to really learn something and feel confident about it requires the student to slow down a little and deconstruct the concepts! If you’re a visual learner and like watching videos, make sure the videos are comprehensive presenting several examples, NOT 2-3 minute rush-alongs.
The really short and shallow videos are like feeding tiny M&Ms to a hungry alligator. The alligator never quite feels full and experiences aggravation in the process. You want to feel full after reading a chapter or watching a lecture! You want to get the Ahaaa feeling that makes you say to yourself “I get it now”. If this feeling is not reached, don’t move to the next topic! You shouldn’t have to watch a 3 minute video 5 times to understand what’s going on. It’s much better to watch a 10 minute video with multiple examples than a 3 minute news flash!

The next worse approach to learning a new technology is just reading about it and not applying what you learned. Don’t get me wrong, I think books are an excellent way to learn technology if they are written well and provide several examples, but do not take a passive approach as if you’re reading some story book. You have to be actively practicing the concepts you’re learning about. A decent approach I’ve used is to read through a chapter, and then read it again by applying the the topics discussed hands-on. Several technical books have exercises for the reader to complete. These are great. Make sure you COMPLETE THOSE EXERCISES! A good book can teach very well. But you still won’t retain much until you actually put the concepts you learn about into practice and struggle!

Alright that’s enough venting for now. It’s time to tell you the BEST formula I’ve come up with to learn a new technology or programming language! Before you try to figure out how to learn something new, you need to complete these 3 steps:

1). Answer this question for yourself: Why do I want to learn this?
2). Come up with a project you can create using this new found knowledge.
3). Set a deadline for when you want your project to be completed by.

Once you’ve completed these 3 steps, you’re going to move at a lightening fast pace to master whatever it is you’ve planned on learning! Because you’ll have a goal and a direction! But how would you go about learning the most effective and efficient way possible? Below is a curriculum I’ve been using a long time and have helped several students achieve success with. Let’s say for example, you want to learn Android development. Follow these steps:

  1. Identify the 20% you must master. Search for commonalities among highly ranked books on amazon by browsing through their content pages.
    1. You’re looking to identify common topics that every book is prioritizing. Chances are those are the most important topics you must know in order to be successful in android development. This is referred to as the 80/20 rule. 80% of results can be achieved by learning 20% of the subject. You need to identify that crucial 20%!
  2. Look for a highly ranked online course that’s well organized and focused on the content you identified as the vital 20% from the book research you did. Make sure to read through the curriculum of the course and verify that the author goes into great depth in teaching that vital 20%! Stay away from courses that I call Survey Courses (these just give overview on the entire landscape without going into depth in either topic, I consider these to be a waste of time and energy. These kinds of courses typically stretch longer than needed).
    1. Make sure the course doesn’t shy away from discussing foundation building concepts and prerequisites. If this is an android course, there should be a fat section on java programming with assignments if you don’t know java. That’s of course part of the vital 20% you need.
    2. Make sure the course has hands on exercises and HW for you to complete relevant to that vital 20% you need!
    3. Make sure the course contains just a few 3-4 practical projects but goes into great depths in each of those projects rather than a long dragged out course that shows how to create 20 apps by wasting a lot of time dragging widgets across the screen.
  3. Start the course and participate actively in completing the assignments and start the origins of the personal project you wish to complete. Ask questions on stackoverflow as you run into trouble. You can get answers to your questions in literally minutes!
  4. If you feel the need, read a highly ranked book on the topic that focuses on just a few projects but goes into them in great depth.

Technology is vaster than ever before, but you’ll be surprised how quickly you can learn something if you do a little bit of research and deconstruct the topic. All you have to do is identify that vital 20% that solves 80% of the problems, then you’ll be ready to take on anything.