Best Programming Editors? A Never Ending Battle With No Clear Winner

Phillip has achieved 'Developer Select' status from Amazon, and has published 348 apps on Amazon, Google, and Nokia.

SHARE

Regardless of the apparent evidence to the contrary, programmers are humans. And, as all humans, we like taking advantage over our freedom of choice. Whether that choice is about taking the red pill or the blue pill, wearing a dress or pants, or using one development environment over another, the choice we make places us in one group of people or another. Choice, inevitably, comes after our evaluation of options. And having made a choice, we tend to believe that anyone who chooses differently made a mistake.

You can easily search the internet and find hundreds of debates about Emacs vs Vim. Even if you read them all, it will be impossible to objectively choose a winner. However, does the choice of development environment tell you anything about the quality of work a developer can deliver? Absolutely not!

A great developer could write her code into Notepad and still deliver great stuff.

Certainly, there are a lot of things professionals consider when selecting tools for their work. This is true for every profession, including software development. Quite often, however, selection is based on personal taste, not something easily tangible.

Programmers spend most of their time looking at the development environment, so it is natural that we want something pretty as well as functional. Every development environment has its pros and cons. As a whole, they a driving force of the software development industry.

What are the things a developer should evaluate when choosing a set of programming tools like a programming editor of choice? The answer to this question is not as simple as it might sound. Software development is close to an art, and there are quite few “fuzzy” factors that separate a masterpiece from an overpriced collectable.

Every programming language, be it Java, C#, PHP, Python, Ruby, JavaScript, and so on, has its own development practices related to project structure, debugging, and deploying. However, one thing they all have in common is editing code. In this article we will evaluate different development platforms from the perspective of the most common task in software development: writing code.

IDE vs General Purpose Text Editor

An integrated development environment (IDE) (or interactive development environment) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of a source code editor, build automation tools, and a debugger, and many support lots of additional plugins and extensions.

Text editors are simpler applications. Compared to IDEs, they usually correspond to just the code editor segment of an IDE. However, they are often much more than that. IDEs are created to serve the purpose of software development, while many text editors are designed to be used by non-developers as well.

Static-typed languages can get a lot of benefits from IDEs. Because of the strict typing rules, it is possible for the IDE to detect bugs and naming inconsistencies across classes and modules, and even across files, directly in the editor, before compiling. This functionality comes standard with many IDEs, and for that reason, IDEs are very popular for static-typed languages.

However, it is impossible to do the same thing for dynamically typed languages. For example, if a method name may be generated by the code itself, constructed from a series of string concats, trying to detect naming errors in dynamic languages requires nothing less than running the actual program. Because one of the major benefits of IDEs does not apply to dynamic language programmers, they have a greater tendency to stick with text editors like Sublime. As a side note, this is also a major reason why the test-driven development movement has grown up around dynamic language communities, and has not had as strong of a following in static languages.

What Makes a Great Programming Editor?

Aside from a number of different features for various languages, every programming editor needs to have a well-organized and clean user interface. Overall aesthetic appeal should not be overlooked, either. It is not just a matter of looking good, as a well-designed editor with the right choice of font and colors helps keep eyestrain down and lets you be more productive.

In today’s development environment, a steep learning curve is a liability, regardless of feature set. Time is always valuable, so a good editor should be easy to get used to. Ideally, the programmer should be able to start work immediately, without having to jump through too many hoops. A Swiss army knife is a practical and useful tool, yet anyone can master it in minutes. Likewise, for programming editors, simplicity is a virtue.

User Interface, Features, and Workflow

Let’s take a closer look at UI, different features and capabilities, and frequently used tools that should be a part of any programming editor.

Line numbers, of course, should be on by default and simple to turn on or off.

Snippets are useful for inserting standardized blocks of text in a fixed layout. However, programming is a lot about saying things just once, so be careful with snippets as they might make your code hard to maintain in the future.

The ability to lint, or syntax-check, the current file is useful, as is the ability to launch it. Without this facility, a programmer must switch to an external command line window, choose and run the correct command, and then step through error messages to find the source of the error. However, the linting must be under the programmer’s control, because the delay incurred by the lint might interrupt the coder at a crucial moment.

Inline doc is useful as long as it does not get in the way, but having a browser page open on the class definitions is sometimes more useful, especially when there are lots of related classes that do not directly extend each other. It is easy enough to cut and paste code from the browser documentation to the code being written, so the additional complexity of inline documentation often becomes less useful, indeed, more annoying, as the programmer’s knowledge of the documentation increases.

