Moving on to RubyMine

A few months ago at my last job, I was introduced to a senior programmer who had just started using Ruby. Since this was his first gig in Ruby, and he used to work with .Net projects before this, he wasn’t comfortable with the Ruby command-line way of programming (Edit program in text editor, then switch to the commandline or PRY (Or your favourite REPL) to test/run/debug the code). He was used to using an IDE.

So he started looking at the alternative text editors that the rest of the team used, and cycled through Sublime text, Atom, Vim, etc. He eventually settled on RubyMine, by JetBrains. I wasn’t paying a lot of attention at first, since I was already used to being the only Emacs user at work, but I’m always interested in using better tools for my craft, and if a senior programmer is doing a search, I figure there is something for me to learn from him.

I cycled through the editors with him, and tried to get up to speed with the different IDEs for Ruby; Eclipse, Aptana, and RubyMine. It was all Greek to me. I simply couldn’t understand how there were so many buttons everywhere and I still couldn’t make it just run the program that I wanted it to run. I figured the ‘Edit Configuration’ menu was important, but no amount of Googling helped me figure it out. I spent over 20 hours on it over 2 weeks and weekends. And then gave up, going back to the Emacs that I knew.

The senior programmer finally got RubyMine working on his system and I took an hour out of one day to shadow him and see his workflow. And it completely blew my mind when he started running tests in ‘Debug Mode’ and would just click breakpoints into existence and poke around the running system. This is a pretty big efficiency hack from me typing out ‘binding.pry’ in the code, then running the program (or the test) and then poking around. And if I put the ‘binding.pry’ in the wrong place I would have to move or copy it to the right place and restart the program. He would just jump amongst the stack frames. Freaking awesome.

I accept its not much of an efficiency boost, but its something. And given that a lot of time can go into debugging software, this is one of the high impact boosts since its a small boost in a process that occurs very often. This is basic performance profiling, essentially. Except this time its about my performance instead of my program’s.

I set up a new RubyMine installation, and got cracking on it. It was nice, and after two weeks of it actually working properly on my system, I purchased a license.

But is it really what I want?

At my new job, I got Emacs running on the workstation right away since I didn’t want to waste any time with a new development tool while I still had to get up to speed on a whole new project. Once I got slightly comfortable, I installed RubyMine and discovered that that increased my speed of code-navigation. Its nice that RubyMine automatically indexes the project and so I can jump to declarations (Note: I’ve seen my coworkers do this in Atom) of objects or find the usages of objects very quickly.

But I still felt bad that I was leaving Emacs, and for the next 2 months I would keep switching back to Emacs to install yet another plugin that would make the editor more project-aware. One that worked great for me was Projectile. Its a great Emacs plugin and I highly recommend it. But at the end of the day, I would find that I was getting more things done when working in RubyMine than in Emacs. Everytime I would switch back to RubyMine it felt like a weight was coming off my shoulders. I simply felt better.

I now run RubyMine exclusively on my Ruby projects. I am a convert. I like IDEs.

I’ve used the refactoring tools very often, the debugger more often, and the built-in code-navigation tools most often of all. I like that JetBrains has Emacs keybindings as a keymap option built right into the system. Thats a need-to-have feature for me, and I would never even have given RubyMine a shot if I had to work with a whole new set of keybindings.

I have been poking around Scala for a little while recently. Nowhere close to as much as I would like since I’ve been spending all of the last 3 months getting up to speed at the new workplace. This is the first time I’ve really used an IDE, and I like it very much. Given that Scala is a statically typed language, an IDE can be used for even greater leverage upon the language. I’m looking forward to getting back to playing with Scala.

What about the license?

The main issue I had with switching on to RubyMine was that it was closed-source. I don’t want to get tied in to a vendor. That would suck. But after some thought on the matter I decided it wasn’t a big enough deal. The code that I create with the IDEs are still in plain text. If JetBrains ever goes under or at some point I don’t like their price-charged-to-value-provided ratio, I can always just switch to another system (Like Emacs!) and keep editing the program files.

This is also the first time that I’m even purchasing software. I don’t count the forced purchase of Windows OS when I bought my laptop. It felt good to pay for a product that I’ve tried for a little while and I very much see the value that it adds to my performance. And it feels good to pay for the upkeep of the tool. While I donate to the GNU and Tor projects, by purchasing a product like RubyMine I also pay for a dedicated support team.

But lets get back to the license and the longevity of the tool. One could argue that I should just use Eclipse, and support that IDE with my usage, my contribution as a documenter, and my monetary donations. Thats a fair point. I tried Eclipse, and it was confusing for me. Now that I have some understanding of how an IDE is supposed to work, I have little doubt that it’ll be easier for me to get up to speed on Eclipse. However, dedicated professional support is a difficult thing to beat.

And finally, there is the origin story of Git. The Linux kernel was built on the Bitkeeper version control software, which was proprietary. Eventually, shit hit the fan and the result was that Git was made in a few months by the open-source community to take up the slack, and its been doing great since then. Given that the output of the JetBrains’ IDEs are standard source files in their respective languages, I have no doubt that if something does go south, we’ll all be just fine. Yes, there will be a productivity cost when migrating to another tool. No, I’m not concerned about it. The core of IntelliJ IDEA is free software under the Apache License.

I am a-ok with paying money for a souped up version of free software when the people I’m paying are also improving the free-software version of the program. Good for them. Please take my money.

Leave a Reply