Just a quick write up. During the session we just installed Ruby and got irb and Scite running. Danilo then went through a few features of Ruby. This lead into a discussion of the language that I am going to try and sum up here.
Ruby is a dynamic language with strong typing and effectively open classes. In Ruby everything is an object. It treats methods and functions as first order citizens, these are objects of the Proc type. Ruby makes metaprogamming easy and there are several ways available to do it. All method calls are dispatched by lookup as reference the method represents may change between calls.
Programming in Ruby presents strong challenges for writing conventional enterprise software. Due to it’s dynamic nature testing is vital as little can be asserted about the operation of the code prior to actually running it. However some testing frameworks can actually interfere with the way the code runs so unit test behaviour may not translate to functional test or production environment behaviour.
Ruby inherits a lot of ideas from its ancestor Perl, importantly there are often several ways to do things and therefore it is often easy for people to convert to the language as they can use the ideas of other languages they are familiar with such as Java. However to get the most out of the language it is important to be familiar with what Ruby has borrowed from Smalltalk and functional languages.
Applications written in Ruby tend to be fast and easy to create, however TWUK does not have any real stories about how easy those applications are to maintain. Ruby’s small syntax and metaprogamming makes it a good choice for implementing DSLs and that might be a consideration in chosing Ruby for a project. Code could be very close to the domain language. That said we were not sure how much of that is good programming style by developers and how much is inherent in the language. There were comments about procedural style programming in web testing scripts and what kind of code someone unfamiliar with the language would create without guidance.
Actions stemming from the meeting were to start compiling a list of Gems that people have used in anger on projects and recording opinions on them. This has been started at the Ruby Tuesday wiki.