I can't be bothered talking about DI much, because it's a non-issue. Use it if it's appropriate. You use ruby? Big deal. You're not special; if there's a situation where DI is helpful, use it. If not don't. This isn't a complicated idea.

I was mildly interested in the idea that 'language shapes the way we think'.

My initial response was: WAT? O_o

After all, there are some pretty detailed criticisms of the idea (http://www.quora.com/What-are-the-main-criticisms-of-Whorfs-...), and that's just with actual languages that we think and talk in, not programming languages.

After thinking about it for a bit, there's some basis for this idea, perhaps.

You see, the central idea of whorfianism is basically:

- Your language affects the type of mental constructs you use.

- People with different mental constructs behave differently.

So for example (classic example), if you have a language with no concept of sub-day time units, you'll end up with a society that isn't fussed about punctuality. "Turn up in the afternoon"; ok, I'll do that. No need to ask "what time?" because your virtual model doesn't break your calendar up into hour sized blocks; just into day sized ones.

It's a believable theory. There's a great book about this topic (http://en.wikipedia.org/wiki/A_Man_Without_Words) which broadly speaking supports the idea that language is basically a set of representative symbols we use to model concepts.

The issues up for debate is really, to what extent does language influence behaviour, compared to, for example, other factors. That's a much harder question to answer (and as yet unresolved I believe).

Now

The idea that a programming language can do that?

Well.... it's not totally rubbish. I mean, software doesn't exist in the real world; to work on it at all, we have to create a mental model of it.

So it's conceivable that our language provides us with symbols to conceptualise the code we work on, and so we'll behave in a different way if we have different models.

For example, if you have a deep understanding of assembly and lower level programming languages, your model will have more stuff in it, compared to the model of someone who only knows a high level language, whose model will drop down to 'black box' components when it gets down to a certain level.

...and I can totally believe that makes a difference to how you write code.

This applies, however, only to concepts (aka. words, aka. representative mental symbols) and not to programming languages.

See, this is the issue; your domain knowledge helps inform how you generalize and problem solve. That's what ruby is. It's a knowledge domain.

I'm extremely dubious that it provides novel concepts that you don't get from any other programming language. Perhaps in that its a dynamic language it gives a few different ones, to say, that a C++ programmer might have, but broadly speaking:

You are not a unique and special snowflake because you use ruby

...or python. or C++. Or scala. Or C. Using a different programming language DOES NOT change the way you think.

Learning new words and concepts in your existing language (ie. the one you speak) does that. And sure, using a language with new concepts will teach you those new concepts. Like DI for example, that's a concept.

...but "I'm a ruby programmer"?

Just go away. You're an idiot.