The Evolution of the Editor

I program a lot. A lot. For me, a good editor for code is an essential part of my computing toolkit. It has to be fast, understand my primary languages C, Python, and Java, and have a set of features that let me be a more productive programmer such as autocompletion and documentation lookup.

For a long time, I used various IDEs that were designed to provide exactly that. I used NetBeans for most of my editing all through my Freshman and half of my Sophomore years in college. After that, I used Eclipse. My issues with both of these environments were the same: a lack of easy extensibility. I want my editor to be able to integrate well with all of my tools.

For example, both of the IDEs mentioned above were aimed primarily at Java developers and while they have extensions to enable editing Python and C, they're frequently not very good. PyDev for Eclipse never seemed to work well for me, and using such a heavyweight editor for writing small, light Python seemed like overkill.

That said, they definitely have some nice features: project management, integrated code browsing, GUI designers, mouseover autocomplete and documentation, automatic generation of build rules, and run/compile support all come to mind. It would be nice if I could have an editor that worked faster and still provided a lot of these features. I decided it was time to go searching for a solution.


The solution that I came to was Emacs. Emacs has extensibility at its heart and soul; for anything that you might want to do, Emacs probably has something written that you can use right out of the box. This focus on extensibility is what drew me to it over vi; while it might be a more bloated editor, it hardly matters on my quad-core 8GB development machine. It boots ages faster than Eclipse and is more stable; and with my additions (made easy by the availability of packages and the easy .emacs file), it supports most of the features that I used in Eclipse.

My Emacs setup is currently heavily Python-oriented, as I was working on a Python program at Google when I switched. It includes autocompletion, semantic parsing, project management and refactoring, code browsing, syntax highlighting, and all of the usual Emacs goodies. I've tried to keep the number of elisp packages installed through the package manager on Ubuntu to the minimum so that I can keep all of my important extensions in one place. This lets me put the entire directory under version control and replicate my setup across machines easily. I've even put the git repository on GitHub if you're interested!

So far, I've integrated YASnippet, the Emacs Code Browser, PyLookup, Rope, Pymacs, auto-complete, ido, linum, and CEDET into a full-featured editing environment. It's working really well for me so far, and I would highly recommend considering Emacs if you're looking for something lighter-weight than Eclipse.