When I moved from Puerto Rico to Chile in High School I took a programming class that changed my life. Because of the difference in school years, the class had already stared at the new school. So my teacher gave me the book and a series of problems to solve through self-study. If I was able to finish them by the end of the class then I'd get a passing grade.
How Do I Learn?
People think I spent most of my time teaching, but the reality is that most of my time is spent writing (for teaching) and learning. My learning approach hasn't changed much since high school. It goes something like this:
- Learn by reading documentation or watching videos
- Take notes of what I consider important
- Practice as soon as possible
- Teach it to someone else
Let's go through these.
Learning Often
Giving yourself time and permission to learn is probably the most important skill to develop. If I take 30 minutes to learn something that will eventually save me hours, then it makes sense to spend the time doing it. Although I learn by reading or watching videos or reading documentation, it doesn't really matter how you learn. Different people enjoy different types of learning.
According to the 2021 Stack Overflow survey, almost 60% of the more than 80k respondents learned how to code from online resources. That's compared to 54% from school and 51% from books/physical media. Whichever way you choose to learn, this is a critical skill for developers.
Take Actionable Notes
If you don't have time to practice right away, then go over your notes as soon as possible. Try to revise and add to them. Research shows that going over your notes and reviewing shortly thereafter can help you learn faster.
The difference between normal notes and then ones I use for learning is that I focus on writing things I want to practice later. I learn from videos, documentation or articles, so those are easily bookmarked for access later. Learning materials can have a lot of fluff, so I'm really interested things I want to reinforce with practice.
Practice with Purpose
It's tough to learn something well that's not going to be useful in the future, so reading documentation is a waste unless you're willing to do something with it.
If you're reading from documentation, try to give yourself a realistic problem that will help you expand your knowledge about the topic.
Teach it
This is one secret all teachers know. The best way to understand something is to try to explain it. One of the ways I did this in high school is by becoming a lab assistant. Having to help people with their own problems made me really dig into topics.
If you've taken some of my courses, you know that I am almost always building something on each course. I always learn with more purpose if I have a goal in mind.
What does Research Say?
Little did I know that the way I was learning in high school was being codified by researchers and instructors for decades and formalized in the 70's by Malcolm Knowles as the learning principles for adult learners.
The focus of the book is on Andragogy: how and why adults learn. I think it maps well to how I learned programming in high school. Here's the key concepts.
Prior Experience - Learners have a wide range of experience levels
Self-concept - Learners like to feel like they're in charge
Need to know - Learners want to know why they need to learn something
Motivation - Learners are better motivated by internal pressures
Readiness - Learners want training when they need to know something
Orientation - Learners are encouraged by solutions to real problems
I'm going to skip the first two here, since I they're self-explanatory. Different learners clearly have difference experience level and they also like to feel like they're in charge. Those are things that all teachers think about when teaching a topic. Let's talk about the others.
Need To Know
You will be more successful learning if you understand why you need to learn something. When I taught in college one or more students would always want to know why something was important. What they were really saying is why do I need to learn this? What's in it for me? I don't blame them. CSS and JavaScript are getting ridiculously complicated.
That's why in my approach to note taking I don't write down everything, just the things that I think are important enough to remember or try. If I don't feel like I need to learn something, I'm just going to look it up again later.
Motivation
This relates to another concept in Andragogy. We can be motivated by all types of things, an increased salary, a new job title, etc. The motivations that work the best are things like job satisfaction, self esteem and quality of life.
How does this translate to practical learning for developers? For me, I choose to learn things that will improve my quality of life as a developer. I don't worry about using shiny new frameworks (although it's my job to cover them) unless I think that it's going to substantially improve my quality of life.
My blog, for example has gone from Jekyll to Eleventy and I'm now thinking it's time to try Astro. Besides the fact that it's my job to stay ahead, Switching from one platform to another was motivated by making the blog easier to update.
If you don't work on having a motivation to learn something, you're not going to be successful.
Orientation
People want to learn from real world problems. That's my problem with a lot of documentation and even some tutorials. I teach the same way I learn...by working on something realistic.
It's pretty popular to see things like this on social media today.
A bit of code that explains how promises work. I love seeing those, but I rarely use them to learn. That's because the problems aren't taught or presented in context.
This is from a course I did that shows you not just the code for the spread operator, but how you might use it to solve a problem you can relate with.
If you see a code png or gif on social media and it's something you want to try later...bookmark or save the code and then make a note to try it later. Try modifying the code for some extra retention.
Readiness
Most people don't want to learn things until they have to. That's the reason that developers use Google or Stack Overflow so much. Deadlines are a fantastic way to learn, so you can create your own by defining some accountability.
Rcently, GitHub announced access to its code search engine. Some of this functionality was already in GitHub, but now GitHub launched it as it's own service programmed with Rust for ultimate speed.
Here's some techniques to target readiness. Writing a regular blog post and having a weekly stream is definitely motivating me to learn new things constantly. If you make it a point to As a boss, you can ask your workers to talk about a new topic at a meeting, or ask them to have a day of learning where they get to share what they learned with each other.
Learn More
In the next episode of The Toolbox, I'll be talking about learning and give you more examples of how I approach it. I'll show you a demo of the Google Code Search as well asa a new Terminal I'm beyond excited about called Warp. Click below to get an invite and see you then.