About a year ago this struck me kind of hard. I felt like I was stagnating in my job, hitting a plateau from doing about the same thing every day. To counter this, I decided to make a learning plan and set out to improve myself on my own terms. I figured that approaching it from multiple mediums would allow me to get a preference for what medium I enjoy most as well as get a variety of experience.
When trying to figure out how to learn as a developer, I broke it down into different categories. My original approaches were as follows:
For clarity, I meant direct hard skills as direct being something that helps me in the workplace immediately. Adjacent would be a technical skill or language that I wouldn’t be. As an example, in a C# workplace, learning more C# would be direct, learning F# would be adjacent. Also, I’m not a fan of a hard structured in person classroom.
Coming up with concrete resources looks like this:
- Online video classes
- Technical sites, such as: Pluralsight, Coursera,
- Soft skills sites, such as: Lynda.com, Khan Academy
- Technical books, such as: Clean Code, Working Effectively with Legacy Code
- Soft skills books, such as: Measure What Matters, Good to Great
- Open source contributions
- Basic proof of concepts
- Microsoft Build
- Codestock (local developer conference)
While setting some initial goals, it’s a good idea to set reasonably easy goals. Actually hitting some goals can provide encouragement to keep going and potentially push yourself to do more and set higher goals. For my multiple mediums right now, I have some pretty easy goals. An hour of video classes a week, 200 pages of book reading a month, a blog post a month, and an hour of listening to podcasts a week. Failing to hit those goals happens, but I focus on the successes. If I don’t hit a goal with a certain medium, no problem, because I’m still likely improving myself through other mediums and hitting other goals I have.
Saying you’re going to improve yourself is one thing, but actually doing so is a different story. In my opinion, the key to actual execution is to keep track of progress. By tracking your progress, you can hold yourself accountable and, at the end, see that you’ve gotten somewhere (as to if learning something actually has an impact is a different discussion). Progress tracking is pretty much built in to most video class websites, podcast applications, as well as open source contributions and blogging. For me, it was extremely helpful to track my book reading using the GoodReads application, which allows you to keep track of what books you have read, what you want to read, and what you’re currently reading.
Getting started can be hard, but lowering the barrier to entry helps. Podcasts, open source software and some video class sites are free to use, but books and conferences are a bit harder. For books, you can typically get a library card for free, and check out books to your hearts content. Conferences and paid video class sites can sometimes be covered by an employer if you’re lucky, otherwise you’ll have to cover it yourself.
Making time to actually do some learning is not easy. It seems that everyone is somehow busier than ever. If you’re eating alone, reading or watching videos while eating is a decent strategy. Podcast are great for learning when you don’t have time. I recently changed jobs that tripled my commute, and now I listen to podcasts to and from work. I also like to listen to podcasts while I’m cleaning the house. Other than that, the only advice I can give you is that you have to make time for it.
After working on learning more outside of work for about a year now, I can honestly say that I feel more capable, competent, and confident. I can understand things that I wouldn’t have even thought of before, and I think it has made me a better programmer. As such, I would argue that working harder to be smarter enables you to do more of the “work smarter, not harder” thing. Knowing how to learn as a developer led me to being a better developer overall.