In this article, I wanted to write about the changes I’ve made in my own ability to learn new subjects and material through my journey at Launch School. I think that it’s crucial for anyone in a knowledge-driven field to analyze how they learn and improve these skills, and that goes double for software developers.
Software development demands a near constant learning of new technologies and areas in order to stay sharp, stand on the forefront of technology, and remain hirable in the future. And thus it is vital that we not only learn new subjects deeply, but also improve our ability to learn more effectively.
Over the past 1.5 years of studying at Launch School, I’ve continually improved my learning process and revamped the techniques I use on a daily basis. I’ve gone through the Learning How to Learn course on Coursera and read multiple books that have influenced how I learn, which I’ve listed at the end of this article. I’d like to share with you what I’ve found useful and what I’ve discarded as useless. Let’s begin!
This technique is a process in which you review material on a delayed time scale and is often implemented through flashcards. The goal is to review material that you find difficult more frequently, and to review material at the point that you’re just about to forget it. This helps to build a stronger neural connection to the information so that you can recall it more effectively.
Spaced repetition has you review the deck once, separate the cards based on whether you recalled the card’s info easily or not, and then review the cards again at different intervals. If you got a card right immediately, review it again in a week. If you struggled with a card, then review it tomorrow. Repeat this process over time and extend the intervals if you continually recall a card’s information. And if you struggle with a card, then “reset” it’s interval to tomorrow.
This technique requires consistency and offers huge payoffs by improving your ability to remember key information while also giving you a system to study a reasonable amount of cards each day. Thankfully, there is a free program called Anki that you can download to create and store your flashcards, and it even calculates the time intervals for you! I highly suggest you use it instead of keeping your own flashcards on hand.
This is a game changer and was made mainstream by Cal Newport in his book Deep Work, which I highly recommend. The book’s key takeaway is that in order to thrive in the knowledge economy of today (which software development firmly sits in), we need to develop the ability to quickly master hard things and produce at a high level in terms of both quality and speed. And the way to do so is through deep work, which is when you work/learn in a state of distraction-free concentration that pushes your abilities to the limit.
For example, if you’re studying blocks in Ruby and want to utilize deep work, then you need to study somewhere quiet without any distractions (no social media, email, phone, music, etc.) and push your brain to soak in the information by filling in the gaps of your knowledge and solving problems. You’ll likely find that doing so will be hard as your focus will constantly want to shift to something new and your brain will feel strained by having all your concentration on the material.
However, this technique is extremely important as it builds your brain like a muscle. In the beginning, I couldn’t perform deep work for more than about 40 min at a time before I needed a break. But now I’m able to do 1.5 hours at a time 3–4x a day. There is a reason that deep work is often discussed at Launch School, as it truly improves your ability to learn a new topic and work through challenging situations.
Another technique that is closely related to deep work is deliberate practice, which is the focused practice of a weak area/skill in order to improve it. Just like deep work, it requires you to work distraction free and to focus entirely on the task at hand. The task should be a challenge that is just above your current skill level in order to facilitate and push your growth. The steps I follow for deliberate practice are generally:
- Identify a weak area/skill that I need to improve.
- Create a goal that I want to achieve by the end of my practice.
- Work distraction free on this area/skill for a set amount of time (typically 1–1.5 hours is the limit for most people).
- Review my progress and determine if I’ve met my goal.
- Set my goal to be a completed small project that allows user interactions through event listeners, handlers, & managing HTTP requests.
- Set up my work area to be removed of distractions and start with a barebones project that already had HTML/CSS and a backend to receive HTTP requests (there are plenty of such projects to practice with in the 230 course).
- Work on this project for 1–1.5 hours with complete focus.
- Once the time is up, I’ll quickly review my progress and determine what areas in the project I needed to practice further.
You can use deliberate practice on almost any subject or project so long as you follow a similar process. Soon enough, you’ll see a considerable improvement in what was once a weak area for you.
I do want to make a quick note of the distinction between deliberate practice and deep work. They can seem to be the same thing and there is a lot of overlap, however there are some important differences. I consider deep work to be related to learning new material or working on an existing project with extreme focus. Examples of these include:
- Building a side project.
- Reading up on a new subject and organizing your understanding (like Ruby in the 101 course).
- Writing a blog post.
- Reviewing some material you may have forgotten.
Now, deliberate practice does incorporate deep work in requiring focus and lack of distractions. But the goal of deliberate practice is to improve an existing skill or to take your current understanding of material to another level. Examples include:
- Practicing concepts to improve on through small projects.
- Solving coding problems that are harder than those you’ve previously solved.
- Practice system design and algorithms in preparation for an interview.
Try to implement both deep work and deliberate practice into your daily studies and see for yourself how a big difference they can make.
The Feynman Method
This last technique is one of my favorites and has shown up in quite a few articles. It’s a method popularized by Richard Feynman, a Nobel Prize winning physicist who is widely regarded as one of the greatest teachers for explaining complex ideas in simple terms. One of his most famous quotes is how he would explain the concept of atoms:
If, in some cataclysm, all of scientific knowledge were to be destroyed, and only one sentence passed on to the next generations of creatures, what statement would contain the most information in the fewest words? I believe it is the atomic hypothesis (or the atomic fact, or whatever you wish to call it) that all things are made of atoms — little particles that move around in perpetual motion, attracting each other when they are a little distance apart, but repelling upon being squeezed into one another. In that one sentence, you will see, there is an enormous amount of information about the world, if just a little imagination and thinking are applied. — Richard Feynman
During his graduate school days, Richard Feynman would take a brand new notebook and title it “Things I Don’t Know”. In this notebook, we would identify the gaps in his knowledge on a subject and dissect each detail until he had formed a complete understanding of the material. His process was actually quite simple:
- Identify the subject and write out everything you know about the subject. Do this without looking at any notes or resources, but instead recalling your subject knowledge from memory.
- Explain the subject to someone who wouldn’t know anything about the subject. With this step, you are forced to use simple terms and focus on brevity.
- Identify any gaps in your explanation, whether in your difficulty explaining a piece of the subject or questions from your audience that you couldn’t easily or simply answer. This is where the true learning begins.
- Return to learning the gaps you discovered. Organize and simplify your explanation into a narrative that’s easy to convey.
The power of this technique comes from the recall of information completely from memory (similar to spaced repetition) and the cycle of learning a subject, refining your understanding, trying to make it understandable to someone else, and identifying what you still need to improve on. Our brains are exceptionally good at making us believe that we are more fluent with a subject than we actually are (known as the illusion of fluency) and this technique makes it brutally clear how fluent you actually are on a subject.
Now this likely sounds like a lot of work, and it can be if you use it for every single concept in a larger subject area. So I would recommend that you pick a broad subject (like the fundamentals of Ruby or how HTTP works), and as you write out the details and follow the process you’ll naturally find the gaps to focus on. And of course, this technique is best implemented using deep work!
I hope that you try these techniques out and find them as useful as I have. Learning how to learn can be a rewarding and enlightening journey, and I highly recommend that you explore a range of techniques to find what works for you. If you have any tips or tricks that I didn’t cover or want to share your experiences with the ones that I have shared, please leave a comment. Thanks for reading!
Deep Work — Cal Newport
Mastery — Robert Greene
The Art of Learning — Josh Waitzkin
The 5 Elements of Effective Thinking— Burger & Starbird
Mindset — Carol Dweck
Learning How to Learn — Dr. Barbara Oakley (Coursera)