The Generalist Programmer

Do You Want to Be a Generalist Programmer?

This is an old, archived version of this article. You can also read the newest version.

The generalist path is about the long game. It is not about gaining your next programming job. You are now in your first, second, third, maybe even fifth year as a professional programmer. The generalist path is about your tenth, twentieth, or even fiftieth year. Who knows what tech will be hip? I don't, and you don't, but you can prepare yourself.

The Generalist's Path

You lay your groundwork at school, boot camp, or independent study. During that time you are aspiring to become a programmer but are not there yet.

I would say that you become a programmer the first time you write valuable code – when someone is willing to pay for the results of your programming skills or your programs are otherwise valuable to someone. For me, that point was a set of shell scripts that powered an email discussion list in the mid-1990s.

You progress as a programmer by doing valuable programming work – writing new valuable code, or maintaining old valuable code. At first, you learn the trade of programming at the same time as you learn your current tools. This takes maybe a full-time equivalent of a year or two – for me, since I was not working full time as a programmer, it took me maybe five.

You cannot be a proficient programmer without being intimate with at least one set of tools. At this point in your professional life, you have to specialize (or choose a non-technical track). The smartest thing at this point is, I think, to embrace the goal to become T-shaped: you dig deep in one area of expertise, but you do enough of other things to go beyond Dunning-Kruger in all the other programming specialties.

At some point, you will be professionally capable. You know the tools and all the usual tricks of the trade. Now you have a choice: do you pursue the path of a specialist or a generalist?

A specialist is like the oil drill: they go very very deep in a very very narrow area to be able to find the oil. In their narrow specialty, a specialist is unbeatable. It can be a very lucrative approach, selling your special skills at a high premium as a consultant. Eventually, technology moves on and the narrow specialty becomes less valuable (or outright obsolete).

As a particular specialty becomes more and more obsolete, the demand for your specialist skills diminishes. The same happens to other people in your specialty, and the specialty premium you all could charge diminishes. Specialist employees get laid off and find it difficult to find another job at the accustomed salary level. Specialist consultants and freelancers find they have to give more and more discounts to find gigs.

The generalist start from the same t-shaped professional, one who has dug down on one specialty and studied enough of all others to be dangerous. Where the specialist continues to dig deep along one line, the generalist starts digging more lines down. None of them are deep, but there are many. Over the years and decades, the generalist accumulates so many downward lines of varying lengths that they no longer are T-shaped; they are more what Dave Rooney calls icicle-shaped and Scott Ambler calls a generalizing specialist or a specializing generalist.

Rooney's simile of an icicle shaped person is quite fitting. Each downward line – a single icicle – is developed over time, maybe in one or two jobs of full-time employment, or in many consulting or freelancing gigs. Once the generalist moves on to something else, that particular icicle stops growing and eventually melts away, unattended. Yet, some of the old expertise remains for a long time.

So, Generalist is Just a Full Stack Developer, Right?

A generalist is not just a full stack developer, although these labels are related. A full stack developer is a job title, while generalist is a career philosophy. A full stack developer needs to be good at all things at the same time, while a generalist can job-hop from one specialty to another.