There were a lot of people using Macs. I mean a lot. About a third of the audience had laptops with them and nearly every one seemed to be a Mac. I suspect there may have been some Linux distributions, but Windows boxes were conspicuous by their absence. That said, there was no hostility to me as a Windows platform guy.
There were a a lot of youngsters there, by which I mean that I have gotten used to a lot of developers being over 30. In the Ruby world there are a lot in their early twenties. Wonder where the kids are? It could be they are doing Ruby.
A lot of the people I spoke to in the pub after the meeting were working on commercial projects. I expected there to be more interested people than people from projects that were actually using it, but I was wrong. And Rails dominated; Rails seems to be what Ruby is all about right now.
In my informal and statistically irrelevant survey, 5 people, media companies seemed to dominate as the companies using Rails.
I asked who had driven adoption and they identified technical leadership within their organization. That surprised me too as I expected it to be driven by developers, often using guerrilla adoption tactics. That did not seem to be so.
The Ruby community has agile concepts baked into it. Interestingly I found folks admitted to poor agile processes and falling down on unit tests, but these guys definitely knew that there was a bar that they should be hitting, even if they were not making it. My experience has also been that genuinely agile teams often talk about their failings – that’s a natural consequence of doing constant reflection. I think I sold a few of them on Crystal as an approach. So I think it is true to say that the Ruby community gets Agile, on my limited interaction with them so far.
Deployment seemed to be their major pain point, along with the pace of change, particularly around the Rails framework.
The Ruby developers all seemed like smart, switched on guys, who were interested in development. To be fair I was at a user group, which is self-selecting, and Ruby is at the early-adopter stage, so again fairly self-selecting to motivated developers.
As for me, I worked through the pickaxe book, but it did not really work for me as an introduction to getting started with Ruby. I’m having a lot more joy with Everyday Scripting with Ruby. What’s not to love about a book that puts TDD with Ruby right up front in your learning experience. I’m finding Ruby interesting, but I still have a couple of areas where I remain cautious.
I appreciate that dynamic typing gives me a lot of conciseness but I like the intention revealing nature of statically typed code. I find it easier to read code that expresses its intentions through a contract of type. But that may just be because I have spent so long in statically typed languages that I have not flipped over to a scripting language way of thinking yet. To be fair to me though, I started out in Foxpro and one of the features I overjoyed to leave behind when I moved on to C++ was the lack of explicit typing. I lean on the compiler a lot, indeed regard its feedback as the first check that my code gets, before the unit test can run. It also gives me intellisense and safe refactoring, both of which I see as huge productivity drivers; I don’t know that the conciseness of Ruby compensates enough for that. The Ruby guys I spoke to say that it was one of the first things newbies from Java and C# raise: "Dude, where is my intellisense!" It’s also important to distinguish between conciseness that Ruby gains from language constructs and from the idioms like fluent interfaces and blocks, some of which we have now in C# 2.0, more of which we will get with C# 3.0, and some of which are just down to changing idioms in framework design.
Duck typing is interesting in that it allows low-cost polymorphism; you do not really have to make bets on when you will need that polymorphism but can choose to exploit it on demand. That’s a nice feature, though again some part of me is still wired to like the intention revealing code that static typing produces. In addition, once you introduce duck-typing there is a whole class of errors that dynamically typed languages expose you to that you will only see when the code is executed (i.e. when we try and call the method on the object ). While TDD may help with this, comprehensive automated functional testing is the only way to be sure to grab these, because its only when we integrate that we see whether or not the object passed to the method can be dynamically cast. VB was proposing an interesting solution to duck typing at one point, but it got pulled from Orcas.
My concerns here amount to cost of maintenance, particularly as Ruby moves out from the domain of the early-adopters into the mainstream. How easy is Ruby going to be to maintain by comparison to statically typed code? The fact that TDD, automated acceptance tests etc are baked into the community seems to be a part of making Ruby successful. Part of me suspects that the success of Ruby is partially down to the Agile philosophy being relatively coterminous with it and I wonder whether organizations that do not adopt Agile could adopt Ruby successfully. Most of the teams I spoke to only seemed to have been working in Ruby for a year, so I guess that the feel for cost to use Ruby over the complete product ownership period may still be in question. I don’t have the background to offer any kind of opinion at this point.
I do find myself wondering though if the community and the ethos is at the heart of what is making Ruby a success more than Ruby the language. The fact that commercial projects seem to be all about Rails, a framework, leads me to ask whether the success is that the Rails story is all about the right time with the right framework for the right community instead of advantages in Ruby itself. Can Rails be built with other languages – i.e. Monorail? If so the question to ask would be does Ruby have legs outside Rails once the paradigms that made Rails a success cross over into other platforms? I don’t pretend to know the answers on this one either.
Still, I’d recommend the experience of learning a new language and meeting new communities as a positive one for expanding your horizons.