While I continue my self-teaching Computer Science fundamentals, I started to doubt the efficacy and efficiency of my approach to learning. While I have a high level understanding of the topics I’ve learned, my ability to recall details is not as good as I’d hoped. I began wondering if there were a better approach to learning.
Serendipitously, while browsing through ebooks, I stumbled upon “A Mind For Numbers”. Reading the description, I discovered it was a companion book for a Coursera course called “Learning How To Learn”.
I signed up for the course a week ago. In just this one week, I have a discovered some issues with my approach to learning, and have a plan to improve.
I want to share these here. Both as a mechanism to help me think through my learning process, and to help others who are looking to improve their own process.
In this post, I will discuss the following:
- What I’ve learned by “Learning How To Learn”
- The learning mistakes I’ve made
- Improvements to my learning process
What I’ve learned by “Learning How To Learn”
In “Learning How To Learn” (I’ll refer to as LHTL for brevity), Dr. Barbara Oakley and Dr. Terrence Sejnowski dive into both the science of how we learn and techniques to improve learning.
For instance, chunking is one topic that is covered in week 2. It is a process by which our brain organizes bits of information around a meaning. These chunks help our brains run more efficiently. Our working memory has limited capacity; only 4 “slots” in which to store information. But we can chunk information together. By doing so, we can store more information and more easily recall it when required.
To form chunks, we follow 3 steps:
- Focus attention on the info you want to chunk
- Understand the big picture that ties the information together
- Repeat and practice
LHTL gives practical techniques to improve our ability to chunk. One technique discussed is recall. After some learning activity (eg: reading a chapter or watching a lecture), step away and attempt to recall what you just learned. Doing so helps build and reinforce chunks.
In addition to these lessons, the course also features interviews with professors, scientists, and “extreme learners” (people who seem to “hack” the learning process).
The most recent interview I watched was with Scott Young, one such “extreme learner”. Scott discussed his MIT Challenge, which he described as: “Over the next 12 months, I’m going to learn the entire 4-year MIT curriculum for computer science, without taking any classes.”
The learning mistakes I’ve made
As I was watching the interview with Scott and compared his learning process to mine, I began considering the weaknesses and mistakes in my own learning process. In this section, I’ll dive into those mistakes=.
1. Illusions of competence
My simplified definition of Illusions of Competence is when you fool yourself into thinking you are learning more effectively than you actually are.
For example, instead of attempting a problem yourself, you look at the solution and think you now understand how to solve the problem. But, given that problem without the solution, you have trouble solving it.
My own illusion of competence was passive learning. I’d spend hours watching video lectures. But ask me to explain the details of what was discussed, or implement a program based on a design, and I had difficulty doing so.
In the moment, it felt like I was learning. While I may have acquired a high level understanding, it was not deeply ingrained in my mind. Going back to the concept of chunking, I may have formed those chunks, but they were not well defined, and therefore harder to recall when needed.
2. No practice to reinforce learning
An important step in building and reinforcing chunks is practice. This practice could take the form of exercises, tests, and projects.
During my studies, I would skip a majority of the practice provided by the courses.
There are two reasons I can think of why I did so:
First, I had acquired an aversion to tests. When I was in school, I viewed testing as some external mechanism to judge my abilities. A bad grade on a test seemed like a punishable offense.
Second, I believed that the exercises, tests, and projects slowed my forward progress. I felt time was better spent learning something new rather than reinforcing something I believed I already knew (my illusion of competence).
LHTL has caused me to re-examine these beliefs.
First, testing your knowledge should be viewed as a mechanism to confirm and deepen your understanding. For instance, if you miss questions on a test, you now know that you did not fully understand the concept on the first round and can go back and review it.
Second, practice is an important step in the process of chunking. The repetition helps build new chunks and strengthen existing chunks. Without practice, recalling those chunks is difficult.
3. No goal setting or evaluation
How do I know if I am learning effectively?
As a software engineer, I’ve learned the importance of metrics, setting measurable goals, and evaluating progress towards those goals.
Without metrics, you are flying blind. You don’t know if what you’re doing is working. And if you decide to make adjustments, there is no way to know if the adjustments are better or worse than before.
Previously, I did not worry about goals or measuring my progress. I’d set a very high level goal of completing the course list set by teachyourselfcs.com. But I was missing a important aspects of goal setting.
- My goal was not time-bound
- I did not set intermediate, attainable goals/milestones
- I was not measuring or evaluating my progress towards that goal
Improvements to my learning process
With these mistakes in mind, let’s discuss the two changes I’m making to my learning process.
1. Learning Scrum
Most of the software engineering projects I’ve worked on follow the Scrum framework.
In a nutshell, the Scrum framework follows a process whereby a team determines deliverables to be completed within a given time-frame, called a sprint, that are usually 2 weeks longs. At the end of each sprint, a retrospective is performed to evaluate progress and determine ways to improve in the next sprint.
The Scrum framework can help with the goal setting and evaluation of my learning process.
I can set larger, long running goals, such as mastery of a concept or completion of a course. These will run over multiple sprints.
These larger goals can be broken down into smaller tasks that can be completed within a sprint. For instance, the completion of course assignment.
At the beginning of each sprint, I’ll pull in tasks that I plan to complete that sprint. I can track their progress on a sprint board (I’ll probably use Trello).
At the end of a sprint I can analyze and evaluate my progress based on two metrics:
- Task completion and progress towards goal
- Mastery (this is more ambiguous, but can be derived from grades provided by a course)
Based on these metrics, I can make necessary adjustments to ensure my learning process is effective and efficient.
2. Improve Deep Learning
As mentioned, my previous learning process helped me gain a high level understanding. However, by skipping practice, the concepts were not deeply ingrained.
I’ve learned a few techniques from LHTL that I plan to incorporate into my process:
- Recall – After reading through or watching a video, step away and attempt to recall what you just learned. If you have difficulty recalling concepts, review those concepts.
- Concept mapping – I find the visual aspect of concept maps very helpful in deepening my understanding of a topic and connecting concepts together.
- Testing – Where possible, work on the exercises and tests provided by courses. These will contribute to the Mastery metric (see Scrum process details above).
- Projects – At the completion of a course or learning of a concept, devise a project to help review and connect together different aspects of what was learned.
- Blogging – Write a blog post explaining some of the larger concepts you learn. The act of writing down will help reinforce what you learned and uncover parts that maybe aren’t so well understood. View this as a form of testing and recall.
These are some initial ideas to improve my learning process. As I progress through LHTL, I expect to discover new ideas and techniques that could help me improve even more.
Perhaps some of the ideas I’ve laid out in this post won’t be as effective as I assume. That is ok as long as I am able to identify their shortcomings and pivot.
I think it’s also important to remember that “failure” is not bad. I’ve heard repeated many times, in different forms, that something is only a failure if you don’t learn from it. I’m hoping that by learning from my “failure”, I can make improved progress towards my goals.