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.<p>I was mildly interested in the idea that 'language shapes the way we think'.<p>My initial response was: WAT? O_o<p>After all, there are some pretty detailed criticisms of the idea (<a href="http://www.quora.com/What-are-the-main-criticisms-of-Whorfs-theory-of-linguistic-determinism-and-relativity" rel="nofollow">http://www.quora.com/What-are-the-main-criticisms-of-Whorfs-...</a>), and that's just with actual languages that we think and talk in, not programming languages.<p>After thinking about it for a bit, there's some basis for this idea, perhaps.<p>You see, the central idea of whorfianism is basically:<p>- Your language affects the type of mental constructs you use.<p>- People with different mental constructs behave differently.<p>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.<p>It's a believable theory. There's a great book about this topic (<a href="http://en.wikipedia.org/wiki/A_Man_Without_Words" rel="nofollow">http://en.wikipedia.org/wiki/A_Man_Without_Words</a>) which broadly speaking supports the idea that language is basically a set of representative symbols we use to model concepts.<p>The issues up for debate is really, to what extent does language influence behaviour, compared to, for example, other factors. That's a <i>much</i> harder question to answer (and as yet unresolved I believe).<p><i>Now</i><p>The idea that a programming language can do that?<p>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.<p>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.<p>For example, if you have a deep understanding of assembly and lower level programming languages, your model will have more <i>stuff</i> 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.<p>...and I can totally believe that makes a difference to how you write code.<p>This applies, however, only to <i>concepts</i> (aka. words, aka. representative mental symbols) and <i>not to programming languages</i>.<p>See, this is the issue; your <i>domain knowledge</i> helps inform how you generalize and problem solve. That's what ruby is. It's a knowledge domain.<p>I'm extremely dubious that it provides <i>novel concepts</i> 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:<p><i>You are not a unique and special snowflake because you use ruby</i><p>...or python. or C++. Or scala. Or C. Using a different programming language <i>DOES NOT</i> change the way you think.<p>Learning new words and concepts in your existing language (ie. the one you <i>speak</i>) does that. And sure, using a language with new concepts will teach you those new concepts. Like DI for example, that's a <i>concept</i>.<p>...but "I'm a ruby programmer"?<p>Just go away. You're an idiot.