Kotan Code 枯淡コード

In search of simple, elegant code

Menu Close

Running the Rat Race (aka Learning Overload)

Lately I’ve been feeling as though there are too many demands on my free time. Maybe it’s because I’m older, maybe because I’m wiser, and maybe – just maybe – it’s because there are too many frakkin’ SDKs out there begging to be adopted.

At any given moment, when things have settled enough for me to decide what to work on next, I have any of the following (and much more!) vying for my attention:

  • iPhone Development
  • Windows Phone 7 Development
  • ASP.NET 4.0
  • ASP.NET MVC 3 (Preview 1)
  • WF (Workflow)
  • WCF, WCF Data Services (OData)
  • Entity Framework
  • ADFS, Federation, and Windows Identity Foundation
  • Windows Server AppFabric
  • Silverlight 3, 4
  • Rails/Ruby
  • jQuery
  • Windows Azure (which has several massive pieces on their own.. Azure AppFabric is a learning topic entirely on its own)

Add to that a handful of other things that come and go temporarily but still require my attention, focus, learning, and experimentation. Now throw in all the other stuff that I want to spend time doing. I know this sounds crazy, but there are non-programming things that I’d like to spend some time doing – I have a daughter, friends, and a basement full of books that need reading. I also write fiction and attend online Japanese classes.

I can’t remember any time in my career when I’ve felt my ability to keep ahead of the technology curve threatened like I do now, and it’s got nothing to do with lack of intelligence, concentration, or even free time.

Anyone familiar with how technology evolves shouldn’t be surprised by this: the more innovations that already exist as “shoulders” upon which new innovations can stand, the faster new innovations will appear. It’s an acceleration curve. By that I mean that the amount of new ‘stuff’ that is released in 2010 will be more than what was released in 2009 and significantly less than what will come out in 2011.

This problem is very real and can have very real consequences on your emotional and even physical health. If you get yourself stuck in a downward spiral trying to catch a train you’ll never reach – you could very easily and rapidly approach burnout.

What happens is that the personality type that makes for an awesome developer also makes for compulsive learners. They see new SDKs, new tools, new platforms and they must learn them – learning and mastering each new platform becomes the white whale of each of these developers.

Unfortunately we cannot have our cake and eat it too. There isn’t enough time in the world to master all of the new platforms. Back in the good old days there were few enough major platforms and SDKs that I could (and did) literally become an expert in all of them. Now, because of the speed with which new stuff is arriving and the time investment it takes to become really, really good at any one thing – by the time you get good at one, two more will have appeared.

Learning new technologies nowadays is like cutting one head off a hydra – two more heads appear in its place.

What I have started doing to keep from burning myself out is now when something new comes along I will explore it. Maybe I’ll read through a book (but I won’t get out the laptop and run all the samples). I might sift through a couple websites. If it’s really interesting I’ll find the influential people at the core of that new tech and follow them on Twitter. What I will not do is spend every night coming up with hypothetical application scenarios that allow me to master the new technology to the point where I could be considered an industry expert. This was my old, unhealthy, behavior.

Once I’ve absorbed the general idea of this new platform and I have a feel for what the code looks like and what the artifacts look like, I will take a back seat. I will sit back and my exposure to this platform becomes passive, until I need it. Armed with enough knowledge about this new platform to decide if it is a good fit for whatever my business need is at the time, I can make informed architectural decisions. If those decisions result in me needing to use this platform, then, I will go nuts with the learning and experimentation to ferret out all the quirks, kinks, nooks, and crannies. Until then, I have to leave it on the back burner or I will literally burn myself out. A burned out programmer is no good to himself or his or her employer.

So, in closing, in the words of the most interesting man in the world:

Stay thirsty, my friends

But, don’t drink it ’till you need it. Trust me.