Every person should learn how to learn. There are many awesome and valuable techniques & principles out there which save time, create efficiency and affect every part of life.
There are so many learning techniques/principles, not all of them apply to all fields and topics. Take spoken languages, for instance. 80%+ of the learning techniques that are touted in the learning efficiency space actually do apply.
However, in programming that percentage is much much less. I would say it is lower than 30% of those available tools. Why? Because coding is done by doing and not pure memorization.
My goal here is to overview which learning techniques work from the world of efficient learning. I have studied and put in countless hours into efficient learning and discovered, the hard way, which techniques are most valuable and applicable.
To amplify your learning efficiency as a coder, I recommend reading through this article, then after, read “A Mind For Numbers” by Barbara Oakley. It is a book which encompasses a great deal of techniques.
This article will help you understand that book much better, think of it like a prequel where I focus general principles onto coding.
Table of Contents
Can Learning Be Taught?
Learning is a skill as well as a physical adaptation. With proper learning technique you can more than double your learning rate (given you use improper learning principles right now). At the same time, learning technique allows you to physically adapt to learning much farther than without.
For example, there is a story of a man named Joshua Foer. He is a journalist of average intellect, so he claims. He stumbled on a lead for a story about a memory competition.
His curiosity and drive to publish lead him to learn the techniques used to compete and attend a meet/competition in New York City. At his arrival, he was shocked by the feats of learning the contestants displayed.
They had memorized the order of a deck of cards in less than 30 seconds. They memorized long unpublished poems in less than 15 minutes, they memorized over 500 numbers in less than 5 minutes and many more feats of memory.
These contestants were not savants, just as Joshua Foer was not. Instead, what they cultivated were learning techniques. They practiced every day for many hours until their minds adapted to the technique to a point of fantastic ability. Not only are the contestants using these techniques, but many others use them in their daily lives.
Afterward Joshua Foer went on a quest to learn these techniques, and, founding a passion, drove his technique, skill & adaptation to a point where he won the USA Memory Championship.
Not All Techniques Work for Coding
The technique mostly used in that competition is the memory palace. Now, there are a lot of principles/techniques for learning. I like to call the culmination of learning methodologies “learning theory” or mentalism. Things like memory palaces, mnemonics, memory encoding, Knowles methodology, speed reading principles, psychological prep, spaced repetition, deep chunking and many more are all useful for different fields in different ways..
However, what makes it so difficult to find and apply the proper techniques for coding is, it is more about what not to do rather than what to do. The best way to learn to code is by understanding 1000 ways not to do something and the top 10–20 ways to do something, choosing the best option.
Debugging is therefore the most important task in learning to code and not memorization or self-study. It is the core of learning to code. I would say debugging is about 95% what coding is about (if you self-study you must apply it by debugging).
By nature, debugging is the reason applying learning techniques to coding is so difficult. Because of this skill, the two best techniques are out the window, speed reading & memory palaces.
This makes coding require a very primal way of learning, learning by doing. For this and all of coding I will show you the techniques which are best used to enhance your progress with greater ease…
Applicable Learning Principles of Coding
Perhaps the four top learning principles in order of importance, are; the Knowles method, spaced repetition, deep chunking, and lastly mnemonics. Let’s go through each of these and see how they apply to coding.
The Knowles method
This is more about psychological prep. There are a few things I can note about this. And, you can look up the principles of the Knowles method after reading this article but stay with me here.
The first principle, you must think the topic is important. Our minds do not distinguish between the importance of a life or death situation and a task we are learning of great interest.
This is something most people think is static. They believe the importance they place on a topic can only be had in nature. However, in reality, you can trick your mind to think something is important.
When first learning, file through the inspirational portions of your courses, books and lectures. Look up videos on how you will use whatever topic at work, with your hobby or its effects on your capability. It is a great and essential habit to always psychologically prep yourself to think whatever you are learning is important.
This way your mind believes it must keep the understanding within as if it were survival…
The second principle builds on the first, it is the choice of learning. You must choose to learn and put effort to it. The idea is to be self-directed, learning with effort. It is not a passive activity, especially coding. You must think of it like exercise, you must exert effort for progress.
When a person chooses to learn something themselves (given all circumstances are the same), they learn faster, more deeply and with readiness.
A final principle relevant to coding, you must think your instructor, book or documentation is credible. You can do this by researching the teacher and seeing their credentials. This is an additional psychological prep where you become certain this knowledge is the right knowledge and the previous two principles are enhanced.
It is a bit magical how these principles of the Knowles method affect your learning speed in coding. With the right passion and methodology your progress comes with greater ease.
Spaced repetition for coding
This topic is talked about to death in the learning to learn community. But, two things happen with spaced repetition which I want to highlight. Firstly, you learn the material for the long term if you invoke spaced repitition. Secondly, your cognitive function or physical adaptation to code improves over spaced time when you are not coding.
It is a great service to yourself to continually code every day and wait/expect the mind to flower for your next session…
As a practice, I recommend reviewing information passively throughout the day. Let’s say you are learning Java Spring. You spend 2 hours creating an API in the morning and learned a lot of great things. As you go throughout your day, review lessons from your practice as you commute, shower, cook, etc.
Think about them, how important they are and which parts of the framework you need to keep the most in your mind…
When using spaced repetition, I also use separate learning sources to crystalize the subject. It is a great idea to learn the same thing from different instructors, lectures, textbooks, etc. Why? It refines your view of the subject to its basic core.
Mnemonics for coding
The basic principle of mnemonics is encoding an experience or knowledge across your imagination and senses. Stories, sounds, smells, touch and visualizations are the top ways to implement a mnemonic.
Mnemonics can be applied to everything at all times. Their purpose is to vary which parts of the brain are used in memorization. This is different than rote memorization where you keep your memory in one perceived local thought.
In coding they are especially useful for memorizing solutions and reinforcing how not to do things. You can use this technique for the rest of your life. Barbara Oakley, in “A Mind For Numbers” goes into depth on how to do this.
Deep chunking for coding
Chunking also applies to all memorization. This is a basic principle avid coders naturally fall into over time. They accidently stumble on the effectiveness of chunking and practice it without thought.
For coding, chunking is usually applied by topic. For example if you are learning C++ and are on something like Object Oriented Programming. Review 3–5 topics from your study on that topic.
Furthermore, pick 3–5 chunks of knowledge/understanding to review in your mind. The idea is to create a tree:
This depth and width is known as “deep chunking” which is named for how deep and wide these trees can get. It is the natural way your mind stores programming data, your brain’s data structure for coding. It is kind of like a Python dictionary or JSON file.
Your goal should be to create epic trees of different subjects, readily accessible for all your implementations.
Typically, you will do this naturally as you progress as a coder. It is not something you have to put extraordinary effort into doing. But, if you don’t do this, you won’t be able to code yourself out a paper bag. This is simply how the mind functions.
How to Cultivate Passion
Normally, learning efficiency influencers always tout the power of the Pomodoro method(taking breaks often). Though this is useful for subjects which are heavy, complex or require great effort, there is another factor I want to mention.
Passion & love. These things give an endurance to a craft which the Pomodoro method cannot replicate. They are a driving force which pushes you beyond the natural limits in each coding session. They sustain us and attach us to a subject.
This is a force of learning people often think is static. We fall into this trap of believing our dislike for a subject can’t be changed. Instead we “following our passion” or are “in love with coding”.
Well, passion & love for a coding niche or coding itself can and should be cultivated & protected. “Oh, I don’t think I like my algorithms class, it is just too hard”, or “I don’t think I will ever learn ‘x’ subject my mind just doesn’t work that way”.
Instead, I recommend cultivating, nourishing and protecting your passion for coding. You can go from hating a subject to loving it over time. Here are some tips for this:
Passion comes with increased skill: There is a phenomenon whereby learning a subject in depth naturally begets passion. So long as you are garnering positive affirmation and little to no pain or just see the reward enough to bare it, your passions will grow for the subject.
Skill itself is a motivation and reward.
Reward yourself near the time of the task: Either before, after or during, reward yourself for doing the task. Avoid too much discomfort and trick your mind into thinking its enjoying the activity. Do this daily and your mind will slowly forget negative emotions.
Celebrate small wins: Though this is controversial, I recommend not worrying about the long term goal so much. Just focus on small wins. “one exercise, I finished one exercise, awesome! Let’s go enjoy our lunch with joy”
Protect your passion and you will find it serves you well…
Anywho, I hope you learned something…
Happy coding!
Resources
“A Mind For Numbers” book: https://a.co/d/4Rx6XXU
Joshua Foer wiki: https://en.wikipedia.org/wiki/Joshua_Foer
Michael Knowles wiki: https://en.wikipedia.org/wiki/Malcolm_Knowles
Pomodoro method: https://todoist.com/productivity-methods/pomodoro-technique