Every few days I come across a thread or a blog post discussing how to keep up with the vast amount of things a developer needs to learn to be a good developer. I think it's a great question because it shows how much passion someone has about being a competent developer. If you are a web developer, you probably need to learn frontend technologies like HTML, CSS, and Javascript. You may also need to learn CSS frameworks like Less or ABC. You will also need to learn the basic principles of design and typography. You may also want to learn a good grid system like bootstrap.js and all about responsive design. You need to know a programming language and it's web frameworks. You need to be really efficient at working with an IDE, with the command line, with basic *nix stuff like AWK, SED, etc. You need to understand security, databases, devops, and cloud concepts like SaaS, PaaS, etc. And I have not even started talking about dev tools like Git, Maven, and whatnot. I think you get the idea of how much there is to learn and how stressful it can get. Lists are a great way to keep the stress-of-too-much at bay. One of the biggest causes of stress when there are too many things to do is the fear that I am forgetting something. But that's not all. Prioritizing the items and figuring out the most appropriate to do next is also a huge challenge. Lists help with all of these. I'll discuss how developers can maintain lists to better manage their learning goals. Maintain a separate list for every distinct topic you want to learn:
You already have a taste for how much there is to learn. I have personally found it very helpful to keep a separate list for each topic such as Javascript, HTML, CSS, databases, etc. Then start digging into these topics to figure out what you need to know in them and create sub lists. If you already follow GTD, then these lists can become separate projects in your GTD system, but I prefer to decouple my learning tasks from GTD. It's mostly because I like to keep track of what I have already learned and the level of competency at which I have learned the topic. I also like to keep a list of handy questions for spaced repetition (to help me remember the stuff I have learned). It's a bit hard to do all this in GTD because it's mostly a system for prioritizing and checking things off. Instead, I prefer to keep simple spreadsheets to manage my learning. It's the simplest and most effective system I have come across. Prioritize:
It's very important to prioritize when you have a ton of things to learn. I use a very simple system:
- P1 (stuff I need to learn for work right away)
- P2 (stuff that's important to be a better developer)
- P3 (stuff that would be cool to know) There's no way to manage a list of 500+ items without prioritizing. Prune:
This is about as important as prioritizing. When it comes to learning technology, a programmer is a bit like a kid in a candy shop. A developer wants to learn every thing. So what if it takes 48 hours a day to learn it all. I'm sure we can hack into our brains to create those 24 extra virtual hours :-) If you spend a little time every week looking at the items in your list you will probably push a lot of P2 items to P3 and a lot of P3 items will reveal themselves as impulse purchases. You should prune (permanently delete) these impulse items. Trust me on this one. Just delete them without allowing them to linger anywhere. You are never going to get to them so just let them go and heave a sigh of relief as you see your item count go down from 1000 to 999. Flag:
Once you have learned something, don't delete it from the list. Rather flag it with a color code. Since I maintain a spreadsheet I set the background color to green every time I complete an item. I find it encouraging to look at the amount of things I have learned. It gives me the energy to keep going. But this is not the only reason. Several studies have showed that we often forget what we have learned if we have not used it for a long while. Keeping a list of learned items is a good way to go back to what we have learned and refresh our memory. Timebox:
The final thing to do is timebox your learning. Just like regular people often spend hours web surfing, developers can spend days tutorial surfing. Timeboxing is a great way to ensure that you are not spending more time learning and less time doing actual work.
You already have a taste for how much there is to learn. I have personally found it very helpful to keep a separate list for each topic such as Javascript, HTML, CSS, databases, etc. Then start digging into these topics to figure out what you need to know in them and create sub lists.
It's very important to prioritize when you have a ton of things to learn. I use a very simple system:
- P1 (stuff I need to learn for work right away)
- P2 (stuff that's important to be a better developer)
- P3 (stuff that would be cool to know)
This is about as important as prioritizing. When it comes to learning technology, a programmer is a bit like a kid in a candy shop. A developer wants to learn every thing. So what if it takes 48 hours a day to learn it all. I'm sure we can hack into our brains to create those 24 extra virtual hours :-)
Once you have learned something, don't delete it from the list. Rather flag it with a color code. Since I maintain a spreadsheet I set the background color to green every time I complete an item. I find it encouraging to look at the amount of things I have learned. It gives me the energy to keep going. But this is not the only reason. Several studies have showed that we often forget what we have learned if we have not used it for a long while. Keeping a list of learned items is a good way to go back to what we have learned and refresh our memory.
The final thing to do is timebox your learning. Just like regular people often spend hours web surfing, developers can spend days tutorial surfing. Timeboxing is a great way to ensure that you are not spending more time learning and less time doing actual work.