I’ve been programming in Ruby for a long time—since 2002 or so, I think—and I’ve been doing it professionally for six or seven years. And I’ve enjoyed it, mostly. More recently, though, I’ve lost some of that joy, and I’ve been trying to work out why.
Maybe it’s Rails, and the fact that almost all the Ruby programming jobs these days seem to be website programming. It seems churlish to complain about something that’s kept me employed for seven years, but, well, perhaps I am. There can be interesting problems on the web, but much—maybe most—back end website development consists of little more than gluing together third-party libraries into database-backed sites with schemata of varying complexity. The bulk of the work then becomes debugging the interaction between these (frequently somewhat sketchy) components, building out the convoluted business rules, and translating what has been promised into what can be made within the constraints of time, budget, sanity, politics, and the detritus left by previous design decisions—decisions which may even have been sensible at the time. These external pressures sometimes mean that things that could feasibly be simple end up baroquely complicated, but that doesn’t necessarily make them intellectually stimulating.
Maybe it’s the change in the Ruby community, and the fact that I no longer feel as closely involved. In 2004, I was in daily contact on IRC with many of the most significant developers in the anglophone Ruby world. This was a diverse bunch, drawn from many directions, most of whom were more familiar with other languages than with Ruby. Today, it feels as if many people come straight to Ruby (or, perhaps, from places like PHP that have less to teach the software world). I don’t perceive as much of an influx of concepts from outside into Ruby. In fact, many of the interesting ideas seem to be travelling in the opposite direction.
Maybe it’s the slightly Fascist devotion to progress and beauty of the Ruby community. It’s a world that’s increasingly exclusively Apple, a monoculture that’s proving to be almost as oppressive as the Windows-only one that it supplanted (and which still lives on in wider society). The drive towards the latest version and the shiniest thing is almost pathological: the way you were doing things last week is now deprecated; the way you did it last month is now wrong. (In Ruby Land, I’m out of grace: I’m using the ‘wrong’ shell, tcsh; the current ‘correct’ way is to obtain specific Ruby versions via RVM, which only works with bash or zsh. Asking me to change my entire user environment is, I feel, a little much.)
In some ways, it feels like being a member of a young cult, full of devout believers following a fickle prophet. On the surface, this relentless progress is a good thing: the pace of evolution is fast. However, it’s often not so much evolution as outright replacement by one shinier thing after another, with little respect accorded to backward compatibility. In this environment, it’s difficult and time-consuming to assemble a working suite of components. I accord some blame to the overly-flexible—by which, I mean utterly mental—version-specification capabilities of RubyGems, which tend to encourage API breakage between versions. Bundler helps a lot, but it wouldn’t be needed in a saner world. (And yes, Perl’s CPAN is worse, but that’s not much of a bar to set!)
Maybe it’s the lack of consistency that comes with agency work, as opposed to developing a product over a long haul. With more, smaller jobs, the overhead of setting things up takes a larger proportion of total time. The cognitive load of switching is greater. Trying to pick up a large project after months away is hard; if others have worked on it in the meantime, it’s almost the same as coming to it with zero knowledge.
Maybe it’s just the difference between working on something I own (in a broad sense of the word), and something I don’t.
So what do I do? I still find programming fun, but, increasingly, that’s only when I work on projects in other languages. I’m not sure whether that’s because I’m working in a different language and environment, or whether it’s because I’m using these languages to achieve more interesting goals.
Have I fallen out of love with Ruby, or web development? Is it just me? And what should I do about it?