Learning feels sometimes like putting together pieces of a puzzle. Photo by Hans-Peter Gauster on Unsplash
As developers, learning is an everyday thing. However, there are so many ways to learn that it can easily feel overwhelming. It's helpful to keep in mind that each method has its pros and cons so you can have more effective learning sessions.
Here are the main methods I use for learning. For each one, I'll answer the following questions:
- What value does it give?
- When to use it?
- What limitations does it have?
Disclaimer: This is by no means an extensive list of all methods available, but these are the main ones I personally use. Feel free to reach out to me with others I'm missing :)
Photo by Thomas William on Unsplash
- Easy to consume: people can follow along when you show them running code instead of just pasting chunks of code
- Fast to consume: when videos are short and centered on a specific sub-topic, you can just watch it and get an idea of the concept it explains
- First contact with new technology: You can watch a video almost effortlessly and get a sense of what a technology does
- Deepen knowledge in a specific technology: You can find videos from very high-level engineers or even the creators of a technology
- Get common best practices: Common patterns tend to be spread really quickly so someone will usually make a course on it
- Subscriptions can get pricey: Good material costs money. It can be a very good investment though
- The theoretical base is many times weak: Since the videos usually focus on practical applications of the technology. The whys behind the design of the example project or the technologies are left as an afterthought
- Examples are sometimes basic: Since time is limited, usually courses take a contrived example and don't give you a broad perspective on a real-world application
Photo by Raul Varzar on Unsplash
I'm talking about projects you do in your spare time to solve your problems with programming.
- Gives you experience making technical decisions: when you solve actual problems instead of hello-worlds, you need to make technical trade-offs, evaluate new technologies and many other real-life decisions. This is a very important muscle to exercise
- Gives you experience with the many aspects of releasing a software project: from frontend to CI to deployment, each one has its intricacies
- Longer lasting learning: we learn better from our mistakes, nothing like a 2-hour configuration bug to make you remember to read the docs ;)
- Provide a playground to try new ideas or technologies: by trying out new approaches you can expand your repertoire and try out new cool tech
- When you have a problem you can solve with technology: you have the skillset, why not use it? Maybe other people have the same problem
- Experimenting with new ideas or technologies
- All the time: there is so much new stuff to try out and updates to existing stuff that it helps to have a working product that needs to be maintained
- When you want to get familiar with a family of technologies: maybe you want to see how it feels to use react with GraphQL? Or how using redux and its many middlewares make you structure your app?
- Profit: hey you never know if you have the next dropbox
- When you want to develop your portfolio
- Takes long time and motivation: you have to be disciplined to finish a complete project, even a small one
- Needs clear objective: Either solve a problem or learn. If it doesn't, it can fade into the realm of unfinished ideas
Photo by Ursula Spaulding on Unsplash
- Learn to navigate other people's source code: this is a fundamental skill as a software developer. We spend a large chunk of our time reading other people's code. Big open-source projects will challenge you in that they can be humongous in terms of size. You will need to ask for questions and process other people's way of solving problems
- Discuss technical decisions with very smart people: open source projects need to make sure their decisions don't impact negatively their existing users so prepare to be challenged on a solution you are proposing and defend your arguments
- Learn current best practices and tools: maintained open-source projects need to keep up to date. This means they usually use state-of-the-art technologies to solve their problems
- Learn more about a technology you are using: if you get familiar with how a library you are using works on the inside, it will give you more insight on how to use it better and maybe propose a feature or fix a bug
- As much as you have time to (at least once every 1-2 months): it will help you challenge yourself with problems you are not familiar with and collaborate with other very smart engineers
- When you want to learn how some technology works on the inside
- Getting up to date on current technologies
- Developing your portfolio of contributions: it is very valued in the industry
- Solving the actual ticket can take a long time depending on its complexity and the back and forths with the maintainers
- You have to dig into the issue list to find a worthwhile issue to solve
Photo by Alfons Morales on Unsplash
- Quality content: if chosen correctly (by editorial, author or otherwise), you make sure the quality of the book is top-notch
- Deep understanding of specific topics: broadening your toolset with a specific technology will help you choose a more fitting solution
- Convenience for consumption: if physical, you can read them anywhere you like
- All the time: be always reading a technical book, there is so much to learn and it can help you get off the screen for a little while
- Wanting to deepen knowledge into a specific technology
- Wanting to improve your overall thinking process with better mental models and techniques
- Long-time to consume: in my experience, to really grasp new ideas from a technical book, you need to re-read and think about the content for a while
- Expensive: technical books are very expensive compared to other non-fiction books
- If technology-specific will probably get out of date quickly
- Need to balance your reading time between technology-agnostic vs technology-specific books, both are important
Photo by Samuel Zeller on Unsplash
- Solutions to specific problems
- Short learning sessions
- Learn about other people's mistake
- Hands-on solutions
- All the time, maybe every day depending on your learning schedule
- Solving very specific problems
- Getting started with technology
- Wanting to get deeper into technology or concept
- There is an avalanche of articles every week: hackernews, medium, subscriptions, dev.to, it goes on and on. You need to prioritize which ones to read and keep looking for new sources.
- A lot of noise is generated from duplicated articles: some examples, "Getting started with react.js" or "How to become a programmer".
Photo by Héctor J. Rivas on Unsplash
- Evaluate your ideas
- Learn about other people's thinking process
- All the time
- Solving a specific problem
- Finding a job
- See what's coming in the future
- While developing a personal project
- Needs constant engagement
- You need to dig to find a conversation you are interested in
How do you learn and keep improving your technical skills?