Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Since I started working I tried to focus on web development, but because of different needs and situations in the companies I worked I have had to work in different areas (Back-end, Database, etc...) and in different languages: I started with C#, then moved to PHP and finally Java (plus the common javascript, HTML, CSS).

On one hand I really enjoyed seeing different components and perspectives that I would have missed if I had become truly "specialized", but on the other I also sometimes miss to have gotten a bit further in a specific skill, since changing all the time didn't allow me to get as much in depth knowledge as I would like.

So I'm not sure if this path is beneficial or detrimental, anyone has any experience about this?


migration rejected from Oct 4 '15 at 21:25

This question came from our site for professional and enthusiast programmers. Votes, comments, and answers are locked due to the question being closed here, but it may be eligible for editing and reopening on the site where it originated.

closed as off-topic by Ixrec, GlenH7, durron597, Snowman, gnat Oct 4 '15 at 21:25

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – Ixrec, GlenH7, durron597, Snowman, gnat
If this question can be reworded to fit the rules in the help center, please edit the question.

up vote 7 down vote accepted

Both diversification and specialization can be good, but they can lead to different career paths. Big companies can afford a specialist for each job, but the smaller the company, the more diversified skills are needed. So the next question is: do you want to work in a big corporation, or in small company? Both have their pros and cons.

I've found working in a relatively small company enriching. One day you configure servers, other day you write some sort of artificial intelligence algorithm, yet other day you do SQL or Java or C or Python. You have way more influence over what you do and how, which tools you use, etc., while in a big corporation you would have to be in quite high position in order to have similar influence. On the other hand, with influence comes responsibility: the whole company actually depends on what you do, or don't, or screw up, so you'd better be careful. In a big corporation you're just a small, replaceable gear in the big machine.

I agree with you but in one thing, doing all those different things you cannot deepen in all of them as much as you want. Is not possible to be really good at everything – jasalguero Jul 21 '11 at 12:08
@jasalguero: Like you say, it's not possible to be really good at everything. But it is possible to be fairly good at quite a few things. I prefer it to knowing "everything of almost nothing". – Joonas Pulakka Jul 21 '11 at 12:13
Myth: Big companies only let developers specialize. FACT: Big companies provide just as many and probably many more opportunities to diversify a developers skills. Although, in either case it depends upon the specific company. You can't necessarily generalize big or small company either way in this area. However, in my case I have found far more opportunities to work on a much more varied array of projects and technologies working at a big company (since they have more customers) than a small company which has a much more limited product line. – Dunk Jul 21 '11 at 18:26
@jasalguero: It is not possible to be good at everything at any particular moment in time. However, you can become quite good at what you need to be good at when your job requires you to become good at it. Of course there are some domains that may take years to become good, but if that were needed at your company then they would probably hire someone for just that purpose. Thus, you would have no need to become good at that particular problem domain anyways. – Dunk Jul 21 '11 at 18:42
@Dunk: Thanks for the clarification. Obviously one can't generalize either way. Still, while big companies may provide even more opportunities to diversify your skills (by switching projects / positions), one's influence on the company (and in turn, what and how the company and you are doing) is probably stronger in smaller companies, simply because you're 1/10 of the company, not 1/10000. – Joonas Pulakka Jul 22 '11 at 9:20

The way our brain works is not made for the way we try to make it work.
Our brain instinctively develops very simple models of extremely abstract systems. We do not learn mathematics starting from the axioms and then physics and chemistry in order to combine all this understanding to walk. We have the will to move and the example of those who can move and somehow try to make that work.

And actually, this is a wonderful thing. It's the exact opposite how computers work. Computers are built from ground up. The idea, that to use computers we must think very much that way is not healthy. It is what drives our most entertaining yet timewasting idiosyncrasies: The need to reinvent the wheel over and over again.

Frankly: we do not have the time. At least not as much as we'd need to.

That is why many clever people out there create a lot of frameworks, libraries, abstraction layers and all sorts of services.
Raise your hand, if you have already created your own ORM (raise), collections library (raise), UI Toolkit (raise) and all sorts of things that were interesting at the time but rarely got past the point where you would dare to open source them and eventually threw most of it away (raise).

The greatest quality of software developers is to create systems, that last long. Without taking so much time, that they're deprecated before being finished. For that you need to be able to work with code others wrote. To understand it from its specifications and to decide which components work well together for which tasks. What kind of architectures to use, what kind of data stores and how to structure them. And so on. How to choose the right components, how to smoothly connect them without rickety glue code all over the place.

You will find, that if you look at popular web frameworks, there's many in Java, C# and PHP, that kind of look all the same. That share a lot of ideas and therefore advantages and deficiencies. You will find, that there's a lot of DB abstraction layers, that allow you to use data stores without knowing details other than the specs of the layers provide and allow you to perform queries in the language of your choice. You will find that frameworks such as qooxdoo allow you to create AJAX apps without knowing any HTML and CSS, that languages such as haXe or platforms such as GWT will allow you to write both client and server in the same language and send data between them transparently.

That doesn't mean, you should never go into detail. But it means you should trust you peers and harness benefit from their work, that they make available for you to harness.

It has been said that the great scientific disciplines are examples of giants standing on the shoulders of other giants. It has also been said that the software industry is an example of midgets standing on the toes of other midgets.

    — Alan Cooper

Virtually no library ever written comes without limitation. You definitely will hit a wall at some point when you use general purpose tools. That is the right time to dive into details. And it's good and healthy to play with things on your small, just-for-fun, educational projects. But when you write code, that clearly will have to be around for years, this just isn't working. Do not try to be smart. Be humble.

The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.

    — Edsger W. Dijkstra

You want to be productive without amassing technical debt. Look for frameworks and libraries that together constitute a suitable toolchain to quickly write quality code. Try substituting each tool once in a while to see the advantages and problems. Try understanding the principles within them. Why people do certain things in a specific manner. And should you find a tool that you really like, then try contributing, because that will give you a lot of insight. But as I said: work your way top-down.


Specialisation can pay off, but it's a risk -- if the thing you specialise in loses value, then so do you.

I know this to my cost. Commercially, my most saleable skill by far is Openedge: I've spent most of my career using it, and that has worked pretty well for me. But here in the UK, it appears to be becoming less and less valued...


Specialization is only good if you choose to specialize in the "right" problem domain. If you choose wrong then you are screwed. However, if you specialize in a domain with a limited number of specialists in a domain that is in high demand then you can become fairly rich in a short time frame.

Generalists will typically have a much easier time finding a job. They usually can impress management easier than the specialist since managers are more impressed by the guy who knows something about everything than only something about one thing. When it comes time for layoffs, if there isn't an immediate need for the specialist then they'll be the first to go. It is just plain harder to place a specialist than a generalist and managers recognize this fact.

So, my answer is no, the generalist role will not hinder your career growth, unless your desired career path involves being a specialist in some particular area.


There are advantages to each though I'd hope you'd understand the benefits of being between the two extremes. There is the generalist that knows a lot of different languages but doesn't have in-depth knowledge of any of them while at the other end is the specialist who knows one language to radical depths. You may have found yourself somewhere between the two as there are tons of other languages you could learn like Lisp, Pascal, VB.Net, and COBOL to name a few.

Something to consider is how one may evolve with a technology. In my own case, I was programming in C++ back in 1998 as a starting point. Then came VBScript with Active Server Pages and its successor the ASP.Net with C#. Things keep on changing and evolving and I just roll with it now. While you may think the grass is greener elsewhere, could you see the advantages of where you are now?


Not the answer you're looking for? Browse other questions tagged or ask your own question.