I'm a graduate student and my topics of interest are programming language design, code analysis, compilation, etc. So far, this field has been very interesting and rewarding for me, so I was thinking about finding a job in that field and continuing to specialize in it. I feel like it's a relatively solid field which won't "get out of style" anytime soon. I've always thought that in such complex fields it's better to be a real expert than just another guy who superficially understand what the experts are talking about.

On the other hand, I feel that by specializing this way I really limit my future option. I have always been a strong believer in multidisciplinary approaches to problems. Maybe I should go search for a general programming job in which I could gain experience in other fields, as well as occasionally apply my favorite field for solving problems. Specializing in only one or two fields can prevent me from thinking outside the box and cause stagnation.

I would really like to hear more opinions about this choice. The truth is I'm already leaning towards one of the choices, so basic psychology says nothing will change my mind, but I would still love to hear some feedback.

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
If this question can be reworded to fit the rules in the help center, please edit the question.

Good going. I vouch for you. I also would like see other comments
–
PradeepGBNov 22 '10 at 17:18

Specialize in programming AND something else that will not go away, such as law, taxes, language, biology or math perhaps. While IT skills become worthless too quickly, some other skills stick around. It is hard to find (as an example) an Italian+Chinese-speaking programmer who specializes in taxes. Just make your bets wisely. Think about it: in the next 20 years as a programmer you will (hopefully) need to learn a lot more stuff than it takes to complete a PhD thesis. From this perspective, another 2 years of schooling in something "more static" does not seem like a terrible idea.
–
JobNov 22 '10 at 22:06

12 Answers
12

As you are aware, if you specialise you are automatically incurring an opportunity cost in that you won't be immediably eligible for other technologies (e.g. Java programmers don't often immediately get accepted for compiler optimisation jobs). However, you have to balance this with your love of the complexity inherent in your chosen discipline.

You say you want to be an expert - well go ahead and take the time to learn your chosen discipline. We as a community always need new experts. However, my advice is to follow the pragmatic programmer recommendation of "Learn a new language every year". That way, while you're engaging in deep lexical analysis of algorithmic encoding, you can also be churning out a little iPhone app that interests you on the side. You never know, the cross pollenation of different paradigms may cause you some insight that will extend your specialisation into new areas.

Regarding your first sentence - there's also the fear that one day I'll get tired of that thing I love and then, as a specialist, it will be difficult to change field. On the other hand my interest in that field has been going strong for a good number of years.
–
OakNov 22 '10 at 17:29

1

@Oak you can never predict when you'll tire of something so choose a field that you're pretty sure you're happy with and max it out. If you feel burnout coming on, divert your attention to other work. If your chosen field is advanced enough (and it certainly sounds like it is), you should have enough skills to be able to pick up anything. OK, you'll be a noob, but dedicate yourself and you'll soon be flying.
–
Gary RoweNov 22 '10 at 17:34

Since Oak is interested in languages and language design, I bet he already knows a ton of languages, and learning new languages basically falls into his specialization (more or less). For somebody already interested in languages, I suggest doing something new and nontrivial in a language you know: try your hand at AI or machine learning or NLP or writing an OS...
–
Tikhon JelvisMar 7 '12 at 6:32

On a technical level: Being a jack of all trades means you can apply for a wider variety of roles than someone who is extremely specialized. If you want to be adaptable and move around and not be tied to a particular niche, this probably isn't too bad. However, the downside is that you'll probably be confined to a relatively junior/intermediate level of roles, unless you drill deeper into a particular area.

Specializing in a given area is pretty much the opposite of the above. You'll likely be able to command a higher status and income (if you're in a good niche with high demand of course), but you're likely to become pigeonholed into that specialty to a large degree.

So in a broad sense, these two are the choices on a technical level.

On a political level: If you're talking "career progress" in terms of moving up to management and such, then it generally doesn't matter what you do technically. Virtually everyone I know who moved up to management from a programmer role did so by getting to know the people and business processes in their organisation very well. Some were specialists and some were generalists (in terms of the technology they worked with) - but ALL were very deeply ingrained in the organisation, knew the people and processes well, and it basically just became logical for them to start owning those responsibilities.

