Specialist vs Generalist

I just picked up a very interesting article on the never ending specialisation vs generisisation debate over on Ted Newards blog. It’s an interesting argument. Can you be a good developer unless you specialise in one technology and know it inside out and stick to that language?

I think the answer is emphatically yes, you can. In fact, you can’t be a good developer unless you understand the stack and related languages.

You can not be a good ASP.NET developer without understanding how to administer your server, how HTTP works, how HTML works, how Javascript and CSS work.

You don’t have to be a guru in the world of semantic, CSS driven HTML markup. But you do have to understand HTML and be competent at hand rolling it. You have to recognise bad HTML and good HTML. Most importantly, you have to understand your limits in those areas and how and where to get help to get that perfectly semantic, CSS driven layout working. You should be pushing your knowledge in those areas.

Looking at the learning progression of unconcious incompetence through to unconcious competence, you need to be somewhere on the path from concious incompetence to concious competence. You don’t need to be someone who can always get it right in the other languages, but you have to know where you will get it wrong. Understand your limits.

Essentially, you are not an ASP.NET developer. You are a web developer, and that’s about more than a specific language and framework, it’s about the entire development eco-system. You’d want to read about and know about what’s going on in Python (including IronPython), Ruby, PHP etc. You don’t want to be missing out on the new techniques that sit in that area.

If I was talking about people who work on products like Microsoft Word in C++, then they’d also need to know about UI design, the shell, the underlying operating system. Basically, Point 5 in Ted’s article:

Learn to be at least self-sufficient in related, complementary technologies. We see laundry list ads in “clusters”. Case in point: if the company is looking for somebody to work on their website, they’re going to rattle off a list of five or so things they want he/she to know–HTML, CSS, XML, JavaScript and sometimes Flash (or maybe now Silverlight), in addition to whatever server-side technology they’re using (ASP.NET, servlets, PHP, whatever). This is a pretty reasonable request, depending on the depth of each that they want you to know. Here’s the thing: the company does not want the guy who says he knows ASP.NET (and nothing but ASP.NET), when asked to make a small HTML or CSS change, to turn to them and say, “I’m sorry, that’s not in my job description. I only know ASP.NET. You’ll have to get your HTML guy to make that change.” You should at least be comfortable with the basic syntax of all of the above (again, with possible exception for Flash, which is the odd man out in that job ad that started this piece), so that you can at least make sure the site isn’t going to break when you push your changes live. In the case of the ad above, learn the things that “surround” website development: HTML, CSS, JavaScript, Flash, Java applets, HTTP (!!), TCP/IP, server operating systems, IIS or Apache or Tomcat or some other server engine (including the necessary admin skills to get them installed and up and running), XML (since it’s so often used for configuration), and so on. These are all “complementary” skills to being an ASP.NET developer (or a servlet/JSP developer). If you’re a C# or Java programmer, learn different programming languages, a la F# (.NET) or Scala (Java), IronRuby (.NET) or JRuby (Java), and so on. If you’re a Ruby developer, learn either a JVM language or a CLR language, so you can “plug in” more easily to the large corporate enterprise when that call comes.

It’s fine (and good) to want to be an adept in one language. But, technology moves, and to really apply that language, you need to understand it’s ecosystem and competitors. Or you will hit your edge far too early.

Popularity: 40% [?]

One Response to “Specialist vs Generalist”

  1. Squeezy Links | Programmer's Log Says:

    [...] Specialist vs Generalist Everyone likes being in an arbitrary box. [...]

Leave a Reply