Re-evaluating my editor of choice (first post in series)

Lately, largely in response to exposure to some refactoring and programming style books, programming videos, and recent experiences at a code retreat, I’ve been beginning to reconsider my editor of choice.

For those who don’t know me personally, I am a strong fan of Emacs. I’ve put in the time and have gotten over the learning curve, and basically any system I do development on, whether Windows or Linux, I will install Emacs on it without fail. I basically do whatever I can to avoid using any other editor as I’m very familiar with Emacs, know how to customize it well, know how to extend it, and know how to use it very effectively. (e.g. macros, navigation shortcuts, goal column, multiple windows connected via emacs server, remote editing via SSH, etc.)

However, my use of Emacs in my particular developer bubble has me set aside as “the Emacs guy”. Most of my coworkers use PyCharm or gvim. I know a few other Emacs users personally, but they are generally not power users. And at code retreats in a Windows-heavy company? While it’s marginally better than vim for novices (in my opinion), it’s generally just better to fire up Notepad++ when I pair program with random developers I don’t know.

Also, as much as many of us emacs/vim people may tend to frown on IDEs, effective use of IDEs can improve productivity. This feels especially true when it comes to IDEs that offer refactoring tools. Granted, I know how to use grep, sed, and (limited) awk well enough to be very effective at e.g. renaming things throughout a project, IDEs with refactoring tools can make this simpler and make other less trivial refactorings easy as well.

So, putting this all together: I’m taking some time to take a serious look at whether I should continue being a die-hard Emacs user, or whether I should adopt a different editor or IDE for the purpose of refactoring tools and to ease working with other developers. Because at the end of the day, I’m old enough that I don’t really care about “geek cred” involved with my choice of editor, but rather care to have a good general purpose editor which works well for my use cases. If that’s still Emacs, great, but if something else appears to be “better”, I should switch.

In this post, I won’t go into detail on different editors yet. But rather, I want to list the criteria I will use for judging editors/IDEs, and my current short list for the editors/IDEs I plan to evaluate.

Without further ado, here is my criteria. (If I change it in future posts, I will re-print the list with updates in those posts.)

  • Must have:
    • Syntax highlighting and/or editing mode for: C, C++, Python, HTML, JavaScript, CSS
    • Refactoring tools
    • Able to effectively edit files using only the keyboard
    • Keyboard macros
    • Free or low cost for personal use
    • Fully functional on both Windows and Linux (without needing Wine)
  • Nice to have:
    • Free for both personal and commercial use
    • Commonly used actions follow generally-accepted conventions for keyboard shortcuts, e.g. Ctrl-X for cut, Ctrl-V for paste, Ctrl-Z for undo, etc.
    • Multiple language syntax highlighting in the same file (for HTML/CSS/JavaScript)
    • Syntax highlighting and/or editing mode for Erlang
    • Auto-completion
    • Extensibility (via plugins or scripting)
    • Usable via Linux console session or SSH shell
    • Able to edit remote files (e.g. via SSH)

And here is my current short list of editors:

  • Emacs
  • vim/gvim
  • PyCharm (Community Edition)
  • Eclipse
  • NetBeans
  • Visual Studio Code

I’ll be honest: I am biased towards Emacs. But in the interest of better face-to-face collaboration with other developers, and out of desire to not merely follow the Cult of Emacs, I intend to give the other editors/IDEs a fair chance, and hopefully those reading this series may get some useful information out of this.

One thought on “Re-evaluating my editor of choice (first post in series)

Leave a Reply

Your email address will not be published. Required fields are marked *