You Know These Guys
It may not be apparent when you’re in school, or at some “early point” in your life – but you know the friends I’m about to describe. Moreover you know the conversation patterns I’m about to talk about – and therein lies the fundamental truth about the “Ruby vs. C#” debate. These languages are our friends – we’ve hung out with them in the hills talking about life’s fundamentals – we’ve struggled to understand their meaning through their quirks and idioms – and ultimately we’ve accepted both … being the good person that we are.
You can’t define one language over the other in the same way you can’t say one friend is better than the other: each has it’s weirdness, each tests you for your tolerance levels.
Meet Kevin
Obviously I’m not going to use any real names – we’ll call my “Ruby” friend Kevin. He wasn’t born in the United States and holds dual citizenship. He’s incredibly engaging – an amazing conversationalist and is quite studied in fashion. This is true: he has a personal shopper at Nordstrom (a US-based clothing store) who he consults with when he shops.
This last weekend he showed up with Cuban cigars; no one new how he got them – he just had them. His ipod was stacked with incredibly cool music and his hiking clothes were the perfect match of utility vs. fashion. He brought 3 hats with him: a party hat that was 50s throw-back, a hiking hat which had the perfect touch of nostalgia while keeping the sun from his head, and a skull-cap that magically fit his head, giving him an air of inner-city thug.
Talking to Kevin usually involves a lot of laughs – he has any number of “one-liners” (yes, pun intended) at the ready and can keep a group of guys in stitches. It’s the one-on-one conversation where things begin to break down. The part where you start to share what you’re all about – the things, deep down that he’s goaded to the surface – where the conversation starts to veer a bit.
In a way you feel like maybe you missed the conversational queues that said “let’s not talk about [diety], politics, and duck typing” – and yet you stumble around those topics, not fully aware of the context now revealing itself. Kevin all of sudden becomes a bit opaque – not quite like you’re strangers – more like he just doesn’t get you. You start to explain and realize you’re digging a bit of a hole for yourself…
Meet Joe
Again – not his real name. Joe is born and bred right here in the heart of the USA. He’s the oldest brother of 3 boys and plays his alpha-male role to a T. Joe worked in IT for most of his life and currently is experiencing a “reset” as time goes on and these “dynamic” kids are pushing some new ideas his way. He’s left IT for the fashionable alternative energy field (things like “var” and the “dynamic keyword”) – and no, I’m not making this up.
Joe is very utilitarian – he doesn’t care much about fashion and brought one hat to keep the sun off of his head – but like C# he can use any number of straps and snaps to configure the hat as needed, for any situation. He brought exactly 4 changes of clothes – checking with the group first to figure out what “events we need to support” – if something happened on the spur of the moment he wouldn’t go – it just wouldn’t compile in his mind.
Talking to Joe usually involves specifics – summarizing the lead-in points (and identifying them as such), telling him up-front what you’re about to say in abstract/summary form, and then addressing each point in order. Failing to comply with the structure of the conversation usually means
ConversationFlowException – Unidentified Point made without premise or qualifier. Are you missing an obtuse reference?
I want to make this abundantly clear: Joe is a very dear, old friend. Yes he has conversation quirks that are easy to make fun of, but he is a sincere, no-bullshit friend that I dearly love. Talking to him for an extended period takes patience, however.
Joe, Kevin, Me, and Mondial
Despite being in the mountains of Northern CA. for the weekend we were all very interested in the World Cup. It’s your right as a US citizen to be entitled to a sport you don’t care about 99% of the time – and we exercised that right this last weekend. Many of our group went over to the local bar – the “Steam Donkey” (yes, that’s the real name) and watched US vs. Ghana. What followed was epic.
Joe watched in detached fascination – he understands soccer if he has some form of reference – in other words someone has told him the set of rules for him to interact with the API (aka the TV). Joe sits there and as the plays unfold he would emit various statements from time to time – all of them in complete authority without any gray area even though the entire reference was just made available to him: “Clearly offsides – I can see the attacker is about 1.2 meters into the box” and “There’s no reason for the goalie to kick the ball that far – it usually results in some type of unintended consequence”
Once I honestly felt myself wondering if Joe had a compiler doing some kind of JIT thing with the TV if he would have said:
It looked to me like that was a YellowCardException – I would have thrown given no other option to complete the task at hand.
Kevin, on the other hand, was double-fisting a local brew and a Maker’s Mark water-back. In the ash-tray in front of him was a burning Cuban… smoke rising to the stained ceiling. “Oh Fer Foooks Sake LADDIEEEE” he would say – mimicking a friend’s Scottish Brogue.
If you were to ask Kevin what happened – why was he so upset – he would say “Where do they find these referees? If you can figure that out than you’ll know why I’m pissed off… well I’m not really mad – that would be lame – I just can’t believe the calls here!”
This left me a bit confused. I get the rules – I’ve watched soccer for a while now and I understand what offsides is and many of the other rules. What I didn’t understand was why he was so freaked out about what he was seeing – nor how he interpreted it. And moreover what it had to do with the game he was watching – or soccer in general for that matter.
“Right, but what happened?” I would ask…
“Dude – just watch the game and you’ll see what I mean”
“OK – but… well alright I guess I can give it my best try”
There Can Be Only N?
I don’t know if it was the peace of mind of a full weekend with my friends, on my own without work and family (though I love them dearly – everyone should have a weekend to themselves and their friends if not just to reset) – or if it was just fatigue; but something in my head clicked.
We relate to languages (and frameworks for that matter) as we would any other thing to which we imbue intelligence, thought, and meaning. I honestly think we accept languages in the way we accept other people – through some kind of “hey let’s hang out” all the way through to “I love you MAN!”
I like Ruby for its ability to adapt and (essentially) have fun in any given situation. Its appreciation of the aesthetic and what “pretty code” looks like (and acts like). I really like how easy it is to talk to – and how simple, yet powerful, the coding environment is. Going deeper than that, however, can be a bit painful.
Ruby doesn’t wear its emotions on its sleeve, nor is it exactly forthright in letting you know when/how/where/why it made the decisions that it did. Like my friend Kevin – you need to ask it questions in the form of tests to get around to the why it made the decision it did – and like my friend Kevin just because you understand that one thing doesn’t mean you understand Ruby as a whole.
I also like C# for its amazingly blunt, “here’s what I need to hear, how, and when” way of dealing with communication with you, the programmer. C# won’t hide *anything* as long as you ask it clearly and explicitly what it will allow you to say, when, where, and how. The conversation rules are up-front with very little suprises – methodical and pragmatic. This can be a good thing when you don’t want to deal with nuance and gray area – but more than a little taxxing on an every day basis.
Do I need to choose between the two? Of course not! Each of these guys is my buddy and I love hanging out with either of them at any given time. I do recognize that I’m a pretty patient person (no… seriously…). Sure there are times when it doesn’t exactly “click” – and yes the ladies might dig Kevin a bit more (which some might say lends to a bit of an ego) – but the criteria for a friend, in my eyes, isn’t exclusive.
I’m thankful to have many friends – some are more fun given certain occasions of course – but all the same I’m glad I can call on each of them when appropriate (and they, me).
