The top ten list of productivity boosters for programmers

A very, very useful question came up on stackoverflow a couple of weeks ago:

"As a programmer what single discovery has given you the greatest boost in productivity?"

We were happy to find that many of the top ranking answers matched features in Komodo or mention practices that work well with Komodo. In other words, we've focused on the right things and, over time, made it into something that's useful to a lot of people.

Let's have a look at some of the answers. I've flipped the top ten list upside-down, because everyone seems to do that with top ten lists.

10. Debuggers

I hit this one just yesterday trying to make sense of a big Python dictionary containing lots of nested objects.

I don't think I could have puzzled out where to grab the values I was looking for by reading the print output on the right. Maybe I could have but... why?

9. Learn another language

For me it was Ruby. I still consider myself a non-programmer, but I have had to pick up some of the basics of the languages ActiveState distributes (Perl, Python and Tcl). For a long time I was stumped on some basic programming concepts (passing input to a function, using classes, very basic recursion) which I couldn't seem to get past in Perl or Python. Starting fresh, and following along with _why's cartoon foxes got those concepts through my skull, and I was then able to figure them out in the other languages.

The fact that I could work with all these languages in Komodo made it easier. It's hard enough to learn a new language, never mind learning how to use a new editor.

8. Dual Monitors

Absolutely, but why stop at two? I recently started using Synergy so I could switch between Linux and Mac OS X during testing. Sometimes I have a Windows virtual machine on my right screen, Linux in the middle, and OS X on the left - all running Komodo. An operating system triptych if you will.

In more typical (and sane) multi-head configurations on a single operating system, you can spawn multiple Komodo windows (and move files between them) to take advantage of some of that extra screen real estate while coding or debugging.

7. Programming languages with managed memory

I'm assuming that what people are talking about here is mainly garbage collection. With dynamic languages this kind of memory management happens behind the scenes, so you don't have to take out the trash yourself.

6. Caffeine

Komodo will not make you a coffee. You'll have to write your own macro for this.

5. "VIM!!! Nuff said!"

Back in the Komodo 3.5 days, I was asked to start working in Komodo exclusively so I'd be "eating our own dog food". I completely agreed in principle, but when it actually came to switching from my beloved Vim to Komodo, which didn't yet have Vi emulation, I was horrified by how much of a hit I took in editing speed.

Over the previous few years, my fingers had learned Vi modal habits because that's the editor I first took the time to really learn. Vi modal editing, once you've passed the initial WTF barrier, is extremely ergonomically efficient. Bill Joy designed an editor "optimized so that you could edit and feel productive when it was painting slower than you could think". Most of us are not dealing with 1200 baud connections to mainframes anymore, but somehow many of these shortcuts are still incredibly useful.

I had to wait till version 4 to get Vi emulation in Komodo (for which I am eternally grateful to Todd Whiteman), and now my fingers are happy again.

4. Google

Absolutely. Googling "ruby iterate over hash" is a lot quicker than looking up the relevant section in one of those big books on your shelf. In Komodo there are a couple of nice shortcuts to the hive mind. "Ctrl+F1" gives you "Alternate Help on Selection" which is a (configurable) Google search on the highlighted word.

3. Flow

The word means different things to different people, but the answer from mrbd seems to be about minimizing distractions (basically "GBTW"). That's totally valid, but a good IDE can help a developer stay in the flow by not getting in the way, and by providing a lot of commonly used tools within the editing interface. Find/Replace, Go to File (Fast Open), and Run Commands are nice examples. You can do all of these things in a shell, but it's less disruptive if you don't have to.

2. Syntax highlighting

This is a requirement for any modern editor, so it's nothing to really brag about. However, Komodo has syntax highlighting support for a lot of languages, and it supports multi-language documents (e.g. web templating formats). You can also add additional languages using UDL.

1. Code Completion

Code completion (aka IntelliSense or autocomplete) is the top of the list, or would be if I hadn't flipped it upside-down. As a neophyte programmer who has to poke around in several languages that I'm only barely familiar with, this (along with calltips) is a huge help to me.

Komodo auto completion

Did we miss anything?

So, what has given you the greatest boost in productivity? The stackoverflow question currently has 184 answers. Many of those that didn't make the top 10 are also excellent (unit tests, tab completion, peer review, ...). We'd like to hear what you think.