Now that I've gotten through the basics of Ruby and Rails -- including arcane basics like lambda() and instance_variable_set(), and embarassing basics like unit testing, which is embarassing because I only really made it a habit last week -- I'm starting to get really interested in API design. Ultimately, as useful and trendy as Rails is, and as lovely and gentle as Ruby is, the thing that make them both most interesting to me is the question of how to design for client programmers.
If you define an API as a set of tools which make life easier for downstream programmers, the line between a language and an API is blurred. This kind of ties in to the current fashionability of DSLs -- a DSL is midway between a language and an API.
Jamis Buck blogged two excellent posts about API design, and one thing I really like about both posts, each one praises work done by other members of the Rails core team. I'm a big fan of credit where credit is due.