After watching two fantastic [PDC](http://channel9.msdn.com/pdc2008/) videos, [Deep Dive: Dynamic Languages in Microsoft .NET](http://channel9.msdn.com/pdc2008/TL10/) and [IronRuby: The Right Language for the Right Job](http://channel9.msdn.com/pdc2008/TL44/), I started doing some serious thinking about dynamic languages and .NET. At work (where we use VB.Net), we tend to throw around several different data types that are essentially duck-typed: objects with key/value collections that if it has a certain set of keys, it’s of type A and if it has another set of keys, it’s of type B.
What would happen if we combined these objects with the capabilities of a dynamic language?
I have no idea. With the exception of Objective-C, I don’t have much experience with dynamic languages. And Objective-C, sitting on top of C like it does, is hardly a candidate for running on the [DLR](http://en.wikipedia.org/wiki/Dynamic_Language_Runtime). And it’s hardly as expressive as something like Python or Ruby, which are conveniently the first languages available on the DLR.
So before I could start experimenting with our stuff and dynamic languages, I had to actually learn a dynamic language. I picked ruby, mostly by coin flip. I’m not starting with IronRuby right away. I find I’m always happier when I can manage complexity and it seemed that adding a not-quite-finished runtime to the mix could cause me trouble that I wouldn’t be prepared to fix. So I installed the “official” Ruby package for Windows and got to work.
I started out by implementing [Conway’s Game of Life](http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) in Ruby. Over the course of an afternoon, I was able to whittle it down to 91 lines by swapping out the procedural statements I’d written for more Ruby-ish idioms. The Game of Life has such a simple set of requirements (there are just four basic rules) that I didn’t have to think about what the program had to actually do and could instead concentrate on the language I was writing it in. I think this is going to be my go-to first project when learning a new language from now on.
After that, I started implementing the first few [Project Euler](http://projecteuler.net/) problems (the first one is doable with just one line of ruby). It didn’t take long for the math to get hard enough that I was no longer concentrating on the language, though. So I stopped pretty soon into the problem set.
I’m not really sure what I’m going to do next. Possibly something like Tetris, but it’s all up in the air. But even with this limited exposure to the language, I’m starting to look at the code I’m writing day-to-day and saying “How would this be easier in Ruby?”. I think that’s pretty valuable and so far, I’m quite pleased with the language and want to get to know it better.