So in a basic sense, if you want to progress your career in terms of moving up the management hierarchy, it's all about playing the politics. Being a generalist vs specialist doesn't matter as much (only perhaps becoming somewhat of a specialist at the processes and technology that you'll be managing).

Also, Jack-of-all-trades can have a unique perspective when facing a problem because they can envision additional solutions that someone who knows only one technology can't even imagine.
–
wildpeaksJun 3 '11 at 7:41

First off, job postings often exaggerate the amount of specialization required. No company puts "we need a guy who knows a little about Javascript because we know nothing" in a job posting; they put "Javascript expert" on there because, all else being equal, they'd love to get someone who was actually an expert. That doesn't necessarily mean that only experts are qualified for whatever that company needs done in Javascript (and you'd be surprised how often they don't even know what they need done). So don't worry too much about being an "expert"; apply for jobs where you are conversant in the skills advertised and see how things go in the interview. Being good at a job is about a lot more than just how many years of [insert language] you have under your belt. And if the job is rewarding, you may find yourself becoming an expert.

That's about "getting" a job; for "keeping" a job, being a JOAT can be marvelous. If you company starts exploring different languages and platforms, you'll be ahead of the game. If your MS-based company suddenly needs a UNIX guy for something, you'll be their go-to (to either be that guy or handle the hiring for an "expert"). Keeping a job is about being indispensable no matter what happens, and JOAT is a good way to be that guy.

Plus, it makes getting a new job when your company goes under much easier :)

"If your MS-based company suddenly needs a UNIX guy for something"...oh we can dream, can't we :)
–
JordanJun 3 '11 at 6:08

@Jordan - no need to dream; I've been there. I worked for years at an MS shop, but we eventually ended up with customers who needed support on MySQL and Linux. Those of us who knew Linux from other jobs and home use had to step in until we could hire a Linux admin. It does happen :)
–
E.Z. HartJun 6 '11 at 4:43

Well, yes and no. The problem is, you'll never be a rock star. You'll never be that guy who can do stuff with C that no one else can do. Your lack of focus precludes that sort of excellence.

On the other hand, when management decides that they can't afford a ton of programmers, they won't fire you, to keep him. Flexibility has its benefits.

I'm a Jack, and my department has seen an 80% reduction in the last 4 years. Yet here I am. Partly that's because I'm more unfocused than most. I like getting handed a task I know nothing about, and my bosses like the fact that I say "Sure!" no matter what weird ass shit they come up with. And, when you understand the big picture, that's a kind of rockstardom that most specialists never attain, and it can be lucrative.

So, if you're looking to be a rock star, you need to focus, because no one can be better than everyone at everything. But if you're looking for stability, choose flexibility, because being flexible is more marketable than being bad ass.

Generalist vs. Specialist is an article from CIO.com but there are probably dozens of similar articles or blog posts of people trying to see if one is better than the other. Each has its advantages and disadvantages. Anyone that wants to say one totally trumps the other may well be biased to some degree.

Don't forget that there is a possible illusion on each side of your choice. What you see as a specialization may have various flavors to it. For example, would you consider web developers overall to be specialists or generalists? Some could see that as a specialization and others may still see it as being rather broad as many web-based applications these days can have all kinds of components that can require different expertise to some degree.

While the areas you list would make me think you want to work for a software company, there may be some parts of Information Technology that could use similar skills in a way. You could get into how much customization is done on various off-the-shelf software to make it work and how well is this an investment for most companies to give an off-the-cuff example.

It depends on what your career is. I think it should help your career if you want to be a general consultant, start your own business, work for a small business or in any other situation where that type of flexibility is a recognized asset. I am in the same situation, and currently work as a consultant, although I am pursuing specialization in .NET/C#/SQL/ASP.

In the same vein, is it possible to
make a career out of being versatile
with technology, having a wide range
of (albeit shallow) experience, but
without specializing in a particular
technology?

Yes, I think you could look for small businesses that can't hire someone for each area of specialization, or be a consultant.

(It's also not a bad idea to pick an area that you will specialize in, in addition to maintaining your more general skills.)

When I hire developers I am biased towards people with strength and experience in the particular skills I am looking for. The recruiters are going to greatly amplify that bias. That means even if I might hire you (and I do like people with broad skills and good foundational knowledge that can learn) I'm not likely to ever talk to you.

Myself though I have always been a jack-of-all-trades and have had a lot of different job titles at the same company where I have worked most of my career. Still I do sort of dread the prospect of having to look for a job and I don't think I could easily land another job at my present salary (which is plenty satisfactory, but people here know me).

It Depends

It depends on what you mean by "career". More to the point, it depends on what you think you mean by "career".

These days I do a lot of work with web applications. When I started this career, the world wide web did not exist. So to a very large extent, @Satanicpuppy's answer is right on the mark.

There are four advantages that come with the jack-of-all-trades (JOT) territory:

The willingness and ability to learn whatever is necessary to get the job done

The wisdom to know what you don't know

The humility to say so and ask for help when needed.

A big 'ol bag of tricks across multiple domain boundaries

The main drawback is: it takes much, much longer to excel, because you are pushing the learning curve on multiple fronts.

Am I as good a DBA as some friends that have done nothing but that for 15 years? Of course not. Can I see solutions in an instant that they'll never imagine in a fortnight? Yes.

The best advice, I think, is to continue to be a JOT until you find something that is so fascinating, so compelling that you want to do it and only it until the end of time. That "it" will be your specialty.

I like solving new, hard problems, searching for innovations to slay the mundane, and continuously learning - that is my "it", and it is the reason that I love I.T.

+1: Being a generalist is my career too. :-) Knowing stuff other than your problem domain or main technology is useful because it'll enable you to have a tool box of possible solutions. It may not make you a super specialist but you will get to tinker with new toys-, I mean, technology.
–
SpoikeJun 3 '11 at 7:46

