Friday, 29 June 2012

Scottish Ruby Conference Day 1

Firstly, the conference itself is extremely well organised, great speakers, and in a fantastic building.  However, I'm just going to talk about two main things which stuck out for me, neither of them very positive unfortunately:

1) Women in Computing

Mike Lee (@bmf) talked about this at (what felt like) length during his keynote.  While I generally agree with the sentiment, I'm not sure a rant telling people how to behave is the best way to address the problem.

What is the problem?  Apparently people make assumptions about women in computing.  Worse, guys generally assume women at conferences are not programmers and try to flirt with them.   There was more of the same vane, as well as some comments about people assuming all black guys steal cars.  Women, like the other people at the conference (i.e. men) aren't there to be flirted with and yeah, I agree with that.

Stereotypes are bad.  I agree.  But didn't Mike just create a new stereotype?  That all conference going guys have the same attitude?  I'm pretty sure I don't!  In fact, I think Mike under-estimates people's ability to empathise and I'm sure the people Mike was talking about are the minority rather than the norm.

I totally agree prejudice should be stamped out, and hard, but I feel that highlighting the existence of prejudice is counter-productive as all you do is alienate a different group in that minority group's place and now more people are alienated than ever.  We, people in general, need to get to a state where gender, race, sexual preference, religion really doesn't matter.  I think Mike wants that, but I'm not convinced his rants on behavioural change actually help.

As a result of the talk I actually became overly conscious about even starting a conversation with any women at the conference and by the end of the day I was pretty sure that there were at least a couple of women on their own during the in-between sessions when networking opportunities are at their premium. They certainly weren't surrounded by a gaggle of gorking geeks as Mike seems to think they would have been either.

Conclusion - don't suffer, or allow someone else to suffer, prejudice.  Use education to teach people to exhibit a mutual respect for all people, but don't tell people how to behave.

2) Tell, don't ask.

While watching the talk about Hexagonal Architecture I was initially excited as modularity (especially runtime modularity) is a favourite subject of mine, so I settled in to find out how Ruby approaches this.

For me, modularity a particularly important aspect of software development, especially in larger systems where tight coupling reduces architectural agility.  However, I'll refer you to Kirk Knoernschild for more information, as he's got a great handle on this.  He's also very good at explaining what the problem is and how to fix it.

To be frank, I was soon disappointed.  The speakers slowly got around to talking about dependency injection,  inversion of control and programming to interfaces, without properly mentioning it.  Their Hexagonal Architecture was nothing more than a well-architected modular application... but without [Java] interfaces to enforce a contract.  They referred to these as protocols, which I am familiar enough with from my Objective C experience, but there is no formal definition of a protocol or interface in Ruby.

Hey, but this is OK!  These principals have been around since the 1980s with Smalltalk and that never had protocols or interfaces either.  Correct!  And that's exactly why Java *does*.

Is this the state of Ruby?  At least 10 years behind Java, if not more?

My current feeling about Ruby (especially Ruby on Rails) is that it gives you a lot out of the box and you can build a solution very fast but what is generated for you absolutely needs to be refactored, or will become a maintenance nightmare later down the line.

Conclusion - Ruby sacrifices [runtime] modularity, fine grained contractual interfaces and thus architectural agility in favour of terse, human friendly, rapid application development.

No comments: