Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

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

Let's say a .NET programmer works at a company which provides software on demand, not as a product. The programmer works in WPF for a period of time and he/she invests lots of time in it. He/she get very good at WPF and Windows Forms and desktop development in general.

But the company has to provide a web application now, so the developer has to learn MVC or Web Forms. He/she is not experienced in web development so he/she starts investing time in this new technology and in time they get good at it. But this time the company has to provide a Sharepoint solution, and so on.

What is more important:

  • Being very very good at a certain technology,

  • Or be as versatile as possible knowing less in each technology but covering a greater area of expertise?

Should the programmer keep studying and working in WPF until he/she reaches a guru level or is it a good thing that they had to learn other technologies as well?

I agree with those of you who will say that when learning different technologies you will also learn things which are useful no matter the technology you're programming in. But eventually, when the programmer will want to change jobs, will it matter more that he/she knows some WPF, MVC or Sharepoint than the fact that he/she is insanely good at one of them?

I would think the second one is more important since most companies are looking for a developer for a certain technology. I don't think there are many companies looking for technical know-it-all people.

What do you think?

share|improve this question

closed as not constructive by gnat, GlenH7, Steven A. Lowe, GrandmasterB, Dynamic Sep 25 '12 at 20:41

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.

Knowing to learn fast is the most useful skill ever. If you manage to learn different technologies in a short period of time, the skill will be greatly appreciated. – superM Sep 25 '12 at 14:08
Imagine yourself in 20 years by looking at what technologies were hot 20 years ago. Would you rather be an über-guru in one of those 20 year old technologies, or would you rather have passing knowledge of many technologies from the last 20 years? Do you want to be the 2032 equivalent of an OS/2 guru? – Steven Burnap Sep 25 '12 at 18:23
You talk about the case of "a company which provides software on demand, not as a product". In my experience of working in such an environment, there is a high value placed on being versatile and having broader rather than deeper knowledge, simply because it increases the amount of client work which the company can confidently take on. No agency wants to say "no" to work because the client wants a web app and all their programmers only know desktop development. – Carson63000 Sep 26 '12 at 3:56
up vote 2 down vote accepted

Being Expert at one/few technologies:


  1. Easier to stand out in the community which leads to possibility of better consulting rates for those specific jobs
  2. Can clearly articulate what are your strengths
  3. More economical from a project point of view (I'd rather have a Sharepoint expert working on a sharepoint project even if he/she doesn't know WPF at all, vs a person who knows all, all other things being equal)


  1. Tied to the future of technology - (although even dying technologies can give you really good consulting rates depending on how much they have permeated)
  2. Repetitive work - might get boring after a while
  3. Very hard to move out of consulting profile - say you want to be a tech-cofounder of a company, unless there is some kind of deep relationship with that technology (which might be possible, but rare)

