views:

255

answers:

9

How do you work with someone when they haven't been able to see that there is a range of other languages out there beyond "The One True Path"?

I mean someone who hasn't realised that the modern software professional has a range of tools in his toolbox. The person whose knee jerk reaction is, for example, "We must do this is C++!" "Everything must be done in C++!"

What's the best approach to open people up to the fact that "not everything is a nail"? How may I introduce them to having a well-equipped toolbox, selecting the best tool for the job at hand?

A: 

Give them a screwdriver and tell them to build a house?

Matthew Flaschen
+4  A: 

Give them a task which can be done much easily in some other language/technology and also its hard to do it the language/technology that he/she is suggesting for everything.

This way they will eventually search for alternatives as it gets harder and harder for them to accomplish the task using the language/technology that they know.

Mahesh Velaga
... or they will just fight the task with their one true language and be very proud of their achievement :(
Martinho Fernandes
@Mahesh: do you honestly think this is the right approach? To set them up for failure? How does that help the team, and what team has the extra bandwidth to waste on such an experiment?
Bryan Oakley
I am just suggesting a thought that I felt would be effective. they r not set up for a failure, they are just missing the brighter/easier part of doing things. If they r completing the task, then they will learn a great deal either way (using their language/technology or the other). This is just to make them realize that there r better ways to do things, all are winning in the long run :)
Mahesh Velaga
+3  A: 

Don't hire them.

Mike Daniels
+2  A: 

Put them in charge of a team of COBOL programmers.

davek
hey man, that's not fair. COBOL is part of my "toolbox" :(
jaywon
no problem - it's part of mine, too! Actually my point was not about COBOL *programmers* at all, but rather that you'll never win such arguments by charisma/eloquence alone, but only but putting the person in question in a situation where they see that each tool has its mertis, and that "not everything is a nail". Developing a user-friendly GUI in COBOL, for example, is p-a-i-n-ful.
davek
+6  A: 

As long as there are valid reasons for it to be done in C++, I don't see anything wrong with this monolithic approach.

Of course a good programmer must have many different tools in his/hers toolbox, but these tools don't need to be a new language, it can simply be about learning new programming paradigms.

As much as I've experienced actually, learning many different languages doesn't make you much of a better programmer at all.

This is also true with finding the right language for the job. Yeah ok, if you're doing concurrency you might want a functional language rather than an Object Oriented language, but what are the gains of using another programming language?

Luca Matteis
+1. Polyglot != smart.
Martinho Fernandes
So if you need to rename thousands of files based on some criteria, you're gonna use C++ instead of a proper script language?
Bastien Léonard
@Bastien, exactly. @Luca, I think that there'd be plenty of people who'd argue that working in different languages helped them become better programmers. I'm not talking about learning Java and C++ as they are too similar. I'm talking about learning Lisp or Erlang as well as C++. Languages that take entirely different approaches. *That* is what helps you become a better programmer!
Rob Wells
+4  A: 

Lead by example, give them projects that play to their strengths, and encourage them to learn.

If they are given a task that is obviously better suited for some other technology and they choose to use a less effective language, don't accept the work. Tell them it's not an appropriate solution to the problem. Think of it as no different then them choosing Cobol to take the replace of a shell script -- maybe it works, but it will be hard to maintain over time, take too long to develop, require expensive tools, etc.

You also need to take a hard look at the work they do and decide if it's really a big deal or not if it's done in C++. For example, if you have plenty of staff that knows that language and they finished the task in a decent amount of time, what's the harm? On the other hand, if the language they choose slows them down or will lead to long term maintenance problems they need to be aware of that.

There are plenty of good programmers who only know one language well. That fact in and of itself can't be used to determine if they are a valuable member of a team. I've known one-language guys who were out of this word, and some that I wouldn't have on a team if they worked for free.

Bryan Oakley
A: 

Ask them to produce a binary that outputs an infinite Fibonacci sequence.

Then show them the few lines (or 1 line, depending on the implementation) it takes in Haskell, and that it too can be compiled into a binary so there are better ways forward.

Tim Green
Sorry, couldn't resist: `fibs = unfoldr (\(f1,f2) -> Just (f2, (f1+f2,f1))) (1,0)`
Martinho Fernandes
One line: `int main() { SomeBigIntType a = 0, b = 1, c; cout << a << '\n'; for (;;) { cout << b << '\n'; c = a + b; a = b; b = c; } }`
Roger Pate
Using a reasonable definition of 'one line' and not its literal one, that doesn't really count.
Tim Green
@Tim: That does more than just generate them, it also outputs them, which the Haskell version doesn't. There is no "reasonable definition" useful to compare in this way. How about I code it in 7 characters of APL and show that to you as "obviously superior" to the Haskell version?
Roger Pate
Congratulations, you've missed the point entirely. We are all collectively saying there are alternatives to this "one true language", which you attempted to defy with your "one line" of code, but are now contradicting it by 'threatening' it with an APL version. Feel free to post it, it's obviously too awesome for us all not to gawk at.On, and at no point did I say Haskell was "obviously superior". In fact, I didn't even say it was superior, I suggested that it was an ALTERNATIVE.
Tim Green
@Tim: No, you missed the point entirely, because you can't use metrics like line count to show the value of having multiple tools.
Roger Pate
@Roger: If you say so.
Tim Green
+5  A: 

At the end of the day; "Maintenance".

If it can be maintained without undue problems then the debate may well be moot and comes down to preference or at least company policy/adopted technology.

If that is satisfied then the debate becomes "Can it be built efficiently to be cost effective and not cause integration problems?"

Beyond that it's simply the screwdriver/build a house argument.

Matt W
+1  A: 

How may I introduce them to having a well-equipped toolbox, selecting the best tool for the job at hand?

I believe that the opposite of "one true language" is "polyglot programming", and I will then refer to another answer of mine:

I actually doubt that anybody can nowadays realize a project in one and only one language (even though there might be exceptions). The easiest way to show them the usefulness of specific tools and languages, is then to show them that they are already using several ones, e.g. SQL, build file, various XML dialect, etc.

Though I embrace the polyglot perspective, I do also believe that in many area "less is more". There is a balance to find between the number of language/tools, the learning curve, and the overall productivity.

The challenge is to decide which small set of languages/tools fit nicely together in your domain and will push productivity and creativity to new limits.

ewernli