As a programmer, you know there’s a constant need to stay up-to-date with technologies you love, as well as the ones you don’t — you need to keep learning to stay relevant in your industry.
Learning is a key component of experience. And experience is a cornerstone of a rewarding, fulfilling career as a programmer. I live by the mantra experience comes with experience.
But learning can feel less like an adventure and more like an obligation, especially when there’s a struggle to retain information or the subject matter is dry.
Let’s face it: materials that cover the latest language or platform are rarely compelling page turners.
Sometimes it’s not about what you learn, but how you go about it. Learning as a busy professional is much different than it was when you were in school. You have less time for studies, and your brain works differently than it did back then.
Implementing and testing various learning techniques is one way developers can stay on top of the need to learn.
This article takes a look at different styles and theories about learning, and then it goes on to cover some common learning patterns and popular techniques. When you finish this article, you should have some fresh ideas about how to structure your learning processes.
While researching this article, we took a survey of the community to learn more about how people go about learning. I’ll give you a hint: a classroom setting is not a favored learning technique around here! Perhaps you’ll decide try out a new approach to learning once you’ve seen how your peers go about it.
Finally, I’ll leave you with some suggestions about how to stimulate learning.
It’s a long journey. 3, 2, 1, let’s go!
Disclaimer: This article is not the results of years of experience studying learning; I’m not an expert in this field. It’s simply the result of years of learning experience, which I’m sharing in the form of an article, decorated with some theory, statistics, and input provided by other developers like you.
Under the Hood
As mentioned, your learning path begins when you start life. Initially, you learn through unconscious learning: you take lessons from observations of the world and things happening around you — you do this for the rest of your life. It is the opposite of conscious learning, which is driven by the will or need to learn something.
Different Levels of Understanding
There are two different levels of understanding:
- Conceptual: When you understand how a particular thing works
- Practical: When you know how to use that particular thing
This classification is what differentiates knowledge from expertise.
You don’t always need both for every experience in your life. You might be a great car designer, but it doesn’t mean you must be good at fixing or even driving it. Similarly, you don’t need to be an expert in electronics to master your TV remote control.
However, there are clear benefits in knowing both. Have you ever murmured “oooh!” after finding a practical use for a theoretical concept? Or have you ever whispered “a-ha!” after realizing how something you use everyday actually works? Then you understand why it’s great to know both sides.
We have two types of memory:
- Working memory: A highly volatile and limited resource that you use consciously to store what you’re focusing on at the moment
- Long-term memory: Where you store all that you know and can recall.
Sounds a bit like RAM and storage, right?
Working memory comprises a number of “slots”, whose size and duration are highly subjective, but usually there are no more than seven slots. Some people forget bits of information in a matter of milliseconds (like me!), while others remember things for decades.
When you’re temporarily remembering a phone number, you’re utilizing your working memory:
- Conscious use: You must be focused on listening
- Volatility: You need to constantly repeat it until you write it down
- Limited resource: You can hardly remember a number that uses more than 3-4 slots.
You may be wondering why you use three or four slots for a phone number, since numbers are often nine to 10 digits long. That’s because we tend to group three or four numbers into a single “entity”. Think of your own phone number: do you know each digit one by one, or do you usually spell it in groups of 3 to 4 digits?
By using spaced repetition, you can move information from working to long-term memory. Repetition alone is not enough. You can spell out a number for hours, but you’ll probably forget it one or two days later. To fully commit it to memory, you repeat it a few times every day.
You don’t necessarily need to say the number aloud, but you do need to focus on it for the time your brain needs to “process” it — sort of like typing it into a keypad. For instance, when you generate a random password that you use frequently, it’ll commit to your long-term memory after a few weeks.
The phone number example is a typical case for chunking, which is a technique you can use to overcome the limitation of your working memory by using groups, patterns or semantics. It’s useful for far more than phone numbers.
Chunking by groups is when you split information into smaller parts, as is the natural tendency for remembering phone numbers.
Chunking by patterns is when you don’t remember the information itself; instead you remember an algorithm or a pattern that allows you to reconstruct the information.
For an example of pattern chunking, consider the sequence of letters “lkjhgfds”. It seems complicated to remember, but if you think of it as the last 8 letters in the middle row of a keyboard, in reverse order, then it’s easier to remember.
Semantic chunking is when information is organized according on its context. For example, given the words dog, yellow, banana, black, mouse, white, cake, egg, eagle, you can logically group them as follows:
- Animals: dog, mouse, eagle
- Colors: yellow, black, white
- Food: banana, cake, egg
“Practice makes perfect”, or at least that’s what the old saying tells us. Perfection may be a far-fetched goal at times, but practice always helps you achieve two important things:
- Complement conceptual understanding with practical understanding.
- Make learning permanent.
Permanence is probably the most important benefit that you get from practice. The more often you make practical use of a theoretical concept, the more confident you are next time you use it — and each time you repeat it, you reinforce its permanence in your brain!
I was a smoker until a few years ago. During smoke breaks, I’d occasionally discover a solution to a challenging problem with while I was thinking about something else.
What has this to do with learning? Not much, actually. But it’s a way to explain two different ways of learning:
- Concentrated (or focused): Focusing on a specific topic
- Diffused: Looking at it broadly, while relaxed, without focusing on it
Sometimes you can’t solve a given problem because you’re peering at it problem too closely — you develop myopia, or worse yet, “tunnel vision”. When you take a break, you can’t help but view a problem from a different perspective, which helps you discover a solution.
There’s no good or bad when it comes to focus level. It’s actually best to alternate between the two.
For instance, you might read through a brief overview to learn about a complex topic then dive into a learning module that covers a specific sub-topic. Then you might zoom out to revisit the overview and repeat modules until you’re comfortable with the subject matter.
With Pomodoro technique, you alternate working in concentrated mode with reward time in timed segments, for example, 25 minutes of focused work followed by five minutes of no work. Then you repeat until your work day is done. This approach gives your brain an opportunity to “cool down” after exertion and even wander into a diffused state of focus.
Sleep is another form of “brain washing”. After a day spent working, the brain accumulates fatigue and you need to wash it out. Ever heard somebody say “Let me sleep on it”, or “I woke up with the answer”. Sleep clears your brain’s cache, so it’s important to allow yourself to get a full night’s sleep.
Learning Techniques and Patterns
Learning is a science, and there are several learning techniques, styles and models.
The classic model is the Visual, Auditory and Kinesthetic model (VAK), which defines three sensory receivers:
- Visual: Learning through written language and visual references. Visual learners often enjoy lectures that come with handouts and videos.
- Auditory: Learning through listening and sometimes by repeating thing aloud, either reading out loud or by moving the lips. Auditory learners do well with lectures, podcasts, and reading.
- Kinesthetic : Learning while doing, touching and moving. Kinesthetic learners react to movement and tactile stimulations, and may lose focus when there’s nothing to do. These learners benefit from hands-on labs and tutorials.
I won’t talk about these in detail. As I mentioned in the introduction, I’m not a learning expert by any means.
What I want to focus on, instead, are some recurring patterns that I’ve experienced myself or have observed in other people. This list is not comprehensive — I am sure there are several other patterns.
Disclaimer: I am using arbitrary names for the below learning patterns. They mean something to me — and hopefully they’ll resonate with you. However, they are not technical names.
Academic refers to the way topics are taught in school. It’s the classic learn everything first, then (hopefully) apply what you’ve learned.
When learning a complex topic, you start with an introduction or orientation — a high level look at the topic. Next, you try to learn it as a whole, using whatever method works best for you, e.g., video courses, books, tutorials or live classes.
In many cases, a large topic comprises several micro topics that are like pieces of a puzzle. Rather than learning the entire topic as a whole, you focus on one piece at a time.
This model can leave you with a “foggy” view of a topic until you’ve explored all the pieces. But each piece makes the topic as a whole more clear. At some point, you’ll realize how the pieces fit together and will see the big picture.
Learning by Using
This method intersects with puzzle learning; it comprises learning a sub-topic through building a project. It’s almost the opposite to academic learning where you learn first and apply second.
When asked about unconventional learning methods, Mike Oliver said that the biggest thing critical to learning for him and his team is doing. When he hires new engineers, he expects them to be pushing code on day one to fix a bug or otherwise do something needed within the code base. This is true regardless of seniority or prior experience with the language. “You will learn infinitely more in a system if you’re required to work with it immediately, than if you read documentation, watch a video, or do some other form of passive learning.
And I really like this: Don’t focus on learning; focus on doing, and the learning will come.
Learning by Perseverance
Have you ever read an entire chapter in a book but mumbled to yourself, “I didn’t understand a thing”?
When learning through perseverance, you simply keep reading and re-reading even when you don’t truly understand the subject. You might repeat a chapter or plow through the whole book again. And you repeat that cycle until things become less obfuscated.
This learning technique is usually not ideal everyday learning. But for a limited sets of topics you need to master, it can be an effective approach — at least it’s been effective for me.
Learning by Teaching
It may sound counterintuitive, but teaching can aid in learning — maybe not for learning something from scratch. It’s most applicable to advanced topics that are related to subjects you know well.
I’m sure you experienced this when writing a blog post, preparing for a conference, or simply by answering questions on Stack Overflow. You may not have considered it a learning activity at the time, but I bet you learned something from the experience.
How Developers Learn
Here’s a question I frequently ask of others: how did you learn the basics of programming? It’s no surprise that about half of the respondents to our survey learned programming on their own or at a college/university.
In terms of learning efficiency, for every one person that favors video courses, two people prefer reading, and four people report that both methods are equally efficient.
As you might expect, people tend to use tools that are within easy reach.
Official documentation, books, blogs and videos are the most popular learning resources, followed by other methods that are either more expensive, such as conferences and courses. Lowest on the list was reading open-source materials, writing and teaching.
Per Kelvin Lau, “it’s helpful to approach learning through different media, such as writing, reading, watching and listening. Each engages your brain differently, which can help create more paths for memory retrieval.”
I find that I don’t spend as much time as I’d like to on learning. In fact, I’m of the majority who spends, on average, four hours or less per week learning. However, jut under half of the respondents enjoy learning for five or more hours per week.
I can’t comment on the 8% who don’t reserve any of their off-work time for learning. I’m assuming their employers take care of their needs, but it does make me wonder how they stay on top of things.
It’s interesting to see that, on average, two out of four respondents spend less than $200 per year, one quarter spends less than $500, and the other quarter up to $5,000 — it’s pretty easy to reach four digits with just one or two conferences.
No doubt that developers are night predators: eight out of 10 do their learning after work, six of 10 learn at work, and two out of 10 squeeze it in before work.
20% explicitly take time off work — presumably, for conferences or courses.
When learning a new, complex topic, half of developers prefer reading a chapter every few days, but a quarter prefer to finish the book as soon as possible — maybe because they can’t wait to figure out who the murderer is?
The remaining quarter of respondents prefer to read a chapter when they actually need it. Is that learning on demand, or learning by using? I think probably both.
Learning with the goal of staying up-to-date is a challenge for most of us — 75% of respondents — due to lack of time.
A quarter blame it on a lack of quality learning resources. Hmmmmm.
Since there are many resources out there, I wonder if they’re not aware of their own learning styles or just haven’t found tools that suit their needs. It’s also possible that they need quality resources for edge cases and niche topics, which can be difficult to find.
It’s no suprise that the majority of tutorial readers work with the presented code, whereas a smaller group only does it occasionally.
I thought that more people would use a tablet for learning. But, like me, seven out of 10 prefer a computer. Only two out of 10 use a tablet or phone, whereas almost one out of 10 prefers traditional books — no wi-fi, no battery, no screen: just ink and paper. :]
In order of preference, the most-used techniques for learning about a micro-topic, such as an API, method or class are:
- Search for an article, blog or tutorial
- Search on Stack Overflow
- Browse the official documentation
Less popular, but still frequently used methods are:
- Watch a video
- Read a book
- Ask someone
- Post a question on Stack Overflow
When learning about a macro-topic, such as a new language, framework, or technical concept like advanced debugging and reverse engineering, readers gave similar responses:
- Search for an article, blog or tutorial (still the most used)
- Read a book, such as our latest release iOS 11
- Browse the official documentation
- Watch a video
…Followed by less-used methods:
- Buy a video course
- Ask someone
- Attend a conference
When asked about the least efficient learning method, two out of four said conferences are the worst way to learn. One out of four say that books, videos and video courses are the last method they’d consider, while about one in six feel that blogs, articles and tutorials are not well suited for learning.
“I have enough experience, I have nothing else to learn!” said no savvy developer, ever. There’s always something to learn in a world where technology continues to evolve.
Here are some key things that I’ve experienced, or observed in others, that can help you learn more efficiently:
The more you enjoy a topic, the more you’ll want to know about it. Passion is what drives your will to keep learning.
Aaron Douglas agrees:
“Learning new things takes a lot of effort for people with ADHD. If you’re learning something that is directly applicable to something you’re currently passionate about, any information channel will feed that craving. If I’m trying to learn something required, for work or a task, but it’s not a compelling topic, I need well-written books to keep my interest.”
Note that the opposite of passion isn’t necessarily apathy, but if you have little interest in a topic then convincing yourself to learn about it is a tall order.
Practice helps you set your knowledge in stone. Just like learning a new language, the more you can use it in practical settings the more fluent you become.
Failure to understand a concept shouldn’t discourage you. What’s unclear today might be explained by tomorrow. And when you don’t give up on finding a solution, you eventually crack the case.
In many cases, you can treat your problem as a black box. For example, with the right search terms and time to search Stack Overflow, you can find a solution or something close enough to use as a model. You can often solve the problem even if the solution’s inner workings aren’t clear.
Wait, am I endorsing “copy & paste” programming? No! Far from it.
I’m saying that working models are great when you have limited time or you’re struggling with a new concept. But use it in moderation, it shouldn’t be a go-to solution.
For some, taking notes improves recall. To others, it’s processing and grouping information in notes that helps new knowledge to persist.
Whether to take notes is subjective: taking notes can definitely help, but it can also be distracting — it’s difficult to write and listen at the same time.
However, taking notes doesn’t necessarily mean taking them “live”. Kelvin Lau says:
“I do most of my learning through reading text, whether it be blogs or books. When I recognize that the book/blog is covering something that is particularly important to me, I take notes on pen and paper.
Taking notes has given me far greater retention on the stuff I’ve read. First, it drastically slows down my reading speed. I try to filter out unnecessary “fluff” from the text, and jot down important points. My goal is to summarize an entire paragraph into one or two points. This always engages me to think critically: What is that paragraph trying to explain?”.
Asking questions has two main benefits:
- Better understanding what’s being taught: Questions can help clarify an aspect, confirm an interpretation, or allow you to revisit to an unclear concept.
- Immediate processing of what’s being taught: Questions help you process the incoming information into smaller bites.
Nobody makes mistakes on purpose, but surely you’ve been told you should “learn from your mistakes”. We tend to hide our errors from others, but most mistakes aren’t that bad.
You learn a lot from the pain of a mistake. If you’ve ever walked into a glass door while tweeting, I’m pretty sure you will avoid that door next time you’re tweeting and walking. The more a mistake hurts, the more likely it is that you won’t repeat it.
It’s unfortunate that mistakes seem controversial and cause people to feel shame. After all, what is “test-driven development”, if it’s not a euphemism for learning from your mistakes?
I’m mentioning this again because even small acts of teaching can help a lot, such as answering questions on Stack Overflow. It’s a great way to expand your brain too, because often you get exposure to real, untrivial and unexpected problems.
I have only seen people do pair programming a few times, but I immediately realized that it has huge potential for learning. By talking it out, developers can filter out potential problems upfront. This defeats the common belief that pair programming is about two doing the work of one. It’s two brains working in synergy toward a common goal.
Matt Luedke believes that “Integrating a social aspect into learning, as opposed to it being purely an individual effort, has so many benefits: you’ll remember the concepts better, you’ll form relationships and teams, you’ll develop social skills, etc.”
And, definitely, it’s not anything remotely close to what Aaron Douglas thinks about himself: “If I had a second brain, I’d be twice as dumb”. :]
What can you do to improve your learning? Here are some ideas:
Participate in Hackathons: a fast-paced way of learning that’s driven by meeting a goal in a limited amount of time.
Prepare for Interviews: Even if you’re not looking for a job, preparing for an interview is a great way to learn. It helps refresh knowledge that you’ve probably forgotten.
There are several books that can help preparing for interviews. A popular one is Cracking the Coding Interview. I found it to be useful because I learned new stuff while refreshing other bits of knowledge I’d forgotten I had.
Experiment with Tasks: Push an established pattern or model to the limit. Use it as it’s never been used before. Use it for something that it’s not designed for. Find an alternative way of doing something that everybody does the same way. Be creative but define clear and achievable objectives — and be realistic. You don’t want to get yourself deep down a rabbit hole or squander company time in pursuit of a golden unicorn.
Challenges: Challenging a friend in person and participating in an online challenge have similar benefits. The challenge of “beating” somebody else has a learning component all its own. Besides serving as a gym for your brain, challenges are a fun way to learn. Make sure you keep the dynamic between you and your “rival” positive, supportive and healthy.
Where to Go From Here?
I highly recommend the Learning How to Learn course from Coursera. It’s very interesting and well done, and it inspired me while penning this article.
If you want to learn more about learning styles, a good starting point is this article on learning styles from Wikipedia, and a dedicated website called Learning Online Styles, which has tons of useful information.
A huge thanks to everyone who took the time to fill out the survey, which was an important part of the article. There are too many to thank individually, but I thank you all the same.
How do you prefer to learn? Are there strategies that I haven’t touched on in this article? Join the discussion below and let me know!