I’ve been dealing with this dilemma for the past couple years. While I’ve had a Microsoft MVP award for Visual C# these past couple years, I’ve wondered if I’ve gone too generalized to have it renewed this year. We’ll find out in July if that’s actually true. Even if that’s true, I’m still going to be on that mission – to find the happy middle between overspecializing and generalizing.

Add to it that I saw this tweet, and it really has me thinking:

The key to being a programmer today and in the future. Don’t over specialize, don’t stop learning, stay close to your customer.less than a minute ago via TweetDeck Favorite Retweet Reply

For me, I don’t want to go down the road of overspecializing. I’d feel like that guy who painted himself into the corner of the room, trapped. However, I don’t want to be too general, because while it’s helpful being a jack of all trades, it’s also hard to see where it’s best to place me, which projects are best to utilize my skillset. I’d like to be the master of some, not the master of none. In a way, I want to be kinda like my Microsoft MVP expertise of Visual C# – I want to be useful on many types of projects.

Visual C# is my current expertise area, but I also am dabbling with PowerShell. The beauty of it all, though, is that I am using Visual C# while playing with PowerShell – how do you think my custom cmdlets are written? If you’re in the Cleveland area on April 26th, I can show you some custom cmdlets at the Cleveland C#/VB.NET SIG. You can also see some of my custom cmdlets in appendix D in Automating Microsoft® Windows Server 2008 R2 Administration with Windows® PowerShell 2.0.

That’s not the only time I use Visual C# though. In my day job, I work on ASP.NET websites, web applications, out-of-browser Silverlight apps – all with Visual C# as their base. I’m working with ASP.NET MVC and ASP.NET WebForms, which I use with Visual C#. Here at home, I play with Windows Phone development, and that too… written in Visual C#. I also write web services – be it ASP.NET Web Services or WCF – in Visual C#. Writing Windows Forms and WPF applications… those are also done in Visual C#. It’s such a handy language, with a variety of applications.

Now granted there’s a lot of theory behind Visual C# and how it’s built. There are people who specialize in that, in how the compiler works, in how the language works under the covers. And then there are people like me – on the quest of finding the happy middle. While I would love to understand how its work under the covers, I really like seeing how it is applied in the field as well. Understanding how it works under the covers can give me a better background of why its strengths and weaknesses are the way they are, and it would help me play off of the strengths and weaknesses better in code. However, understanding how it is applied helps me to put Visual C# to work in my everyday business world and in my side projects.

I like tinkering with the many uses of the language to see how it can be used, and the same can be said with any other language I’ve worked with – the various VB derivatives (VB, VBA, VB.NET), python, and JavaScript being the more recent languages. I like the continuous exploration to see what I can find. I don’t want to stop learning, and I definitely don’t want to overspecialize. I hope I’ve found a happy middle, as it feels like I’m finally there.

Are you afraid of overspecializing? If you’re a developer who focuses mostly on web development, then take a step out of the norm and look into client app dev with WPF, make a game in XNA, or write a Windows Phone app! If you’re an IT pro who’s been siloed to focus on Exchange, you can start working with PowerShell for Exchange and then investigate other technologies that use PowerShell – such as SharePoint or Active Directory! Do something that you wouldn’t normally do, and make it a goal to learn at least one new technology a year, whether it applies to your job today or to possibly your career in the future!