I was recently asked the following question on twitter:
how do you ever learn new technologies & languages? It’s not like you have copious spare time.
Instead of trying to answer in a bunch of tweets, I decided a post would be the best way to answer.
The fact is, it can be a struggle to learn new things. Many times I’ll learn new technology on the fly, as-needed by a given project. I actually don’t mind learning this way. It brings a certain amount of focus that more casual learning doesn’t. On a recent project, I found myself having to do a lot of bit manipulation. Since I don’t have a Computer Science background, this was new to me. I learned by diving in, writing a TON of tests and figuring it out. It was really satisfying to see my tests pass, and even more satisfying when the firmware team I was working with gave my code the “thumbs up”.
Over the years, as my network of friends and colleagues has grown, I’ve started going directly to the experts in a given technology and getting some great one-on-one instruction. For example, a little over a year ago, I need to get up to speed on all the Microsoft Azure offerings. I wanted more than the normal marketing fluff from Microsoft, so I asked my friend (and Azure MVP), Mike Wood. We connected via skype where he gave me a solid couple hours of instruction. I did the same thing with Jim Holmes when I needed to learn about the telerik test studio, specifically in the context of testing WPF applications.
While a little off-topic, I also like to pair with friends when I’m stuck on a problem. The majority of the time, all it takes is getting them on skype and explaining the problem to them before I have that “AHA!” moment.
Conferences, for the most part, are more about the social aspect than sitting in sessions. Recently though, I’ve started seeking out sessions on tools and technologies I’m interested in. I know I won’t come away an expert, but I’ll have a much better idea of what I need to know and where I can find more information. A recent example from Codemash 2014 – I’d been hearing about scriptcs and it sounded interesting so I made sure to hit my friend Kevin’s session on the subject. I now have a better understanding of what it is, how I’d use and where to look for more information.
As a long-time speaker, people ask if I like to pitch “unknown” topics to conferences so I’ll be forced to learn the subject. While many speakers do this successfully, it’s not something I like doing. When I go into a room of attendees, I want to know the material inside and out. I want to have actually used it on a project so I can talk about it in terms of “production code” versus “demo code”. I recently had a good friend (and mentor) tell me I should do this regarding some web technology. While I respect his opinion, I still can’t bring myself to do it.
I do try to carve out a couple hours a week for learning, whether it’s surfing to find material, reading one of the many tech books that I have on my bookshelf (most are on web related technologies since I know that’s a weak spot I *need* to improve on) or watching videos on Pluralsight. I’m not as consistent with this as I need to be, but that’s only because billable work (or Lite Accounting work) is always waiting.
Specifically on the subject of Lite Accounting – there are times when I’ll work on something in a branch, commit it and then have Matt review it. Sometimes he’ll just “fix” my code and send me the diff, but other times he’ll tell me what I can do better. I find this a great way to learn.
I hope this answered the question.