Word-completion is helpful since it is fast, and almost as reliable as in-edit documentation, while being less intrusive. It is satisfying to enter just a few characters of a word and then hit enter to get the rest. Otherwise, one labors under the strain of excess typing, abhorred by lazy programmers, who want to type ee rather than the more lengthy exponentialFunctionSquared. Word completion satisfies by minimizing typing, enforcing coherent naming and by not getting in the way.

Renaming variables and functions across the program is useful, but you need to be able to review changes and make sure your code is not broken. Again, word completion is a useful halfway house, in that it works for all languages; you can use long names for items that have long lifetimes, without incurring a typing overhead. You can use references to them via a shorter name locally, in order to shorten expressions which might otherwise spread over too many lines. If you need to rename, the long names are unique, so this approach works across all languages, and all files.

Source files can sometimes grow a lot. Code-folding is a nice feature that simplifies reading through long files.

Find/change with scope limitation to local, incremental, or global with meta characters and regular expressions are part of the minimum requirement these days, as is syntax highlighting.

Overview of Popular Programming Editors

Over the years, I went through a number of editors, and this is what I think of them:

Emacs: One of the most popular editors in the world. Emacs’ greatest feature is its extensibility, despite the complexity of its extension language (you can even play Tetris in it with M-x tetris). Emacs fans consider its terminal-based interface to be a great feature, while others might debate that it’s a drawback. In my personal experience, I found it too much to adopt and learn. I am sure that if you know how to use Emacs you will never use anything else, but to take on and learn the entire culture was more than I wanted to do. Nevertheless, its popularity among developers proves that it is far from being a relic of the old times, and remains part of our future as well.

Vi/Vim: Vim is another powerful terminal-based editor, and it comes standard with most xNIX operating systems. Apart from having a different interface than Emacs, my view is practically the same. If you grew up on it, I am sure you will never use anything else. Having Vi skills will make your life much simpler when operating through SSH and other tight spots, and you wont have problems with speed, once you get familiar with keystrokes. While not as tough to crack into as Emacs, the learning curve is still quite steep, and it could definitely use few nice features of a windowed editor.

SublimeText: True to its name, SublimeText is a beautiful text editor with tons of features. Unlike some similar editors, SublimeText is closed source, so it cannot be modified at a low level. SublimeText offers the simplicity of traditional text editors, with a lean and fast UI. Many developers find it easier to use than Vim, and this is especially true of newcomers. The learning curve just isn’t as steep. While the UI is minimal and straightforward, SublimeText does offer a few nifty features, such as a scaled down display code on the right of the UI, allowing users to quickly scroll through their code and navigate with relative ease. While it’s not completely free, the feature-limited demo version is. Unlocking all the features will cost you $70.

Atom is the result of a GitHub effort to produce a programming editor for a new generation of developers. While it is still a work in progress, Atom is a very capable editor with a vibrant community of developers keen on new extensions, JavaScript libraries and more. It’s downsides include some UI quirks, the possibility that some add-on packages could misbehave, and reported performance issues when working with (very) big files. But the project is under active development, and current shortcomings are likely to be improved. Atom is an open source project, and it can easily be hacked to suit your needs.

Nano: Excellent in a tight corner, but not feature-rich enough to prevent the inevitable thought creeping into one’s mind that there must be faster way to do this as one struggles through the keystrokes to indent a block of code, while keeping the comments lined up in column 80! It does not even have text highlighting, and should not be used for anything more than config file changes.

TextMate2: TextMate’s biggest drawback is that it only runs on Mac. As its creators put it, “TextMate brings Apple’s approach to operating systems into the world of text editors.” By bridging UNIX underpinnings and GUI, TextMate cherry-picks the best of both worlds, to the benefit of expert scripters and novice users alike. It is the editor of choice for many Ruby, Python, and JavaScript developers, with great support for Bash or Markdown as well. At the moment of publishing this article TextMate 2 is still in Beta, but it already has a very mature plugin ecosystem that promises to extend it even beyond Emacs’s extensions.

jEdit: Java-based, and considered slow by some. Out of the box configuration might push certain people away, but jEdit can be extremely fast if configured properly, as well as extremely nice looking.

Eclipse: Another widely used IDE, Eclipse is very popular among Java developers, but has been adapted to many different platforms. We could argue that its monolithic architecture is a rock that will pull it under the water, but it is still one of the most popular platforms among developers.