But you are going to have to go out and get it, it is not going to show up in a newspaper or online job posting (the likelihood is small). So, instead of looking at specialized jobs, perhaps you should be looking for jobs that play to your variety of strengths. "Marginally well" is subjective, maybe you're being too harsh on yourself, modest too, but that is a good thing (-:

Also, while your experiences and expertise are important, employers are more interested in your ability to deliver results. Ask yourself: What can I do with my variety of knowledge and experiences that improves this company's bottom line? W/O seeing your resumé, some titles I can think off the top of my head are Solutions Engineer, Architect (Network, Application, etc), or even a CTO.

Lastly, my advice is to make a career of what you enjoy. You'll have to do it for 8+ hours a day for many years, and you might as well like what you're doing at that rate (-;

I think one of the reasons companies look for and value specialized people more goes back to leaky abstractions. The problem is that over the last 30 years or so, software engineers have increased the number of abstraction layers exponentially and as much as we'd like to make sure there's no side effects, they always crop up. And it's the undocumented idiosyncrasies that tend to get you.

You maybe able to start using new technology fast by reading specs and online examples, but did you ever notice when you start something new you spend 20% of your time writing code for a feature and 80% of your time hunting down the most weirdest bug you've ever seen? As you become an expert in one area, this ration changes from 20/80 to 95/5 (I'm making up numbers, but in general they are probably close) specifically in that area. Which means, you can deliver work much faster and avoid pitfalls/common bugs before they even happen. For example, earlier today, one of our senior engineers (new to the team/product) spent more than half a day looking for an issue with stack corruption that took me 5 minutes to identify because this happened to be my home turf.

As you become an expert in your field, you'll become more visible and valuable to management. I don't know about other companies, but at those where I worked, your compensation (at least partly) depends on how important your responsibilities are. JOAT generally doesn't have permanent responsibilities. Instead, managers use them as movable/interchangeable resources (our VP call's them swiss army knifes) that can be moved from one team to the other based on demand. So you can stay with the company for 10 years, then look back and realize, you've never gained a single responsibility. I have a very good friend (who is also an excellent C++/C# developer, but happens to also be a very good JOAT because he'll take any work) who was typecast into such a role. I know he is not happy because while I have a very sizable and fun chunk of the product as my playground, he's mostly a temporary guest in someone else's land. But now he can't get out of it.

Having said that, having the skills of JOAT is equally important, so while I wouldn't necessarily try to position myself as a JOAT, I think it is important to keep reading/studying/learning new things because technology does shift and even if you are an expert today, you may have to become an expert in something completely different tomorrow.

It's true that most job posting are playing against them by being too specific or too demanding. They are written like ads (probably to show other how powerful they are), but it prevents some great profiles to apply because of the reasons you state in your question.

Here is the job posting I use:

Job and Person Description

At least 4
years of experience with .NET
Framework. Knowledge of specific
technologies is not required. The
candidates must be quick learners and
be able to demonstrate an enthusiasm
to learn new things. We want people
who:

are interested in digital media

see difficulties as opportunities

get things done and are not CV driven are

interested in the business side of

their work have the startup spirit
Language: French OR English

Skills (not required but each will be an asset):

.NET Framework 4.0

nHibernate or Entity Framework

DevExpress Components

LINQ

WCF

HTML/CSS/Javascript

ExtJs

As you see except the overall experience with .NET, no other knowledge is really required. However, what is required is the ability to lean new stuff.

Since you can't control how companies write their job description, you should see them as learning opportunities.

When I see a job posting that is very demanding, I see that as an opportunity to learn new stuff. During the interview (if I get it), I explain that since my motivation is learning and getting things done, I wouldn't be too much affected by the lack of experience in one of more listed technology.