Diverse knowledge:


  1. Broader thinking - ability to see beyond what the particular technology gives you (for e.g. a developer with some Ruby experience will be more likely to ask questions about why C# can't do something like this (maybe even cookup a library that bridges the gap).
  2. Better chances of Choosing right tool for the job - especially avoid the "if you have a hammer everything looks like a nail" mentality.
  3. New learnings - learnability itself is a skill
  4. Flexibility in terms of tech-roles - from consultant to employee to founder. Also mostly more choice in terms of companies.


  1. Jack of all trades, master of none?
  2. As an independent consultant, it is may not be as lucrative (in terms of per hour rates) as being a master at something

In the end I guess you should figure out what you want your profile to look like, and work backwards. Most people I know have a mix of the above two - will have areas of specializations, but will not be completely isolated from other technologies.

share|improve this answer

None of the technologies you mention even existed 12 years ago. You sound like someone debating between getting really good at COBOL or picking up some of this newfangled C++.

Take a few minutes to look at some top web sites. What parts were written by people insanely good at one technology? If you can't tell, how is a potential employer supposed to tell?

It's not a question of "should you" gain versatility. You will gain versatility if you want to still have a job in this industry in another 12 years. In our profession, gurus are those who can transfer their knowledge from one technology to another without feeling like they are starting over.

share|improve this answer

I'd choose versatility any day of the week. The world of programming is fast-moving. People who can't adapt and change won't survive*. Experience is tricky. MMORPG's have taught us that simply doing something for a long time somehow makes you good at it. This is not the case in real life.

*by "not survive" I mean "become COBOL programmers for some enterprise"

share|improve this answer
Bad example. Experienced COBOL programmers are still in demand and can charge an arm and a leg because, well, they're a dying breed. A better example would be those who bet on IBM RPG, PL/M, or VBA. While there may be some work out there for those skillsets, there's simply less demand. Those who bet on COBOL are taking it to the bank. – Philip Sep 25 '12 at 15:49
@Philip: it's not about the demand. It's more that working as a COBOL programmer is not the most exciting thing you can do in your life as a developer today. – MainMa Sep 25 '12 at 16:23
@Mainma, so the vast majority of developers are the walking dead? Shambling around as life-less husks ever hungering for an exciting project to quench their mind-thirst. Whatever will these poor souls do with their GIANT BAGS OF MONEY? (I guess that explains open source.) – Philip Sep 25 '12 at 16:28
@Philip: if you think that COBOL programming is the most exciting thing you can do, and that the vast majority of developers today are COBOL developers, I have nothing to reply, I believe. – MainMa Sep 25 '12 at 16:47
@Mainma. Sorry if that wasn't clear. The vast majority of developers are not working on exciting projects. Usually it's yet another business solution that's been done before. Even when it's something important, say, OBOGS, the work is drop-dead boring. Hence, when you say that since COBOL is not exciting and is equivalent to "not surviving", that would imply most developers are undead. Which is kinda funny. – Philip Sep 25 '12 at 16:55

Have you read Don't Call Yourself A Programmer, And Other Career Advice?

Learning is the most useful skill, ever. Especially since:

  • Your job is to solve problems, not to write lines of Visual Basic or Python or Ada code.

  • You don't know how the technology will evolve. Ten years before, nobody knew about C# - today it's a mainstream programming language. Maybe in ten years, it will cease to exist, and you'll have a hard time if you already call yourself ".NET programmer".

  • Code doesn't matter. Data structures are more important.

share|improve this answer
Sorry, but your first link is poison. "Engineering is a cost center" is laughable but might be true from a management's perspective. Which would make this valuable if not for "companies with broken HR policies where lack of a buzzword means you won’t be selected. You don’t want to work for them". So he's mixing perspectives in a very unhelpful way. All in all, it's like he's trying to be brutally honest, but just comes off as cynical. – Philip Sep 25 '12 at 16:11
@Philip: thank you for sharing your personal opinion. – MainMa Sep 25 '12 at 16:25

No matter which path you choose, remember to not let 10 years of experience end up being one year of experience 10 times. Learning different technologies isn't always about being good in Ruby and ASP.NET MVC and PHP, and Python. It's about understanding concepts over implementations which gives you the understanding of why you're doing what you're doing and allows you to tackle problems in your single master technology of choice with the wisdom of knowing about how other technologies tackle them, even if you aren't an expert or even good in those technologies.

share|improve this answer

I don't think there is a good answer to this.

Ideally, you should have deep knowledge AND be extremely versatile, but that is probably not humanly possible.

In reality, you have to choose which way to go based on the circumstances. So if your company is constantly changing technology, you need to be the versatile (but shallow) generalist rather than the narrow (but deep) specialist. And if that is too tiring / too frustrating for you, consider moving to a position where you can stick to one set technologies for a length of time.

However, I would question the wisdom of an organization constantly switching technologies. Don't "they" realise the cost of this technology churn in the form of increased training, reduced developer effectiveness, long term maintenance and so on?

share|improve this answer

You're missing how different versions of one technology can really muddy things here. For example, look at how different the first few versions of the .Net framework were for doing web work. The 1.0, 1.1 and 2.0 frameworks each had their own quirks that made life interesting and thus someone getting to know one technology has the challenge of whether they'd know just one version of the technology or all of them.

If I want to claim being good at web development, do I need to have experience in every web technology out there or can I be selective of what I know? While this may seem like a simple question, consider all the PHP, Django, Drupal, Joomla, and other stuff there is beyond the Java and .Net stuff out there. While companies may want a certain skill today, they also want to know that the person is open to learning new stuff as the world of technology continuously changes, at least in my experience of web development over the last 14 years where I've gone from ISAPI extensions and filters to classic ASP to more than a few versions of ASP.Net.

share|improve this answer

I would also recommend versatility.

You should try to distinguish between two classes of expertise:

  • expertise in the fiddly details of specific tools, platforms, and "technologies".
  • expertise that is more fundamental, independent of the specific tools.

Both are necessary. To get anything done, we need to learn how to use our tools, but to be effective, we also need fundamentals like software engineering principles and practice, system architecture, and the like. And the problem is that there's way more of both kinds of expertise than anyone can learn in a lifetime.

However, "technologies" are ephemeral -- there will always be new ones, but unless they hold an intrinsic interest, there's little point in learning any that you don't need for the task at hand.

On the other hand, fundamentals are portable, so there is more point in learning them. For instance, algorithms will endure when the platform you first learned them on is long forgotten. Also, if your fundamental understanding is sound, you will probably learn "technologies" more quickly, and understand them more thoroughly.

share|improve this answer

I would think the second one is more important since most companies are looking for a developer for a certain technology. I don't think there are many companies looking for technical know-it-all people.

As you have mentioned, most companies are looking for experienced people, who knows how to catch-up with new emerging frameworks/technologies in the market. However, they also look for a candidate with solid understanding of SDLC .

What i see, is that most companies are looking for software engineers who has solid understanding on SDLC, with consistent records of ability to solve business problems, interest and curiosity to learn and improve technical skills as needed.

share|improve this answer

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