Simon Harriyott

Jack of all trades, master of none

I've found myself becoming increasingly envious of developers who become experts at something or other; the .NET CLR, MSBuild, CSS, ADO.NET, XML, web services, open APIs, Vista, or anything really. The people who have deep knowledge of a subject get to speak at conferences, write books, have really popular blogs, and even influence the future development of their field. They get asked the burning questions, and they are "known". If I needed an expert in CSS, I'd go straight for Andy Budd. MSBuild, Barry Dorrans. Internationalisation, Guy Smith-Ferrier. MS Paint, Leon Bambrick. And so on. And I'd expect to pay them handsomely.

As for me, well, I know a little about lots of things. I've not spoken at a conference, written a book, and I don't have a really popular blog*, and the only thing I've influenced was a typo in "Naked Conversations" (which I am ridiculously proud of). I spent years working for a consultancy, and every project used at least one technology that was new to me. I even had to do ColdFusion! I would just get the hang of something, and then I'd be on a different project. A couple of months after finishing a product, I'd find out about a feature of the tool I was using that would have saved me loads of time, made the code simpler, and been more satisfying to write. If only I'd known.

And now, I've been working for a product company, and I'm working on one single product in the company, with a small team. The product is written in .NET 2.0, so you think I'd be quite the expert by now, eh? Not so.

The first few months were spent researching all the new features of ASP.NET 2.0, such as themes, master pages, menu controls etc., and writing a GUI framework for the web application. That done, I spent some time importing XML files into the SQL database using XPath and T-SQL stored procedures. I set up a build machine using MSBuild. I improved our database maintenance tool (VB6) to run with MSBuild. I used C# for the general coding bits (I'd done around 3 months C# at the previous company). I set up a development team wiki. I've recently been using WinForms, threading, and creating installers. I've stood up and demonstrated the pre-alpha versions to our most important customers. In the next 6 months, there'll be Team System, Crystal Reports and the-proper-way-to-version-assemblies-and-manage-a-product-release.

I don't feel like an expert in any of these things. I've learnt just about enough to code the next feature. I'd like to spend a bit more time looking into threading in detail, but I've got to get the code to the testers. Then I'll have to start the next thing. I would read up on it in my spare time, but I'm already reading a books about CSS, ADO.NET (asynchronous connections are cool) and how the game of monopoly is a good metaphor for being an entrepreneur.

I knew this would start sounding like a fat whinge, and I've described it this way as there are many other developers in my position, and they may well grumble in a similar fashion. I want to relate to you, my fellow jugglers. However, I'm actually quite grateful for my "up-bringing". It has taught me self-sufficiency, adaptability, and thinking outside of the boxing / unboxing. It has made me brave and adventurous, versatile and nimble, selective and well-read, sleek and hunky. OK, sorry, maybe not sleek and hunky.

I'm not scared of any technology that crops up. I love learning about new things. My blogroll is full of people writing about stuff that doesn't impact me at the moment, but I understand the basics, and can talk about it, and I know that when a new problem arises I'll have more options to choose from. At the moment, I can't see a need for OPML, microformats, Ruby on Rails or Monad (sorry, what's it called now?), but when I do, I'll be ready. In the past, I've read about MSBuild, wikis, NUnit and CodeSmith on blogs, tried them out, and now use them routinely.

This well-roundedness makes me useful as an employee. My boss doesn't need an expert in the CLR, or the finer points of unicode. He needs someone who'll know what to do next, or know how to find out. So if you're like me, flitting from one technology to another, skipping through features and googling the error messages, remember that you are not inadequate, you're a developer.

* I have just proud of 50 subscribers, which seems amazingly high to me. I'm sure my blog is victim of "mark all as read" by quite a few of these subscribers.

[Tags: ]

30 May 2006