Friday, April 16, 2010

Unproductive developer habits

Updated: May 13, 2010

Ever since I switched from Java to Ruby and Windows to Mac, leaving away the powerful IDE support I had in Java (Eclipse) and the mnemonic shortcut support I had in Windows, I have been dissatisfied with the level of flow I have while writing code.

With Eclipse on Windows, I had the option of soaring mouse-less, not wasting an ounce of brain power on the interruption of switching to the command line, taking my hand off the keyboard to control the mouse, or typing many characters to open a file when I could have done a quick project search with autocomplete and opened it in a breeze.

Unfortunately that is not the case on the Mac (no mnemonics) and many of the Ruby IDEs/Editors are unstable, require too much typing to perform common shortcuts, or simply miss many of the powerful navigation features I once had in Eclipse.

What disheartens me the most though is that a lot of developers that I meet have incredibly unproductive habits and they are quite oblivious to them. Here are some examples:
  • They use the mouse to do almost everything, including saving the file via a click on File and then Save (use the toolbar button at least!)
  • They have the mouse trackpad set to very slow making it further unproductive to use the mouse
  • Not knowing how to navigate or highlight with the arrow keys on the keyboard
  • Typing with two fingers only while looking at the keyboard
  • Navigating the folder structure with the mouse to open a file when they could have typed a few letters and relied on autocomplete to find it instantaneously
  • Not knowing about the jump to file shortcut for opening a highlighted class or method instantly
  • Switching tabs with the mouse instead of knowing the keyboard shortcut (CTRL+PGDN on Windows)
  • Doing find and replace with reliance on the mouse instead of a quick replace or replace all shortcut
  • Not knowing about alt mnemonics in Windows and Linux (Macs suck for not having that feature) and thus using the mouse for a lot of tasks that could have been performed with a few keyboard strokes
  • Moving files by typing extremely long commands on the command line to move a file when they could have benefited positively from the mouse for once to do quicker drag and drop
And these are just a few that I could think of right now.

Yes, I've tried the Eclipse Ruby plugin, Aptana RadRails, Sun NetBeans, and IntelliJ RubyMine. Each has its own pros and cons. None brings back the holy grail days of mouse-less Java development with Eclipse.

And, I am not talking about the loss of features that are achievable only with static typing. I am fine without those.What I am missing is just interruption-free navigation with the keyboard with as few strokes as possible.

What then? Write my own Ruby editor for the Mac? Write my own plugins for VIM? Both ideas seem worthy of consideration.

Further Comments (May 13, 2010):

Some people I talked to tried to simplify the interpretation of this blog post into blaming Ruby dynamic typing for not being productive (not true), IDEs for being bloated and making you use the mouse (not always true), or even the Mac not being shortcut friendly (not fully true either).

I would like to clarify that like any real situation no one thing is the sole factor to blame and none of it is black and white. This is about a combination of a lacking shortcut support in some editors/IDEs, lack of mnemonic support on the Mac (though compensating with great shell support), and lack of care about the situation by a lot of developers who are content to continue use the mouse or use inefficient shortcuts that require many keystrokes.

Also, I would like to clarify that despite all of this, I find myself much more productive in Ruby given how much less code I write (compensating for less productivity with certain things like massive refactorings). That was one of the biggest paradoxes that I encountered after I was half a dozen months down the road of programming in Ruby, which prevented me from switching back to Java. Of course, that is only given the fact that I am ruthless with test-driven development whether in Java or Ruby.

p.s. here is a blog post on useful Eclipse shortcuts for the curious:


Michel Rasschaert said...

Textmate is quite popular in the Ruby (Rails) community on Mac.

It is very customisable and you won't need your mouse :)

AlBlue said...

Macs do have shortcuts - though sometimes they don't show in the menus as underlined chars. You can set up preferences in the keyboard shortcuts for common operations (e.g. selecting menu bar) and you can navigate dialog buttons with tabs and spaces if you set the checkbox for full control.

AlBlue said...

E.g. Ctrl+F2 to select menu etc

Anonymous said...

Return to Java ;-)

Jacek Pospychala said...

funny :-)
I wonder if there's any research answering how much less productive you are when using mouse instead of keyboard...
Cashier yes, but programmer? huh...

Adam Walters said...

I have always tried to keep mouse usage to an absolute minimum. here are a few things that help me

1) Vim...plugins like Rails.vim combined with FuzzyFinder (or now i'm trying PeepOpen) allow me to navigate quicker and more accurately than TextMate.

2) A solid application launcher. I used to use Quicksilver, but now use LaunchBar. I'm able to do many things beyond application launching: File system navigation w/ HJKL (vim style) keystrokes, search local ruby and rails rdocs, search google, eject drives, the list goes on

3) Using Mac OSX help menu shortcut (SHIFT + CMD + /) From here, you can search for any command within an app and execute it (similar to the alt mnemonics). The nice thing here is it highlights it in the menu which also shows you the shortcut combination for the command. A couple apps disable or override this shortcut unfortunately (Firefox and Textmate)