Warning: Illegal string offset 'filter' in /var/sites/t/theproactiveprogrammer.com/public_html/wp-includes/taxonomy.php on line 1409
If you want to learn something about programming which may help you in your career, you are faced with two decisions: what to learn, and how to learn it. And with each decision you are faced with a multitude of options.
I discussed choosing a niche in my last post, and if you are looking for something to learn about, your niche is obviously a good place to start.
But how exactly should you go about learning?
There has been lots of interesting research on the science of learning. There are various study methods and learning techniques on offer. I can’t tell you which learning method is best for you. Everyone is different and your best approach is probably different from mine. What I can do is share some of the approaches I have used over the years, along with some of their advantages and disadvantages based on my own experience.
Approach 1: The Organic Study Method
When I was studying for exams at school, I came across a book by Tony Buzan called Use Your Head. In it Buzan describes what he calls the ‘Organic Study Method’. This is a very detailed approach to learning which involves reading and note-taking. In summary it asks us to do the following:
- Prepare for a study session by answering a few questions about your goals, how much and how long you plan to study
- Speed read a book multiple times, at different speeds, rather than just reading normally once
- Use mind maps to take notes
- Review your notes at specific intervals following a study period
I largely followed this method in school, and it did seem to work. However, this approach is extremely prescriptive, and thus requires a lot of self discipline. For example, it advises you to review your notes 10 minutes after a 1 hour study session, then for 2 minutes a week later, then again for 2 minutes a month later, and so on. I am put off by the stringency of this method. It is not much fun. I would only use it again if preparing for an important exam, which is not my intention when it comes to learning about programming.
Pros: excellent method for achieving long-term recall.
Cons: prescriptive, complicated, unsustainable for most.
Approach 2: 20 Pages Per Day
Another approach to successful learning is described by James Clear in his blog post, How to Read More. He is less concerned with the mechanics of how you read, and more concerned with the development of a reading habit. His approach is simple: start every day by reading 20 pages of your chosen book. That’s it. By developing this habit you will naturally work your way through many books over the course of time.
Pros: simple and sustainable.
Cons: Not geared towards long term recall or enjoyment.
Approach 3: Spaced Repetition System – Anki
One approach to categorizing learning methods is to divide them into active and passive methods. As you might guess, active learning essentially involves proactively using your brain to solve problems, rather than just passively reading a book or watching a video. Research shows that active learning is more effective than passive learning at achieving long-term recall.
A while ago I became quite interested in the theory of active learning, and downloaded a free application called Anki to help me learn about ASP.NET MVC. To use Anki, you need to come up with quiz-style questions and answers about whatever topic you are reading about, rather than taking regular notes.You input these questions and answers into the software, which then asks you the questions at intervals, spaced according to scientific research on how regularly we need to engage our brains to remember a fact in order to achieve long-term recall.
What I found was that after a while I was spending more and more time answering old questions and less time studying new material. Entering appropriate questions can also be time consuming and can break your flow. Plus it is harder than it sounds to translate material into appropriate questions and answers.
Pros: scientifically proven, good for fact-based learning or exam preparation.
Cons: time-consuming and hard to achieve flow.
Approach 4: Practical Experience
An alternative method of active learning which can be especially useful in learning about programming is to actually code something using the language or techniques you are learning about. In my experience this is the most enjoyable method of learning something, and if you enjoy learning it’s probably more likely to stick and certainly a more sustainable approach. The difficulty is finding ways to apply the various aspects of your subject matter to your project.
A compromise is to follow a walkthrough, which gives you the benefit of comprehensively covering the subject matter, and the enjoyment of coding something up. However, with a walkthrough it is difficult to pick and choose which particular topics within a broader subject area you wish to focus on.
Pros: fun and sustainable.
Cons: unstructured, not comprehensive, hard to pick and choose topics with a walkthrough.
Approach 5: Videos
More video tutorials are appearing on the web every day, on just about any subject you could think of. Pluralsight in particular offers an enormous range of brilliant videos in return for a monthly subscription fee. Simply sitting and watching a video is the ultimate passive learning activity. You barely even have to move your eyes, you can just sit down and watch. If you’ve had a hard day at the office, you will find it easier to sit down and watch a video tutorial than to read a chapter from a textbook. You may only take in 50% of what you see, but this still might be more than you would take in from a book.
As I mentioned earlier, passive learning has been shown to be less effective than active learning, however many video tutorials (including Pluralsight) are accompanied by downloadable files to partially address this issue.
One disadvantage of videos is that you can’t dictate the pace. You can’t speed read or flick through a video.
Pros: enjoyable, easy.
Cons: Set pace of learning. Passive.
Approach 6: Teach It
A final approach to learning is to teach what you learn. I have found this to be a great method for solidifying learning. Many people, including Stephen Covey and John Sonmez, have advocated this method for learning material. It is one of the reasons I started this blog. Teaching forces you to mentally organise information in a way which is clear and understandable, a process which helps to imprint that information to memory.
In order to use this method you of course need to find someone to teach. The most obvious way to achieve this is to start a blog, but this takes time which could arguably be put to better use. If you don’t want to commit to starting your own blog, sites such as CodeProject accept articles on almost any technical topic.
An alternative would be to start offering presentations on topics of interest at work, but again this would take time to prepare.
Pros: it works, enjoyable.
Cons: Not always practical, time-consuming.
My Own Approach
I was going to end this post by telling you my own preferred approach for learning, but I realised that I don’t really have one preferred approach. I tend to switch between these methods and others according to my mood and motivation. Currently I am reading a book and making a few random notes. I am trying to read a little every day or two and making decent progress. Once I am finished with that book I plan to switch to some tutorials and walkthroughs. I might watch a video or two in between. The most important thing for me is to just keep on learning, and understanding the mechanics of learning using methods like these will hopefully help me to do that.