I've always been a big fan of George Carlin. I remember watching one of his first HBO specials when I was quite young. No matter whether you agree with his point of view, you had to admit he had an impressive mind and a way to stay relevant no matter where the country went.
Recently, I was watching Louis CK talk at a Carlin Tribute when he told the story (that I'd heard before) of Carlin's philosophy of throwing out his act once a year to work on a new show. This got me to thinking how this could apply to what we do.
Learning new technologies, tools or languages expands what we are good at. In fact, I would argue that developers are paid to learn. That is what we are good at. In this way I think most developers should be learning new technologies every year.
Does this mean I think that you should chuck your entire knowledge and experience and start fresh? Of course not. But challenging yourself by taking on something new (either for work or as a side project) is going to make you more valuable and keep your ability to adapt sharp.
Now before you scoff, let's look at the reality of the situation. I know that I am not like most developers who are building solutions in the Enterprise. The tooling and technologies tend to change slowly in most environments. I don't pretend to believe that most jobs will let you introduce new technologies every year, but I do believe that by looking at solutions in a different way by learning new ways of doing things, your ability to see problems from a different perspective will help you improve even if you're daily work is using the same technologies as before.
I like money as much as the next person (ok maybe more), but I realized a long time ago that being a developer was not only a job, but a passion for most of us. In fact, when queried from young developers as to what they should learn to make a lot of money in the software business, I'd often point them to MUMPS. MUMPS is a development language created at the Mass General Hospital in the late '60s to run big hospitals. Many many hospitals still use MUMPS and the last few people who work with it still make an exceptional living at it. Sure, it's lousy work but if you're in it for the money, go find a tiny niche and exploit it.
But for many of us the real trick in software is to stay challenged. Sure, some of us decided to go into management or consulting...but even in those roles, our hearts are still in it for the rush of learning something new and bending it to our will.
In the last ten years I've invested quite a bit in a myriad of technologies. Some of these were even dead on arrival (e.g. Oslo, WinFS...hrmph). At the time that the investments I made in learning technologies that either had their day in the spotlight or were abandoned, I got the lovely anger/denial two-fer. This happens with every technology...period. The real talent is being adaptive. Change is going to happen in software. You have a choice to stick to what you know really well and stay the expert in that thing; or you can decide that learning is what your real skillset it. Bring on the change and I bet you'll not only be a better developer; you'll enjoy it more too.
Ready
to start building Windows Phone 8 Applications? This is the book for you. I teach you how to build apps using Windows Phone 8. Order today!
Have the book? You can get the downloads and errata here.
2001-2013 © Shawn Wildermuth. ALL Rights Reserved.
Adam Monday, October 22, 2012
First, let me say I agree with the sentiment of your post: continual learning is a valuable and enjoyable thing, essential in many professions/crafts, and developers need to welcome change, relish the challenge, and learn look at things in new ways. Good developers love learning; it's a core skill.However, ...
As a general/non-specialist Microsoft developer, I may need to develop with: SQL Server (including SSRS, SSAS, SSIS), .Net/C#/VB, IIS, ASP.NET WebForms/MVC/Web API, SharePoint, Windows Forms, WPF/Silverlight, WCF, EF, Azure, WP7, TFS/MSBuild, HTML/CSS, JS and a large number of libraries, mobile/adaptive web, a 3rd-party CMS (e.g. DotNetNuke), etc.
It is far from necessary to be an expert in all of these technologies, some are a lifetime's work. Many are progressing at a rapid pace, while others are moribund but have apps that need supporting. Some are introduced at the whim of management who have just come back from a conference/presentation: "SharePoint is our new strategic platform!". Sometimes, you'll need to work with beta/v1 stuff, with all the pain and loss of productivity that entails.
It's enough of a struggle simply to get a bunch of technologies, some of which you barely know, to play well enough together to create an application, usually under time pressure. The code will probably not be very good (understandable/idiomatic, testable, well-structured, performant, secure, etc.) and you'll have a relatively superficial understanding, propped up by recipes found on MSDN or elsewhere on the web. The experience gained may subsequently have to be chucked away in order to move to the new hotness, or it may be months before you use the technology again and you have to re-familiarize.
Given that's the case, i.e. a job already with many unpaid hours, where does the time come from for side projects, and to learn Windows 8 (& WP8), F#, PowerShell, git, C++ 11, Clojure, Haskell, Big Data, Android, NoSQL, etc? How about soft skills/sales & marketing/product management/social media/writing & presenting/networking? How about physical wellbeing/exercise, family/social life, faith/volunteering, liberal arts ...?
We're trying to fill a pint pot not with a quart but with a gallon, from a firehose
BTW, I'm a big fan of your writing, training materials, and community engagement. Thanks! I'm just letting off steam. :)