Rails on Maui

Programming in Paradise

Why RubyMine?

In 2013, I started to consulting to JetBrains as the RubyMine Technical Evangelist. That is not why I use RubyMine. To the contrary, JetBrains picked me for this role due to my passion for sharing my productivity tips with RubyMine in this article: Favorite RubyMine Tips, as well as for providing product feedback (RubyMine bug & feature requests). While they may provide some financial support for my writings, I personally guarantee that any RubyMine tips provided here come from my heart and they have one purpose: to make you a more productive developer. As you can see below, I’m not going to sugarcoat any shortcomings of RubyMine.

Why Do I Use RubyMine?

RubyMine is the only editor I personally use for Rails development. Why?

  1. IntelliJ Idea. If you know IntelliJ Idea for Java or other JetBrains tools, they share lots of useful core functionality.
  2. Visuals. I’m a power Emacs user, and the visual presentation of RubyMine of both code and especially diffs is far above what I can do in Emacs.
  3. Key bindings. Whether you like Vim or Emacs key bindings, RubyMine has you covered.
  4. The tips I’ve published at Ruby Mine Tips and Favorite RubyMine Tips conveys my passion for many features of the RubyMine product.

Considerations for You

  1. Tried it recently? If you haven’t tried RubyMine in the last couple of years, you may consider giving it another try. I started using RubyMine in 2011, and by 2012, I saw some huge improvements in the stability of the product. In 2014, it’s very stable. I use the EAP (aka beta) versions as soon as they appear for my client work.
  2. Use good hardware. Don’t use RubyMine if you have limited hardware. I run RubyMine on a 2013 MacBook Pro Retina with 16gb of RAM and a SSD, and it works great on that setup. Yes, RubyMine will suck up more CPU and RAM than simple editors. If you can get your hands on sufficient hardware, by all means try RubyMine! And if you did not like RubyMine on your older hardware, but you’ve since upgraded, give RubyMine a try again.
  3. Don’t use some features of RubyMine. While RubyMine is excellent in many areas, certain areas of RubyMine are limited due to the fact that Ruby and Javascript/CoffeeScript are interpreted and dynamically typed rather than compiled and statically typed. So I rarely depend on RubyMine’s “code insight” to auto-complete method names. When refactoring, be careful and examine the suggested changes. In IntelliJ Idea for Java, I could refactor mercilessly and just depended on compilation to verify refactorings.
  4. Use Find and Replace in Path all the time, rather than depending on code insight, or navigating the project. RubyMine does an amazing job of indexing, so Find is super fast. Get really good at understanding all the options of the Find in Path dialog, and especially take the time to learn how to use regexps for both Find and Replace. Pro tip: the regexp find and replace within a file is great for practicing.
  5. Goto Declaration works well, but you are often given a list of choices, so it requires a bit of manual intervention unless the name is highly unique. If you are given a list of matches, start typing some text identifying the place of interest. Gem names and subdirectories in your project work well for this purpose. Similarly, Show References is useful and mostly accurate.
  6. Adjust RubyMine’s default settings by turning off auto-popups. This is critical if you use IdeaVim for Vim bindings, as the popup will tend to capture the escape key, rather than the escape being used for Vim.
    1. Turn off auto-completion pop-ups, and try to use auto-completion only when it’s likely to work, which is:
      1. Static class methods.
      2. Longish method and variable names.
    2. What applies to auto-completion also applies to documentation.

Recommendation

If you’ve got a reasonably fast machine, give RubyMine a try (free 30-day trial), and go gently on your expectations for it’s “code insight” to work as well as it does for statically typed, compiled languages. There’s so much other awesomeness!