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 }
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.
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?
Becoming a specialist does not mean to be ignorant about other things..trying and keep an eye on the current trends keeps developer fresh
Good insight, good story. Thanks for sharing.
@madhu, agreed. In the words of Jeff Atwood, you should get out of your ghetto:
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
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.
Marcin, thanks for the link. Besides “Generalizing Specialists”, there are some great pieces by Scott Ambler on that site as well.
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.
Nice post. Thanks
MOST people who search on which they want to become like being a GENERALIST or SPECIALIST end up being HYBRID………..
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 }