Aptana Studio: A comprehensive open-source web application IDE. It is available as an Eclipse plugin, which makes it popular among some Java developers. The standalone version is even leaner, and offers a range of different themes and customization options. Aptana’s project management capabilities may also come in handy to coders who honed their skills in Eclipse. While earlier versions suffered from performance issues on some hardware platforms, these problems were addressed in Aptana Studio 3, and should be a thing of the past.

NetBeans: Another relatively popular open-source IDE with cross-platform support. It is somewhat slower on startup than lean editors like SublimeText, and the choice of add-ons is limited compared to some alternatives. Many Java developers have grown to love NetBeans thanks to seamless SCM integration and HTML5 support. NetBeans support for PHP has also improved in the latest releases.

JetBrains: Offers a family of IDEs for Java, Ruby, Python and PHP. They are all based on the same core engine. Very capable in its own right, JetBrains IDEs have been gaining a growing following. However, they are not free, open-source solutions, although a 30-day trial is available, and pricing is reasonable.

Komodo Edit: Komodo Edit has great potential, and yet it’s full of annoying little “gotchas” and idiosyncrasies that can be frustrating by its lack of orthogonality. Komodo Edit feels cluttered, which is a shame because it clearly has immense capability. I keep going back to Komodo Edit in the hopes that I have missed some organizing principle, and every time, I am beaten back by a welter of disorganized capability.

Geany: Geany is not a major power player like many of the other editors in this list. It is defined more by “what it is not” than “what it is.” It is not slow, it does not have a lot of heritage from the old days, it does not have a macro capability, or much of a multi window on buffer capability. Yet the things it does do, it does well enough. It is, perhaps, the least demanding of all the editors that I tried and still can do 90 percent of what you would expect from a programmer’s editor. Geany looks good enough on Ubuntu, which is one of the reason I chose it as my preferred editor.

My Conclusion

It would be presumptuous to declare just one as the best programming editor among these great tools. And there are quite a few editors I did not even try. There is no one-size-fits-all solution. This is what compelled me to try out a number of different editors.

I currently am using Geany, but it’s because it fits the requirements I have. With Geany, and a lot of help from Perl/Gimp/Audacity/Sox, I am able to develop and maintain the Java code-base for the Android apps I develop, prepare them for compilation in different configurations for multiple distributors, source, lint, compile, dex and produce .apk files, and deliver these apps globally.

Your line of development might set a different set of requirements, and I hope I saved you some time in researching for the most appropriate programming editors.

Phillip is a freelance software developer who specializes in Android apps. He has achieved "Developer Select" status from Amazon, and has written and published 348 apps on Amazon, Google, and Nokia. He makes extensive use of Amazon Web Services, along with Java and JavaScript on Android to build apps that span the cloud.

Comments

Cherious

Geany is largely underestimated. From comments I feel like people judge it by its looks not by what it is. The one weakness it has is weakened enthusiasm if it's developers.

kdkdk

Xcode 9 with Vim mode (see XVim2) is an absolute beast. Some tasks for which I usually use the command line or emacs can directly be done in Xcode. Especially now, since it finally has git/svn support. All my notes for college, etc are synced with XCode.

Ram Das

yes, i too prefer Geany and have been using it for python, java, javascript, jsx and C++ seamlessly.

dde

Just ignoring any "Articles" that do not even deign to include something as simple as a DATE. As if any article could stay current indefinitely (or even for a few years) in an industry like IT.

Mrunal Khatri

Rightly said here for programming editors. The choice here varies from person to person and is quite different from each other. Thanks

miltar

First geany has macros, if not built-in, it does have in form of plugin, as well as the other editors that have stunning, that not everything is buil-in. Geany is very fast, self-configured for running programs in c, Java, pascal and what you made up.
and thousands of other advantages more... like the ability to set your own shortcuts, integrated terminal and much much more... Thank you!!

Dunnedev

While I agree that there is no clear winner and the best editor can be contextual to the developer using it I must advocate Visual Studio Code as a dev environment.
It's incredibly sleek and lightweight. I've listed some of its good bits here too.
http://jsdiaries.com/2017/01/09/visual-studio-code-features-part-2/

Clinton

The nice thing about editors is everyone thinks their choice is the best, and they're right. It is the best, for them. For me, the best editor is NeoVim. I have no use for IDEs, because I don't develop in bloated language heaps, like Java :).
I personally dislike JetBrains offerings because their IDEs are slow, they don't respond to bugs very quickly, if at all, the debuggers crash a lot, and, in my experience, their editors encourage poor development practices by making it easy to organize projects in the same way hoarders organized their homes.

