Utility Belt

Utility Belt is a grab-bag of IRB extensions to make your Ruby REPLing easier.

It’s worth the install just for the edit command, which allows you to shell out to your favorite editor in order to edit more complex input.  But there’s a lot of other good stuff there too.

Virtuous Language Design

Eric.weblog() reminded me of an excellent interview with Anders Hejlsberg on generics in C#, Java, and C++. Anders is the kind of person you want in charge of designing a language. In the interview he demonstrates a deep knowledge of the how competing languages implement generics, and the implications of those design decisions. While he is obviously biased towards his own choices, his biases are clearly based in a solid understanding of the alternatives. Matz, the creator of the Ruby language, has a similar grounding; in his communications on the Ruby mailing list he demonstrates an almost encyclopedic knowledge of other programming languages past and present. This contrasts starkly with the attitude I have occasionally seen from certain other language camps (“I don’t know how the other guys do it, but it can’t be better than our way…”).

Eric‘s entire series on moving from C# to Java is worth reading, BTW.


I played around with jQuery a little over the weekend. I’m fairly impressed. The obvious comparison is with Prototype, but I can’t really make that comparison because almost all the Prototype work I’ve done has been automatically generated by Rails. Certainly the code I hand-wrote over the weekend seems more concise and expressive than the generated Prototype code I’ve seen; but part of that may just be an artifact of being handcrafted.

I was going to post some code, but the WordPress editing interface seems to be extremely unfriendly to pasting code snippets.

Simple Design & Testing Conference 2007

I attended the Simple Design & Testing Conference over the weekend. A co-worker made me aware of it about two weeks ago, and since it was a) free; b) held at Penn State York, about 20 minutes from my house; and c) had some really smart people like Ron Jeffries on the guest list, I figured I had little excuse not to go.

The format of the conference was all Open Spaces, meaning that it was completely self-organizing conference. This worked out quite well, I thought, and despite having never done anything remotely like this in the past I felt comfortable enough to propose and host two sessions.

Highlights included:

Deliver Value on Day 2: I came in about halfway through this one, but I got a lot out of it. I heard the “Strangler Vine” metaphor for the first time, referring to the practice of gradually replacing legacy code with new code until nothing is left of the old. There were also some good points made about how frameworks like Rails can constrain your thinking. For instance, your first step on a project should not necessarily be to create the tables – or even to create the database! Instead of starting with the habitual Rails overhead, just start creating your domain objects and let data persistence be a task for day two.

Questions that drive towards simple design: The goal here was to come up with a list of questions developers ask themselves (or others) which help them to arrive at simple designs. A lot of good content here, like:

  • Ask five times “Why?”
  • What is the simplest example of doing this sort of thing?
  • What is the most catastrophic failure that we need to plan for?

Unobtrusive Confirmation: This was a thought-provoking exploration of humane user interface paradigms. Points included making sane assumptions (but also providing an obvious way to override the assumptions); and providing a way to undo an action instead of asking “Are you sure?”. The conversation grew to encompass a lot of other interesting topics as well.

The two sessions I hosted were:

BDD/RSpec Best Practices: This wound up being more of an intro to RSpec, since most of the attendees had little or no experience with BDD or RSpec.

What are my tests telling me about my design? The idea for this session popped into my head Friday night as I was looking at the wall of proposed topics. I thought it turned out really well. We had a lot of good discussion, and came up with a list of potential test smells that might indicate that there is something sub-optimal about the design. I might write more about the points that emerged when I get a chance. For now, you can see the list we made at the above-linked page.

The conversations were stimulating, I met a bunch of great folks, and the (free!) food was great. All in all it was a fun and productive way to spend a weekend, and I hope I’m able to attend next year’s conference in Chicago.