Should You Be a Generalist Or a Specialist?

by Ville Laurikari on Friday, January 15, 2010

When I was a young student, I had a fashionable infatuation with martial arts.   One day at the dojo I was busy practicing a particular punch to the side of the neck.  The teacher watched my repeated fumbling for a while, and finally pulled me aside and gave me one of the best lessons I’ve ever received on how to become a better software developer.

Why learning only one thing is hard

“Listen, you won’t learn the punch right by practicing it in isolation.  You’re going through the motions but you don’t know what you’re doing.  You’re going to need some context.”

OK, I thought, that seems like a good idea.  I’m not getting anywhere anyway.

“Let’s make the punch a part of a story,” he said.

So he taught me a kata.  It incorporated the punch into a sequence of moves against an opponent.  Before learning the kata I did basically know how to execute the punch.  But the kata showed me why I was doing it and that made all the difference.

My teacher’s lesson applies to software development as well.  The part you’re working on is part of a bigger story.  You have to know that story.  It is much easier to do the right things if you teach yourself a little bit about the customers, the business, usability, technology, or anything which is not your specialty but is happening around you anyway.

Are you a fake specialist?

When you pick a specialty, strive for technical depth.  As Chad Fowler says in The Passionate Programmer:

Too many of us seem to believe that specializing in something simply means not knowing about other things.

This hits the nail on the head.  If  ”specialist” does not mean technical depth, then all that is left is an excuse to avoid learning anything else.

So, here is my advice. Be both.  Be a generalist so you can understand the whole story.  Be a specialist to do your part better than anyone else could.

If you liked this, click here to receive new posts in a reader.
You should also follow me on Twitter here.

Comments on this entry are closed.

{ 12 comments }

Toni Kaikkonen January 15, 2010 at 21:29

In software consulting companies there is a high demand for both generalization and specialization. In order to sell your work to different kinds of clients, you need to have in-depth knowledge on many different areas. A consultant should also be extrovert and be able to sales work. (and finding these kind of people is really really hard :)

In software product companies, good developers are quite often “forced” to specialize in one specific area of technology or product (becoming a grumpy asshole programmer…) This specialization trap, which is also a risk for company, should be tried to actively avoid, but the management commitment for this can be troublesome to get. Costs money and time.

Ville Laurikari January 15, 2010 at 21:54

Toni, thanks for your insights. In product companies basically job rotations would be a good way to avoid the specialization trap. In my experience, it is not management commitment but employee resistance that is the problem – people don’t like to leave their comfort zone. Perhaps that’s where you mean that extra management commitment would be needed?

madhu January 17, 2010 at 17:46

Becoming a specialist does not mean to be ignorant about other things..trying and keep an eye on the current trends keeps developer fresh

zentelen January 17, 2010 at 17:56

Good insight, good story. Thanks for sharing.

Ville Laurikari January 17, 2010 at 19:14

@madhu, agreed. In the words of Jeff Atwood, you should get out of your ghetto:

It pains me to see developers who let themselves get locked into some particular toolchain ghetto, without at least peripheral awareness of what else is going on in the programming world around them.

Marcin January 18, 2010 at 06:19

I find that most good developers I have worked with were “generalizing specialists”; the term is taken from an older and still relevant article
http://www.agilemodeling.com/essays/generalizingSpecialists.htm

Nitin Reddy Katkam January 18, 2010 at 07:58

I’ve been all for being a generalist, but most of the time I just can’t seem to catch up with it all. Nevertheless, I still tell people I’m a generalist with more experience working with a specific technology.

When finding a job, however, I can’t seem to apply for DBA or server administrator jobs due to a lack of recent experience but my resume does attract software development positions which I do quite well owing to my know-how in the DBA and server admins areas.

Ville Laurikari January 18, 2010 at 10:26

Marcin, thanks for the link. Besides “Generalizing Specialists”, there are some great pieces by Scott Ambler on that site as well.

opyate January 18, 2010 at 12:33

It depends.

At our company we have a load of Java devs who are JAva certified, Spring certified, etc and who really know the language and the top few frameworks around it. They drive our core product, which is a web app.

Myself, however – I am in the innovations (R&D) team, and I know a bit of everything – Java, Scala, Perl, Ruby, Bash, Tcl, Objective C, C/C++ etc etc. I am in charge of prototyping and my generalised skill comes in handy.

SMiGL January 18, 2010 at 14:28

Nice post. Thanks

cariaga May 21, 2012 at 06:36

MOST people who search on which they want to become like being a GENERALIST or SPECIALIST end up being HYBRID………..

Chaudie May 26, 2014 at 19:15

I was hung up decided on which programming languages would be beneficial for developing the best personal blog for myself. You have answered that question for me. Thank you

{ 6 trackbacks }

Previous post:

Next post: