Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Do most programmers specialize on a single stack, leaving other things be, or are they expert at multiple languages at the same time? If it's more than one, how many is standard?

By expert, I mean more than simply knowing the syntax of a language - an expert knows enough of standard libraries, tools, environments and syntax to be able to write non-trivial programs without having to constantly look things up or read books/tutorials.

share|improve this question
2  
I don't think there's any objective (or even subjective) answer to this question. The more you are an expert in, the better it is for you - the wider a perspective you have. Did you mean "How many programming language paradigms a programmer should ideally be an expert in?" –  talonx Dec 3 '10 at 2:33
6  
I disagree with your definition of expert. To me, whether or not you have to look up library functions is far less important than whether or not you can write idiomatic code in that language. If you can think in a language, you're at least close to being an expert. –  Chinmay Kanchi Dec 3 '10 at 4:56
1  
How do you think in a language, if you have to look up most of your words in a dictionary to know what they mean? –  blueberryfields Dec 3 '10 at 5:04
1  
@blueberryfields: Fluency in a language is much more than just vocabulary and beyond the basics, vocabulary is a small part of it. It's no good knowing a function exists if you can't do something intelligent with that knowledge. It's far easier to just lookup the function than to figure out how to do something intelligent with it. I would say that knowing the docs well enough to to quickly know where to look for a given function if it exists is enough library knowledge. After that, you'll remember precisely the ones that you use and remember vaguely the ones that you don't. –  aaronasterling Dec 3 '10 at 5:09
2  
@blueberryfields: Depending on the language/platform, a little knowledge can be a dangerous thing. What I mean is: if a person claims to know many library functions by heart and doesn't need to read the documentation, I would expect that person to also know all return values, exception conditions, and pitfalls/caveats, à la Raymond Chen by heart, and be able to write a book and give a lecture to Microsoft/Google etc. Short of that, the person ends up making many funny little mistakes. –  rwong Dec 3 '10 at 8:50
show 3 more comments

closed as not constructive by Yannis Rizos Mar 8 '12 at 13:08

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.

11 Answers

up vote 31 down vote accepted

The main benefit of knowing multiple languages isn't in writing them directly. All other things being equal, I'd rather work with a C# programmer who also knows C, Python and Lisp (for example) than one who's only ever hacked in C#. It's not that knowing more languages is better, it's that being able to think about problems at multiple levels and from multiple perspectives is really helpful.

A programming language that doesn't change the way you think about programming is not worth knowing. -Alan Perlis

It's not about checking off one more language, or putting it on your resume; you just need to understand its underlying concepts well enough to program in it to get the full benefit. You won't get that from having a basic understanding of the syntax.

The more direct answer is "it depends".

At larger companies you're expected/allowed to specialize, but as I said above, I believe there's still benefit to understanding things beyond your one favorite tool.

At smaller places, you really can't get away with that. If nothing else, you typically need to maintain your app as well as build it, and you probably souldn't use the same languages for running through logs/data munging as you do to actually build your app. I guess you could technically get away with knowing a single language, but the benefit of having a well-performing, strongly-typed (or at least assertion-capable), probably compiled language do the heavy lifting, and a scripting language for maintenance/setup/scripting tasks seems pretty big. I wouldn't want to do without it, certainly.

share|improve this answer
3  
yes it broadens my horizon as well -- thinking in many languages to tackle a problem –  maz3tt Dec 3 '10 at 4:18
3  
+1 to all Inaimathi said. Think of a programming language as a tool. Yes we need to know our tool very well but when you only know how to use a hammer then everything might look like a nail –  Liviu T. Dec 3 '10 at 9:32
add comment

You have a very interesting question:

I dont think that any programmer should be an "expert" on a specific language. My believe is that as programmers we are meant to be experts at programming, designing algorithms, thinking in clear steps, but a programming language is something that you just learn.

A "good" programmer, by good I mean that handles development projects without scaring behind the classic "I've never worked with that before", should learn a language in less than 5 working days. You learn best practices, tools and libraries mainly from 2 ways, 1: reading and 2: working. Either you bounce your head against the code or read a bunch of books.

