*deep breath*

I use an IDE.

There, I said it.

Lots of people in the Ruby community look down on IDEs, and instead extol their carefully-curated library of vim plugins.

I’m not one of them.

I use vim every day - for config files, study notes, quick fixes on a remote server - but I don’t prefer it as a primary coding environment.

After all, its user interface was designed before I finished elementary school. We can do better now.

I did most of my work in vim for the six years that I worked in Perl, and was always shelling out or switching windows when I needed to do anything but edit code. When I left Perl for Java and PHP, I did my work in Eclipse and NetBeans, and found it much more enjoyable to have everything in front of me, configured by tool vendors who were constantly striving to make the interface better and the plugins more capable.

For my first two years with Ruby I used Netbeans 6, later 7. Sun (later Oracle) provided a plugin with fairly good Ruby support - it would flag syntax errors, provide rudimentary lookup of methods, and would let me run tests right there in the browser - no control-Z or alt-tab required.

Even after Oracle walked away from Ruby support, a community of volunteers still maintained the plugin, and it was good enough.

But then I began having enough Ruby projects that I needed to maintain separate gemsets for them. Enter RVM, the Ruby Version Manager. And here, Netbeans fell flat… while one could configure multiple Ruby interpreters, there was no apparent way to rename them - in the pick-lists they’d all just show up as the bare version string (ie, “ruby-1.9.3-p374”) without any clue as to which project’s gemset it was.

The HAML plugin, too, was a bit crufty; unmaintained (it had been two or three years since the last update), it choked on some of the perfectly legal syntax I used - not only would it display an error marker at that location, but it would display an error condition all the way to the end of the file, wavy red lines under all the text and big red flags in the margins.

(By no means am I slagging the volunteers who maintained these plugins in the absence of commercial support! I thank them for providing a tool that served me well for two years.)

These issues, and my lukewarm enthusiasm for Oracle as a company, prompted me to look for an alternative, which I found in JetBrains RubyMine.

RubyMine groks Rubyists.

RubyMine was a joy to use from the very first hour. Rather than being an afterthought, Ruby support - with optimizations for Rails - was at the core of its design. RubyMine’s integration with RVM is perfect and effortless - it picked up on my RVM configuration for each project without having to be manually configured. Its method lookups, too, are top-notch - while Netbeans could generally provide autocompletion on methods in the same file or in an ancestor class, RubyMine is superb at guessing at the classes of other objects and autocompleting their method names and parameter lists. Not only does it see the methods and classes in my own project, but it’s capable of going into gems - using that superb RVM integration, it knows where to look - and lets me immediately and effortlessly jump to the source of third-party modules.

RubyMine’s maintainers also understand the mores of the Ruby and Rails communities - they understand how we work and have anticipated what tools are likely to be used. Touch your Gemfile, and RM will offer to install the new gems for you. Add a file, it’ll add it to git. HAML syntax highlighting is accurate and works right away - no third-party plugins to hunt down - and Rspec support is fantastic, with a test runner that lets one interact with an individual test (rather than simply capturing the output of a shell command and presenting it as a big block of text). Want coffeescript? It knows that syntax too.

It groks us.

grok means to understand so thoroughly that the observer becomes a part of the observed—to merge, blend, intermarry, lose identity in group experience. It means almost everything that we mean by religion, philosophy, and science—and it means as little to us (because of our Earthling assumptions) as color means to a blind man. (from Stranger in a Strange Land)

For the first time using a dynamic language, I had the sort of editor support that had made Java tolerable. I ended up paying for RubyMine only about a week into the 30-day evaluation period.

Now, I’m no gushing fanboy - I accept that RubyMine has its faults. Setting up spring was a pain (more on this later), and often it’s such a CPU hog that I can hear the fan spinning higher to shed that heat. And, of course, being a GUI application, you really have to run it locally. These are minor quibbles; for daily use, RubyMine is the most effortlessly usable Ruby editor around.