How I?m using learning techniques from a Coursera course to be a better developer
I?ve been a Software Developer for more than 4 years now and if there?s one thing that never changes about this job it?s that it is always changing. There are always new things to learn. I love that part of it. Learning is the destination.
So, when I saw a course called Learning How to Learn on Coursera, I jumped on the chance to learn about learning from academic experts ? Dr. Barbara Oakley and Dr. Terrence Sejnowski from University of California, San Diego.
Here are the key takeaways from the course that help me be a better developer and, in general, a better learner.
?Focused? and ?Diffused? Modes
When learning, there are times in which you are focused and times in which you allow your mind to wander. This unfocused, or diffused, mode is just as valuable as the focused mode in allowing your brain to LEARN something. So ? take breaks, meditate, think about other things, and give yourself plenty of time in both modes.
One way of making sure you?re taking regular breaks is to follow the Pomodoro technique. This is where you program for 25 minutes, then take a break for 5 minutes. The work and break time lengths can vary based on what works best for you. The important part is that you have a regular break. There are several applications out there that help you setup a Pomodoro timer. I use Pomodoro Time.
This is the idea of breaking what you want to learn into concepts. The goal is to learn each concept in a way that they each become like a well-known puzzle piece. In order to master a concept, you not only need to know it but also to know how it fits into the bigger picture.
Mastered chunks form a whole puzzle (left) vs. learned but not mastered chunks don?t fit into a larger puzzle (right)
Dr. Oakley suggested a great step-by-step process to approach learning something. First, survey and priming ? this involves scanning a book or the syllabus of a course, for example, to get a general idea of the bigger picture. Second, observe an example. Then, do it yourself. And, finally, do it again and again in different contexts.
So ? let?s say I was trying to learn React and I was lucky enough to find Tyler McGinnis?s awesome React.js Program course. To apply this suggested process, I would first look over all the units in the course to try to get a general gist of the topics covered. Then, I would follow along closely as Tyler builds an example application. After that, I would build my own application. And finally, I?d apply those learnings into the new features we are developing in React at my job.
Beware of Illusions of Competence
There are many ways in which we can make ourselves feel like we have ?learned? a concept. For example, looking at a solution and thinking that you know how to arrive at that solution is one of the most common illusions of competence in learning. Highlighting or underlining are also techniques that often lead to this illusion of learning. On the other hand, brief notes that summarize keys concepts are much more effective.
Recently, I found this great application called Highly (you should use this!). They make it really simple to highlight any article that I?m reading on the web using a Chrome extension. When I?m done reading and highlighting an article, it provides a beautiful summary of everything I highlighted. This is immensely useful to me.
I try to be sparing in what I highlight. The fewer takeaways, the more likely that I?ll actually take it away. This ties well into the next point?
Dr. Oakley points to Dr. Jeff Karpicke?s research about retrieval practice to provide scientific support behind taking a couple minutes to summarize or recall material you are trying to learn. It goes a long way to taking something from short-term memory to long-term learning. Even recalling material in different physical environments can help you grasp the material independent of any physical cues that your brain may have.
So ? after you finish reading this article (or any article), take a moment and try to state what you remember from the article. It?ll go a long away.
In order to avoid or break through illusions of competence, you should test yourself as you?re encountering new material. Recall is a simple example of this mini-testing.
It?s not important that you pass these tests without making any mistakes. Mistakes (and correcting those mistakes) are an important step towards solidifying your learning.
After a long learning session?
The main takeaway on this point is not to spend too much time in one sitting going over the same material over and over again. The law of diminishing returns certainly applies. Spread it out over many sessions and over many different modes of learning.
I have been trying to set aside 30?60 minutes every day for each new thing I am trying to learn or learn in more depth. Not only has this been better in resulting in lasting learning, but I also find it way more achievable to say that I am going to work on X for 30 minutes.
Once you have a basic understanding of what you are trying to learn, interleaving can be used to help you master the concepts. By practicing jumping back and forth between problems that require different techniques, you can solidify your understanding of the concepts by learning how to choose to apply them in various situations. Know when to apply a particular concept is as important as knowing how.
I haven?t deliberately applied this technique yet but, going back to the earlier example of learning React, I can apply the interleaving technique by having 2 different projects in which I am applying React and Flux architecture.
Process over Product
When facing procrastination, think of process over product. I often procrastinate when I?m overwhelmed by the thought, ?Ok, I have to get X done?. Instead, it can be beneficial to think, ?Ok, I will spend an hour on X? ? which isn?t overwhelming, doesn?t require a long breakdown of tasks, and gets me started (90% of the battle).
Metaphors and Analogies
Metaphors and analogies are often talked about as helpful study techniques. Personally, I never made much use of them. But, as I?ve met more people and more teachers/mentors, I?ve found that the best ones always use these as they communicate. And being able to communicate what you?ve learned is one of the main skills that differentiates a good developer from a great one (IMHO).
So, try to make a deliberate effort to teach what you learn to someone else and, in doing so, you will likely be forced to explain concepts with relatable metaphors and analogies.
There are several opportunities in the daily practice of software development to teach and learn from others. You can pair program, comment on pull requests, sign up to give a code talk about a particular topic, and blog! Do all of these things. I know I?m trying to.
Study Groups / Teamwork
This one isn?t new to me and has proven to be most beneficial to maintain continued progress and hold each other accountable. But, it is important to include in this list and note that finding the right group is key.
At work, I?m lucky to have plenty of internal groups: tech book club (currently reading Pragmatic Programmer), open source club, culture club, elixir group, and likely others too. But there are several awesome communities that meet and learn together in NYC and online!
No matter what or where you are learning, you don?t have to learn alone. In fact, it is the uniqueness of the people with which you learn and the discussions you have together that make what you learn unforgettable.
Click the ? below so other people will see this here on Medium.