In a few years following the premisse of "Good programmers write just code" no C# code or C++ code or Java code, you will realize that after you learn to develop programs, the language and the techonologies are not that important. Sure, you'll know how to move around C# better than PHP, but if you've learnt well, you'll find you'll way through Python if you have to.

Hope my ideas like you!

share|improve this answer
    
+1 "good programmers write just code ... the language and the techonologies are not that important" - very true, it takes a great deal of exposure to arrive at that conclusion though. –  Orbling Dec 3 '10 at 14:45
    
Thks, and you got it right: 11 years and counting... :) –  David Conde Dec 4 '10 at 6:08
add comment

One, but that doesn't mean you can neglect the others. You have to know enough to justify why you're not using them or know your limitations, so you can ask for help when appropriate.

share|improve this answer
add comment

I think it probably depends on your personality, there are people who revel in digging down into the nooks and crannies of a subject, and there are others who like to get a broad view of things. You probably will need to figure out what type of personality you are. I am not putting one above the other each have their uses.

As the former you will be the expert, the guru, the specialist. As the latter you will be of more general use and possible used in a variety of situations but possibly not go as deep or long into a subject.

share|improve this answer
add comment

One. But you better be damn good at it.

share|improve this answer
add comment

One

The one in front of you.

share|improve this answer
1  
+1 The number of languages you need to be expert at is at minimum the number that you have to use. ;-) –  Orbling Dec 3 '10 at 14:47
add comment

As Joel said in the SO podcast, it's better to know many many languages and know how/when to use the right language for the task. There are things you can do way faster in one language than another. I think it would be good to know an imperative language and a functional language for example. Many times learning a harder or more esoteric language trains your brain to just be a better programmer overall.

share|improve this answer
add comment

None as there are likely some programmers that won't be experts in any language but they enjoy the diverse environment they have and will use various languages depending on circumstances as some may know a few server-side technologies like PHP, ASP.Net in C#.Net or VB.Net, or Java, a couple of client side scripting languages like JavaScript or Flash, and this is without getting into any hardware used to put up the web stuff here.

At the same time, there may be some programmers that are experts in a dozen languages or more as that is what they study rather faithfully most of the time to keep on top of so much within each language.

share|improve this answer
add comment

One, but must be able to read non-trivial real-world programs that are written in a few other languages from time to time. In some way, the one in which the programmer is an expert is like their mother tongue, they think in it, but learning and speaking other languages is very good in that it shows the programmer can appreciate other ways of thinking. If they can think in more than one language as fluent as their mother tongue, that is awesome.

share|improve this answer
add comment

This is a good question, but I don't think there is a standard. Normally by what I have seen the people are full expert in one high level language (C++, Java, etc. ) in one environment(windows/linux, mac, solaris). They know roughly some other high level language but not fully understand it. (e.g. C++, Java people knows each other roughly). By roughly I mean they can compare the performance of one task in the language they are expert and in the other language. And then they are moderate in some of the scripting language. (e.g. Linux people knows bash, Windows people knows VBA, web people knows PHP).
For me what matters is is the basic algorithm knowledge than the language. If your basics are good, there are less chances to mess up in any language.
But yes, sometimes it may be useful to know what language could be better for what task. e.g the following code is much faster in pascal than in C.

strcat(A,"Hello"); strcat(A,"WOrld");strcat(A,"I say hi!");

This is because Pascal saves the length of the string in the first location and hence it is easy to jump to the last location. In C the string termination is '\0' and hence you will actually have to traverse the whole string for strcat operation.

share|improve this answer
add comment

It depends on the environment where you're programming. At a previous job, most of my work was in Perl; during my time there I got quite proficient at it. Now I work at a place that has legacy programs in three languages that I barely know the syntax; I'm expected to maintain them in addition to my work on new projects. I'm now less a master of any language, but I think I've gotten a better feel for programming. I've learned how to think more abstractly, see the big picture first, and then look up the syntax and the libraries to fill in the details.

share|improve this answer
add comment

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