Joshua K. Farrar

Absolutely love IntelliDerp. Great shortcuts, easy to configure, good built-in debugger. Only part that's rough about it is that when it's open, it means I'm staring at Java.
(My editors of choice are Sublime and ViM, but I grew up on Notepad, Notepad++, and Nano (Wind0ze to *nix transition))

Lucas Antoine

I am glad you mention Geany. I love the fact that I can position the tab list of opened files on the right column !

Lê Anh Quân

I'm happy with IntelliJ and the fact that it uses a lot of memory - it means that it really takes more information into account to help me better.
Anyway, who cares about few hundreds of MB ram? My ancient laptop got 16GB ram

Lê Anh Quân

Absolutely right. I was a stubborn Eclipse user for almost 10 years then realized recently that IntelliJ is so much better, and it now has a free community edition (the author did not mention this). Eclipse is still good for Java development, but IntelliJ is great for every thing, especially Javascript

Roberto14

Yes, it does use tons of memory.. but that's not a problem for me.
I started using PhpStorm, and got used to its user interface and features, so I easly moved to webStorm..
This is not about memory or performance, but your experience with it.

Geany looks ugly, like from 90th. The author is stuck in the past.
You should more often check Google for edge knowledges.
For other readers: in our days the are dozens of great tools, from text editor to IDE.
Quick samples: SublimeText, Atom.io, Aptana, JetBrains, jEdit, Visual Studio and even old Netbeans.
Which one to use is up to you.
P.S. One more article about nothing. Too much words, 0 sense.

Demir Selmanovic

Hey everyone. Toptal content editor here. Quite a response!
Thank you all for taking an active role in making this blog one of the best technical resources for developers - by pointing to our mistakes as well!
Total Blog is a place where our engineers can share their experience and knowledge. We have a responsibility to help our authors deliver helpful, informative, and relevant information to our readers every day. When an article is not up to the standards we strive for, that is the fault of the editors, not of the authors. Like all Toptal developers, Philip is among the top 3% of software professionals in the world. We will always stand by Philip, and all Toptal developers, and vouch for their skills and expertise.
After reading your comments and taking them into consideration, we agree that this article could have benefited from some more tender loving care from the editing team before publication. We are all software developers ourselves, so we understand that the topic of programming editors and IDEs is something that is very close to every developer's heart, regardless of what language or technology you work with.
In any case, we believe the response to this article highlights the major conclusion it draws: that different developers feel differently about the editors they choose to use. (And that they are passionately opinionated about the matter!)
We will examine our processes and make the necessary adjustments, and ensure that we continue to deliver only the best quality and value to you, our readers.

Yousuf

I was also surprised by no sublime

Adam Stankiewicz

> terminal editor that evolved into a windowed editor, with too much baggage to deal with
It's one of its greatest features, not a baggage. Also, Vim not Vi.

timblack1

LibreOffice is not a programming editor, unless the article means to refer to its macro editor, which is a very limited IDE. I have actually used LibreOffice Writer to do some text manipulation while programming, but so rarely that it strikes me as pretty odd for someone to recommend doing so rather than to consider SublimeText, Eclipse, or even vim for a special text manipulation task.
What language uses "say" statements to log or print text to a console?
This article needs improvement to be truly useful to its readers. I hope its author and editors will improve it in light of the comments others have given.

Vito Kline

SublimeText is free, but you can also purchase it.

Patrick D.

There seems to be a confusion between IDE and Editor in this article. Eclipse is really an IDE, and not an editor, and should not be here, it is like comparing oranges with apple.s Then the article misses three important contenders : Sublime Text, TextMate, BBEdit (or TextWrangler), to name the least. Then he article makes an immeasurable mistake : an editor can't be good at anything. It really depends wether you develop a .Net app, a static website, a Ruby application, a C++ program, a Java application (standalone, Spring, or J2EE ?), Android, or simply scripting (Shell, Perl, Python, Ruby, ... ?). Simply, I have many different editors in my environments, because one of those will be best to the task at end, sometimes an IDE is good (you better have one in the Java world), but not so much if you develop a Ruby application.

ir_fuel

As much as I enjoyed a lot of Toptal articles, this one is really below par compared to the others I've read. It just makes no sense at all.
I also love the stat:"namely maintaining 350 educational Android apps I have written to teach people to comprehend spoken English." By this you mean "One app with 350 different types of content, but I push them as different apps to the Play Store", but of course that sounds less impressive to people that don't bother to check what these apps actually are.

