views:

244

answers:

13
+4  Q: 

Language Menagerie

Possible Duplicate:
Should developers be specialists or generalists?

I was wondering... With regard to pursuing and strengthening a career as a programmer (in the broadest sense) is it better to stick to 1 core set of languages (e.g javascript and c#) or always be on the lookout for "the best tool for the job".

Personally I want to go for the "best tool" approach, mainly because I believe that it is the core programming concepts that are important and that syntax is secondary.

However, I'm sure that this approach leaves me shy of becoming an expert in my languages of choice (PHP and c# are the contenders in my case).

I know its not a programming question as such, but I'd be interested in hearing the opinion of the masses.


Similar Questions:

Is it better to go broad or go deep?
Should developers be specialists or generalists
Why You/I Should not learn another language

+3  A: 

A diverse set of tools is A Good Thing. It will help you think about problems in a different way, however it will affect your productivity when learning these new languages. I asked a question in that vent there were some good answers there.

John Nolan
thanks, yes that thread answer my question :-) I thought it would probably have been asked but couldn't find it.
David Archer
These are also somewhat similar: 'Is it better to go broad or go deep?' (http://stackoverflow.com/questions/520712/is-it-better-to-go-broad-or-go-deep) and 'Should developers be specialists or generalists?' (http://stackoverflow.com/questions/17903/should-developers-be-specialists-or-generalists)
Jonik
Ouch! That superflous apostrophe is hurting me.
Chris Needham
I hang my head in shame. Thats' the firs't time Ive ever misplaced one.
John Nolan
+1  A: 

I don't really think you should neglect either breadth or depth. You're right that core programming concepts are universal, and it's good to get acquainted with different ways of doing things, but I also think it's important to have a really extensive familiarity with some set of core technologies. There are benefits to depth of understanding that just aren't visible on the surface.

chaos
A: 

Knowing a lot of languages will make you a better programmer but most employers will pay you for knowledge of a specific one or two.

Steve Rowe
Only if you know a lot of languages well. Knowing the syntax of a dozen languages isn't that much good after all (and is also pretty simple) whereas knowing the ins and outs of 2 or 3 languages really well means that you can write better programs in those languages.
workmad3
I think knowing even the syntax of a dozen languages is useful. You won't be any good at them, but you'll have some sense of how they solve problems. The more languages you understand, the more ways you'll have of thinking about problems.
Steve Rowe
A: 

Do you know Steve McConnell's metaphor of a "mental toolbox"? If you know a lot of tools then you have better chances to select the right tool for the problem at hand. A broader knowledge of different tools also helps you better understand the underlaying concepts. Still you have to master the tools that you use most of the time.

Vizu
A: 

Nowadays you should be really good at 2-3 languages and have decent knowledge of other languages. I see a push for functional and dynamic languages these days. I would love to know why you want to start off with PHP :)..just curious.

Perpetualcoder
I like the ideal of using open source only. That's why I started getting into PHP :-)
David Archer
+3  A: 

I believe in a hybrid approach:

Learn many different languages, and pick a certain few to master.

It's good to know a number of different languages from a flexibility standpoint. That said, there are definite rewards to mastering (or at least taking a "deep dive" into) the concepts and implementation of a language.

That said, one important aspect of your mental toolbox isn't frequently mentioned: your experience in different problem domains. Experience in different programming languages is going to be a lot more useful if you haven't just used them to solve the same problems over and over. Breadth of experience is probably more important to the overall health of your craft than learning the language of the minute.

Paul Morie
Good point on the problem domains.
Steve Rowe
A: 

This is a matter of personal preference. Do you want to get stuck with doing the same things? You might get a better salary if you find the right job that requires that specific skill but if you are like me you'd also get bored out of your skull after a few years. And it will also mean you will see every problem as a nail.

Knowing a large set of tools will allow you to select from a much larger set of jobs and possibly land a good job if a company is looking for someone with your skillset.

Makis
+1  A: 

I have learned far more about programming by trying new tools and techniques than I have by trying to deepen my knowledge of one particular platform. Platforms come and go, and there aren't that many benefits to being a "C# expert" or "PHP expert".

The problem is that the core ideas -- data structures, algorithms, and source code analysis -- are really language agnostic ideas. As you learn new ways of expressing the same concept in different languages, you'll gain a better understanding of what the concept really is rather than just how to write it in some particular language. To me, then, it's less about being able to find the "best tool" for the job and more about being knowledgeable enough that you can sit down and start writing code in a language you've never seen before.

There is also a shift in the industry away from hiring specialists towards hiring generalists. And there are a couple things that stay the same no matter how deep your knowledge of C# or Javascript are: a bad algorithm / data structure is always a bad algorithm / data structure, and at the end of the day, your code will be running on a Von Neumann machine (except in very rare circumstances).

My advice is to learn (Haskell or Lisp or Scheme) and possibly also learn (Python or Ruby). You'll become a much better programmer for it, although it's not quick.

Dietrich Epp
A: 

you are right to go with the 'best tool approach'

dont pounds nails with a screwdriver, and don't set screws with a hammer.

and it's true: important to know when to grab a screwdriver and when to grab a hammer... so getting a little experience with each of them is a good idea...

you may get a much deeper understanding of contemporary C-derived languages by learning C.

and you may get a much deeper affinity for linked lists by learning Common Lisp.

and you may have alot of fun learning Forth.

DUP SWAP DROP

kent
If you reduce Common Lisp to linked lists, you should reduce C to pointers.
Svante
I fundamentally do not reduce things. what would be the point?gaining an affinity for something is worlds different from reducing something. ps: (you (can also) gain an affinity for parenthesizing by learning Lisp!)
kent
A: 

I don't think you can be an expert in too many languages (compared to a specialist in that language), a "Jack of all trades, master of none" type scenario. But I think its a good idea to have a primary language with maybe 2 to 3 secondary languages. Perhaps you would be a C# specialist, but also be able to work reasonable well in Java, Python and PHP. If the right career moves came up in a secondary language, you could then have the ability to shift it to your primary language (eventually).

JonoW
A: 

Be a jack of all trades a master of one (or two).

That way you are flexible but also are able to fall back to what you know to complete complext tasks.

The more you work in the other languages the better you will get at them, however you will find that you might start to get frustrated when you find that you are a few thousand lines into a project and that the language you have chosen makes it really difficult to do something that would be simple in another.

I get this on a regular basis both ways between .Net and Java

Omar Kooheji
A: 

I'd more probably not overfocus on languages, but first select the problem domain to target. Then chose languages (and -families) accordingly.

Marco van de Voort
A: 

There are a couple different questions this brings to my mind:

1) Range of tools -> Do you embark on an exhaustive exploration for tools that may do a particular job? I mean do you analyse every version of every programming language for what trade offs exist in selecting this versus that? This could be ridiculously impractical and not a good use of resources like time.

2) Proficiency with those tools -> How often are you going to use every tool in your toolbox to keep those skills sharp? If you keep more than a couple dozen tools, this could become somewhat time consuming to have to work on each skill to my mind.

I'd suggest the best answer lies in understanding how to moderate how big and how deep a toolbox to have ready. Of course another line is to ask, "What would Jon Skeet do?" and just follow that wisdom.

JB King