Cory Foy’s post regarding a .NET position at Microsoft got me thinking about the specialization trend in software development and my tortuous career.  Let’s face it, these days, you will be hard pressed not to specialize.

For example, in the .NET world, you have to become familiar with the framework itself to get anything done.  But that is just the beginning! I’ve been working with .NET off-and-on for 4 years now.  Yet, I still have no clue about ASP.NET.  What about WPF, WCF, InfoCards, WPF/E.  It is nigh impossible to keep up with all these things!  And we’re just talking about .NET here!
The embedded world’s specialization takes a different form.  The technology is pretty common, mostly C or C++, but you have much more dynamics when it comes to the platform and the operating system (or lack thereof).  Processors with 8-Bit, 16-Bit, 32-Bit bus, each with it’s own quirks and a 300 to 600 page manual.  Operating Systems like Windows CE, Linux, VxWorks, pSos, Integrity.  Different tools for each processor family: Atmel, Arm, PowerPC, Intel, PIC.  Don’t forget the assembly languages, all similar, but all different (then again, only nuts like me deal with assembly language)!

This state of affair has me wondering: What chance does a generalist like me have against the hordes (or so it seems) of specialists out there.  While I have been a programmer most of my career, I also have done sales, presentations, training, system designs and vented in frustration at a billionaire. I have used a lot of C and C++, some C# and WinForms, a smidgen of VB(6 & .NET) and assembler.  Scripting? Sure, Python, TCL, REXX, bash, csh, awk, sed and getting into PowerShell.  I have dabbled with Oracle & MS SQL 2000.  I’ve worked with processors of all ilk: Intels, PowerPCs, Arms, Atmels, PIC, Rabbits. I know emulators pretty good, I wield a mean Oscilloscope, but my soldering skills have gone to pots.
How would I stack up against someone who has been doing .NET full-time for the last 3 years?  My feeling is that as long as the position is not specifically for ASP.NET or revolving around databases, I would have a fighting chance.  It boils down to a classic depth vs. breadth debate.  Someone with many years of exclusive .NET experience would have a depth of knowledge I don’t have. This depth of knowledge is a significant asset. However, the fact that I have touched so many areas, and can juggle a sensor in assembler, a back-end in C++ and a WinForm in C# during the same day point to an ability to learn and adapt quickly.  This is also a significant advantage.

The bottom line:  it depends what the hiring party is looking for.  A specialist might be perfect for a given position, but a generalist might have a leg up for something else.  One thing to keep in mind:  If you ever want to leave engineering and become an apprentice under “The Cruel Marketing Tutelage of Pai Mei Sink“, being a generalist might be more advantageous (while that particular opening does appeal to me, I can’t deal with fish heads…)

As for me, I’m content in the knowledge that few people would be able to do what I do here.  The fact that no one wants to apply for our engineering position just proves my point!