Losing its lustre

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?


  1. Simon Tokumine

    Wrote at 2010-10-07 01:42 UTC using iPhone on Mac OS X:

    Great post Paul. I share many of your feelings on this. In my case I certainly find exclusively developing projects that are not my own rapidly leads to this nagging feeling that I’m wasting my time. All too often non-personal projects put limitations on development that seem bizarre at best, and it often takes a good dose of 100% personal project (and accountability) thinking to set me right again. Perhaps I’m growing older, but increasingly I’m preferring my personal projects, and have been working to make sure they generate enough income for me to focus exclusively on them.

    I’ve found that developing in other languages and non web areas, in my case GIS, also helps maintain interest, but despite this the same issues with ownership and genuine personal interest in the subject matter return. I guess once we become moderately proficient in our tools this is fairly inevitable, and our options are either get a job with a company making products heavily in alignment with our own personal interests or strike out on our own, or with friends.

    Good luck!
  2. David Salgado

    Wrote at 2010-10-07 11:08 UTC using Chrome 6.0.472.63 on Mac OS X:

    Great post, Paul.

    I sort of have the opposite problem. I’ve been working 100% on a single project/product of my own for the past 2 years (and doing it part-time for a couple of years before that). So I sometimes feel that, by not doing agency work on new projects, I’m missing opportunities to play with new shiny things!

    On balance though, I wouldn’t give up working on my own product for anything. Any stupid design/business decisions are mine, mine I tell you!

  3. James Adam

    Wrote at 2010-10-07 20:36 UTC using Safari 6533.18.5 on Mac OS X:

    I just came across this, and thought of your post: http://kottke.org/10/10/for-some-people-work-is-personal
  4. Wayne E. Seguin

    Wrote at 2010-10-08 05:24 UTC using Chrome 5.0.375.127 on Mac OS X:


    I apologize for you not having a good experience with RVM. tcsh is a TODO however I have no knowledge of *csh shells currently and very little time to invest in learning their nuances at the moment (I’d like to actually, to broaden my knowledge). Darcy and I have refactored the internals of RVM so that you should still be able to gain most of the benefits of RVM in *csh shells if you do a tiny bit of leg work. I would be happy to assist you by supplying any and all information about the internals of RVM if you will bring the tcsh knowledge to the table.

    Additionally if you help make that happen we will add your changes to RVM so that we can ‘support’ (to whatever extend tcsh will allow) the tcsh shell ‘out of the box’.

  5. Wayne E. Seguin

    Wrote at 2010-10-08 05:25 UTC using Chrome 5.0.375.127 on Mac OS X:

    In that last post the bold was supposed to only be on “at the moment” :)
  6. Paul Battley

    Wrote at 2010-10-08 10:18 UTC using Chrome 7.0.542.0 on Linux:

    Wayne: I’ve taken the liberty of fixing the markup in your comment. It’s not so much that I’ve had a bad experience with RVM, as that I haven’t been able to use it!

    I suppose that the parts that actually need to be shell-specific are fairly limited (setting aliases and the path?), but I’m not really sure where to get started with the codebase.
  7. Adrian Short

    Wrote at 2010-10-08 20:31 UTC using Chrome 6.0.472.63 on Mac OS X:

    I wouldn’t force it. You’ve spent a long time working on very similar projects and it sounds like it’s time for a rest, a change, or both. If you want to keep your creative mojo you really need to branch out, perhaps not just to other areas of the web or other areas of computing but other areas of design. The web will still be there if or when you decide to come back.

    Ruby is a lovely language and Rails gave the web development business a much-needed kick up the backside but I don’t find the Rails community much fun. It takes itself far too seriously.

    The world is full of really hardcore problems I’m sure you’ll enjoy applying yourself to. You just need to find the ones that suit you right now.
  8. Elise

    Wrote at 2010-11-03 12:37 UTC using Chrome 7.0.517.41 on Mac OS X:

    I have the same experience, and I haven’t even been in Ruby as long as you.

    I’ve been playing with other languages, and it felt like a breath of fresh air.
    I’m also more partial to Linux, while it feels like half of the community has sworn allegiance to Apple. Herd mentality, which might be a sign that fresh and original thinkers have moved away. Paradoxically, the herd mentality seems to be linked to a blind rush into anything that’s new.

    For myself, I ‘m thinking about developing own products (maybe in combination with client work), and I’ll probably plan at least part of the development in other languages.
  9. chetstone

    Wrote at 2011-03-21 17:45 UTC using Safari 531.22.7 on Mac OS X:

    Regarding tcsh and rvm, there’s an easy workaround.

    Invoke bash just to set up your ruby environment with rvm and gem,
    then invoke tcsh, creating a new shell that inherits the ruby environment.
    You can then do everything in tcsh except change the ruby environment.

    You will have an rvm command in your path, but it won’t work right. To change the environment, drop into bash again by typing “bash” or “exit”,
    do your rvm-ing and gemming, then type tcsh to go back into your favorite shell. You’ll lose your shell history, but doesn’t tcsh have commands to save and restore history from a file? You can probably come up with aliases to make this all work pretty painlessly.