I believe that the best thing you can do for your career as a Developer is teach yourself how to learn effectively. Learning is a skill you need to develop, and it was one I actually didn't reach competence in until long after I'd completed my formal education. The difficult thing about learning as a skill is that there is no one-solution-fits-all answer as to how to do it. So you can't pay someone to give you a step-by-step instruction on how to teach yourself new things. You need to design a process that fits your personality, temperament and preferences.
I've read other posts discussing the importance of identifying the learning methods that appeal to you: textbooks vs. videos or tutorials vs. hacking something on your own. The following are some questions you can use when thinking about how you may best learn things that go a little deeper than a preference for one method over another.
1. What style of learning do you naturally gravitate towards: JIT learning, deep learning or expansive learning?
You may have already come across JIT (Just-In-Time) learning as a concept, but deep learning and expansive learning are some names I made up to illustrate my point.
Just-In-Time learners learn things when they become necessary. They rarely want to learn something just for the sake of learning it, they can usually identify the specific reason they need to learn anything at a particular moment. I am a classic JIT learner. I basically never choose to learn a new library or technology unless I need to use it for work (or a side Project, back when I spent time on those). I don't read textbooks and when I've paid for courses, I end up just skipping through the videos and picking out the pieces I need instead of following the instructions step-by-step.
Deep learners like to go really deep on a subject when they are learning it. If you constantly wonder why an API was written the way it is, reading through the source code of a library or consuming every single page of the docs for a technology you're learning about, you might be a deep learner. Unlike JIT learners who are trying to extract enough info just to get a job done, deep learners get satisfaction out of deeply understanding a subject, regardless of whether it is necessary to complete a task.
Like the name suggests, expansive learners like to consume information across an expansive range of interconnected topics. If you are the person who wants to learn how to build a project from front to back, rather than stick to your specialisation, you may be an expansive learner. Expansive learners are great at building up a really rich understanding of how the technology they are using works, but they can get "side-tracked" going down avenues that aren't really a priority at the moment.
When you are motivated to learn, it can be via intrinsic motivation or extrinsic motivation.
Extrinsic Motivation is when you are learning because you wish to earn a reward or avoid punishment.
Intrinsic Motivation is when you are learning because you find the act itself rewarding.
Both types of motivation can help you reach a goal, but in my personal experience I am more likely to learn when I'm tapping in to intrinsic motivation. Some examples of trying to use extrinsic motivation over intrinsic are:
- learning a language you don't enjoy using because you believe it will get you a fancy job at a company like Google.
- blogging about a framework you are not interested in because it is popular and you think you will get more engagement by doing so.
In the times I've been intrinsically motivated to learn new tech because I was genuinely excited about it (React and GraphQL come to mind), I've progressed much faster than the times I've had to learn things I didn't enjoy in order to get paid (integrating with some third-party APIs that shall not be named here).
Are you someone who feels lonely when you're tackling a new subject on your own? Would you much prefer to have a person or multiple people to bounce questions or ideas off of while you're making progress? Some people are natural social learners, and do much better at learning when they can do it in community with other people. Others much prefer to learn alone.
I am in the second camp. I like to do plenty of research on my own before I even start a discussion on a subject with someone else. I recognise the value of pair-programming and I'm willing to give it my best effort when it happens, but I really don't enjoy it. When I attempt to watch YouTube tutorials, I have little patience for the person doing any kind of long-winded explanation and I usually end up turning them off.
After considering your answers to the above questions, you might be able to come up with some strategies to help you learn more effectively. This is what works for me:
- Working on my own.
- Focusing on completing a specific task or project.
- Reading as many docs, blog posts, and stackoverflow answers that I need to figure out the next step.
- Trying to write the code, failing, and trying again. Over and over.
You might do better with:
- Consuming entire books on a subject.
- Signing up to a course provider with video tutorials such as Egghead.io or Wes Bos.
- Joining a public challenge with some built-in community like #100daysofcode or CodePen Challenges.
Yes, we can design our learning strategy so that we are learning more efficiently, but there is no way to short-cut learning new things. You still have to put in work to gain knowledge and experience around a subject. Hopefully, if you're making sure you're relying on intrinsic motivation, it will be easier to keep going when things get difficult.
So are you a JIT, deep or expansive learner? What are your tips for other learners like you? Let me know in the comments.