Carl Stevens

Every programmer/developer has their unique preference for IDEs and Technical Documentation programs. When others must pick up where you left off, Screenshots, references to line numbers, and experience wins over everytime. This is what I look for when continuing/updating/editing another's work.

Shane Zilinskas

Sublime should really be on here. Plus don't write off emacs and vim - you setup their key bindings in most editors.

adantj

Absence of Vim is disturbing

Benjamin Knight

And by the way it's not a battle. Many have "won".

Benjamin Knight

I'm confused. What year is this article from? No mentions of Sublime or Vim which are by far the biggest two.

dahyo Alli

what about Visual studio. It rules both frontend and backend development

Lorenzo Jiménez

Free: What about Netbeans? And free Visual Studio 2013 Community Edition
Shareware: You forgot Sublime Text 2 and 3.

Colin Scroggins

Seems like a loss not to include Atom or Brackets in this group.
https://atom.io/
http://brackets.io/

Sebastien Binet

Good article, Philip.
In summary, it is not easy for anyone to find the editor that best meets his needs.
Question:
Has anyone ever heard of an editor that would permit to dim and shrink the lines that are only for the following accessory reason? :
-error-handling,
-sanity check,
-debug logging,
-variables declaration,
-lint control
-closing brakets,
-...
That kind of editor would :
-save time -> programmer could focus on understanding what is the most important: the real program logic;
-save screen estate -> programmer would be able to see 4 times more lines of the program logic at the same time on its screen, making it easier to grasp the logic.

Clain Dsilva

Was there a visual studio for linux? LOL

Clain Dsilva

I guess the author looked into free and open source editors, provided the context of the blog was based on a windows to Linux migration, And hence sublime did not had room there being a paid software.

Redj Chester

What's wrong with you man?
You can't afford a real good IDE from JetBrains and forget all the freemium products problems.
Well it's acceptable for junior to play with different free text editors.
But ffs, you are supposed to be a pro.

Artur Teregulov

Where is Visual Studio? Wtf?

Clain Dsilva

Wondering why Aptana studio was not included, unlike sublime text its not paid either. Its a completly open source packed Editor. Plus a pleasing cool look. Yeah its a web first IDE. On the other hand Geany reminds me of the old VC++ IDE or the old Borland Turbo C console. The letters and lines are too tightly arranged and looks messy. My be that's my perspective but defnitly not apealing visually.

Marco Travaglini

What about Atom.io and SublimeText? And the JetBrains editors family?

NealJMD

I love and use Sublime Text, and find it to be beautiful, practical, extensible, and have lots of intuitive keyboard commands. It's not an IDE but it's definitely designed with programming in mind.
Honestly this list just feels like a bunch that you happened to try, much more of a personal experience piece than one with general applicability. There's a lot of omissions that seem bizarre - XCode, Netbeans, Visual Studio, Coda, Light table... this started me googling and honestly this is just a much better blog post on the topic - http://blog.profitbricks.com/top-integrated-developer-environments-ides/

Seán Fitzgerald

Quite surprised not to see any mention of SublimeText in that list. Granted, it's more of a text editor than a programming editor, but for (say) web & node.js development it's very powerful, with a lot of packages to expand its capabilities.

Matt Hicks

For a Java developer you seem extremely negative about Java-based editors. jEdit can be extremely fast if configured properly as well as extremely nice looking, but not out of the box. You have to enable Nimbus L&F and change the fonts, but it's actually pretty good to look at after you do.
With regards to Eclipse, it has nothing to do with the fact that it's Java, and everything to do with crappy monolithic development creating an unruly beast.
I don't see how you can argue that Geany is nice to look at...it looks like an IDE for early 2000. It seems strange you wouldn't mention the absolute best development environment available today: IntelliJ. I spend often up to 14 hours a day staring at my IDE so I require a lot out of it (not least of which, a good dark theme to reduce eye strain). Yes, it's written in Java, but it is amazingly fast and that's the reason that Google chose to make it the foundation of Android Studio.
For junior developers I often encourage them to stay away from IDEs in order to solidly build the foundational knowledge of coding before they have a tool helping them (I used Notepad for longer than I care to admit), but there's really no excuse for senior developers to not be using an IDE for development. No matter your argument, you're simply wasting time building applications without the power features an IDE provides.
I'll leave you with this screenshot of my development environment: