Lately, I’ve been thinking a lot about how I learn. I was a teacher before I started programming, so I spent many hours studying how people learn. Since being a developer involves constantly staying on top of the latest technologies, I’ve turned these strategies on myself in service of learning more, faster.
In a previous post, I introduced the concept of Metacognition and talked about a process called metacognitive regulation, which you can use to get the most out of your learning sessions. In this post, I’ll share some more tactical approaches that you can use to level up your learning as a developer.
1. Know Your Learning Style
Before you start applying learning strategies, it’s good to establish a baseline understanding of how you learn. One of the easiest ways to start this work is to find out your learning style.
You may have heard of the three learning modalities proposed by Walter Burke Barbe et al: Visual, Auditory, and Kinesthetic. Just about everyone can learn from all of these approaches, but we’re also more or less attuned to each of them. You can find out where you fall by taking an online quiz. It only takes ten minutes, and is applicable throughout your life.
Here are some ways to use each modality when learning technology:
Visual learners can scan project directory structures, sketch ERD and other architectural diagrams, watch screencasts, and read through source code.
Auditory learners might learn well by listening to podcasts, watching conference talks on YouTube, and reading documentation aloud.
Kinesthetic learners will feel most at home working through tutorials, experimenting with demo projects, and doing hardware projects.
Keep in mind that you might benefit from a mixture of approaches. Looking at things from a variety of approaches can give you a more in-depth understanding of what is going on.
This might be obvious, but one of the easiest ways to level up is by working with someone who already knows what you want to learn. For extroverts, it may work better than studying alone ever could. Even if you’re an introvert, working with a mentor can be a great idea.
There are several strategies a mentor can take to help you learn. They can suggest thought exercises or prompts for you to work on, review your code, and explain how higher level concepts fit together.
But perhaps the most valuable thing a mentor can do is pair program with you. Asking questions and making suggestions while an experienced programmer thinks through and solves a problem in a new language or framework is an illuminating experience. If you can think of anyone who knows about what you want to learn, consider asking them to work with you. Even a one-hour session can take you leaps and bounds beyond your current capabilities.
When I was a bootcamp student, my instructor Jeff Casimir taught us on a Pomodoro schedule, and encouraged us to take the same approach in our project work and individual learning. We would focus on a single aspect of the curriculum for 25 minutes, while avoiding distractions completely. Then we’d take a 5 minute break where we would completely switch context.
By the end of the program, I was Pomodoroing my way through my entire 14 hour day, only dropping the practice for meals and an afternoon walk. Of course, this was an extreme application of timeboxing. I was trying to cram as much knowledge and experience into my head as I could. But I still turn to Menubar Countdown whenever I want maximum efficiency.
If you haven’t tried timeboxing, I’d recommend giving it a shot for a couple hours. I’ve found it most effective when you’re strict about removing distractions like company chat, text messaging, and social media. It’s also good to set an intention at the beginning of each work session.
Timeboxing as you learn keeps you focused on finding out what you want to know, without getting dragged down rabbit-holes or spending more time than intended on a topic.
Education research has produced a deep wealth of strategies for learning over the past 30 years. In that time, the one discipline that has been studied and thought about the most is probably reading. Being a strong reader is a crucial skill for effective learning. Reading code is no exception.
When I first started working as a developer, the importance of reading source code was the first thing I learned. When your application relies on outside packages and libraries, it’s sometimes the only way to track down puzzling bugs. At the same time, reading through source can be a great way to get to know the idioms being used in your community. I personally like to follow what’s going on with Ruby on Rails, because the community is always active and pushing the boundaries of what Rails can do.
There are a couple of reading strategies that you might find helpful when you’re trying grok a new technology.
The first is called RAP, or Read, Ask, Paraphrase. In this approach, you make an effort to monitor your understanding as you go along. The procedure is fairly simple: begin by reading a unit of text (a paragraph, for example). When you’re done, ask yourself about what you’ve read. What is the topic? What are the key points? What are the most important details? What’s the author’s attitude toward the topic? Finally, try to summarize what you’ve read to yourself. If you’re struggling, that’s a flag that you haven’t fully digested what you’ve read. It can also be helpful to perform this process at a higher level as well, paraphrasing a complete article or module of source code once you’ve read it.
The other strategy you might like to try is to approach the questions you ask yourself from a higher level of thinking. There’s a model of thinking called Bloom’s Taxonomy that lists levels of questioning according to the level of cognitive demand. The more recent version of Bloom’s Taxonomy begins with remembering as the easiest level, then progresses through understanding, applying, analyzing, evaluating, finally coming to creating as the most demading level.
A key idea with this model is that as you engage in higher levels of thinking, you necessarily employ the levels below it as well. That means that if you are creating something, you’ll also need to engage remembering, understanding, analyzing, and evaluating. Although it’s suggested that you approach the material from a variety of levels, a study conducted in 1981 showed that using more higher-level questioning leads to better factual recall and application of thinking skills.
Here are some specific ways you can apply higher levels of thinking when learning tech.
When you’re trying to understand why something is done a certain way, ask for evidence. How do you know that a linked list is more performant than an array? Look at a benchmark!
You should also ask for clarification. Find out how the details work. Don’t be satisfied that something works, find out how.
Ask hypothetical questions. If you learn how to use a certain method, ask yourself: “what would happen if I passed it nil instead?” The answers to thought experiments like these can really illuminate the inner workings of an API.
Similarly, you can consider cause and effect. “What is likely to be the effect if I do X?”
Finally, engage in some self-reflection after reading by summarizing what you’ve learned. Ask yourself for one or two key points at the end of each learning session. Say them out loud, or write a blog postabout them. Ask yourself what still feels unresolved – what do you not understand? That can give you a good jumping-off point in what to look at during your next session.
In addition to reading strategies, education research has produced a large number learning aids with a proven track record of success. You may have used some of these when you were in school and forgotten about them. Why not try experimenting with them again as an adult?
The KWL Chart is a great way to guide yourself in prioritizing what you want to learn about. The acronym stands for “Know”, “Want to Know”, and “Learned”.
To use a KWL chart, make three columns on a piece of paper or electronic document, and give them headings of “K”, “W”, and “L”.
When you begin a learning session, choose a topic. Before you read anything about it, brainstorm words, terms, and phrases representing what you already know about the topic, and record these in the “K” column.
Next, ask yourself what you think you’d like to know about the topic and record it in the “W” column. In this step, you are setting your intention for your learning. You’re also giving yourself a map of the things you need to focus on. As you begin to do your research, you can always add more things to the “W” column to investigate later on.
Finally, as you read about your chosen topic, record what you find out in the “L” column. This isn’t a place to take extensive notes. Just write down key phrases that will help you remember the broader concepts you learned about.
Venn diagrams are a widely known way to explore the relationship between two different sets of data. When it comes to learning, they can be really helpful for understanding the distinction between two languages or frameworks.
This tool might seem superfluous at first. What’s the point of writing it down if you already understand the distinction? But having everything laid out in front of you visually can really help you get a mental map of the relationship between concepts. Also, approaching your research with a mind that’s looking for similarities and differences in relation to something you already know activates your prior knowedge. And it can lead you to ask different questions than you might have otherwise.
Another diagram that might be familiar to you is the Concept Map. A concept map is basically a bunch of boxes connected by arrows. You connect the boxes from top to bottom with arrows that represent causation.
When I first began to study computer programming, I was struck by how similar the evaluation of a program is to the playing of a piece of written music. A program reminds me of Impressionistic Music, where the same idea shows up in different contexts as a piece progresses.The “playing” of a program involves the computer interpreting the current line of code, and every time it encounters a variable or method call it hasn’t seen yet, it finds the named variable and interprets it in the current context.
Following this line of unfolding logic, we begin to discover lines of causation in our programs. Drawing these threads as a concept map paints a picture of the whole that you would not see otherwise. Once you have that bigger perspective, it’s easier to understand where to look for bugs as they crop up, and know what to do first when you’re trying to build a new feature.
Knowing your own learning process is a great way to make sure you’re spending your time wisely when you sit down to investigate new technologies. Once you’ve established a baseline, the hacks we’ve looked at here can be a great boost level up your learning as a developer.
In this post, we’ve talked about finding out your learning style, finding a mentor, timeboxing, using reading strategies, and visual learning aids as quick wins you can leverage to learn more, faster.
I hope you try some of these and find them of some benefit. Best of luck!
Also published on Medium.