In this series of posts, I thought it might be useful to step back and take a look at my current development environments. Environments is plural here because I have more than one: the first on a PC running Windows 7 Professional at my day job, and the second on a MacBook Pro running Snow Leopard which I use for just about everything else. I had originally planned to write a brief overview of all of the major development tool categories — Text Editors, IDEs, Command Line Interfaces, Version Control Systems, Database Tools, and Project Management / Build Tools — in a single blog post, but I quickly realized this wasn’t wise when I hit 3000 words and wasn’t even close to half way through. 🙂 So following is the first part on text editors, and hopefully the rest will follow soon.
Part I: Text Editors
I know that this contradicts the Pragmatic Programmer philosophy of learning one text editor and using it for everything — which I think is probably very sound advice — but I actually use multiple text editors for a couple of reasons. First, I could never settle on an editor that I liked enough for every task, especially one which would run natively on both OS X and Windows. The more insidious reason, though, is that I’m just the type of person who likes to experiment with different editors. Sometimes I’ll fire up different versions of Vim or Emacs, for example, just to play around with them and compare differences. I have managed to settle on the following editors for daily use, however, and I use them whenever a full-on IDE isn’t necessary.
Notepad++ (Windows Only)
Before my recent switch to the free and open source Notepad++, I had been using an editor called TextPad for several years — mainly because one of the companies I worked for a while ago had purchased licenses for it. Sometimes familiarity breeds appreciation, and over the years I grew to like it despite the sometimes clunky interface. For consistency’s sake across platforms, I configured my TextPad workspace to be very similar to the default BBEdit workspace on my Mac, and for the most part this worked fine. My primary complaint with TextPad was that the default keyboard shortcuts didn’t seem to conform to any common Windows standards. For example, in TextPad you click F5 rather than Ctrl+F for searches. While I can pretty easily switch between OS X and Windows shortcuts without having to think about them much, when I’m on Windows I seem to automatically use the defaults, and it’s been hard to train myself otherwise. Notepad++ shortcuts, on the other hand, seem very natural.
Another thing that drove me a little crazy about TextPad was that the “Document Selector” which I liked to keep open in the right pane didn’t seem to provide any way to sort documents. While open document tabs could be moved around manually to preserve some semblance of order, they didn’t seem to stay put in any consistent way. This is probably not that big of a deal for most people, but my slightly OCD tendencies lead me to want to keep everything in a particular order. The Windows XP task bar, for example, bothered me in exactly the same way because you couldn’t move items around without closing and reopening programs — something I actually found myself doing on many occasions.
When a request for a new TextPad license at my day job was delayed, I decided to try out Notepad++ based on the recommendation of one of my colleagues. Once I installed the “Explorer” and “Window Manager” plugins, I was able to setup a BBEdit-like configuration just as I had in TextPad. And just like BBEdit (which I describe below), the Window Manager gives a visual cue of which files have been modified but not yet saved. Next, I installed the “TextFX” plugin which includes many additional features for transforming text. There are lots of other plugins that I haven’t tried yet, but these three alone offer all of the features that I commonly used in TextPad. Overall, it seems to perform really well — not surprising since having a light resource footprint is one of the primary goals of the Notepad++ project.
I do have a few minor gripes with Notepad++, however. First, The “Find in Files” feature currently displays a dialog box while performing a search, but it doesn’t show the search results as it finds them. This was a useful feature in TextPad because you could always end a particularly long search as soon as the match you were looking for popped up. I often find myself using the “Find in Files” feature for global codebase searches (when I’m feeling too lazy to grep) mainly due to the fact that the Eclipse global search has never seemed very reliable — at least in Windows — often leaving out files in plain sight. Another feature of the TextPad search that I liked better was that it displayed the results in a center text window, appending all additional global search results to the end of those performed previously. It was nice being able to go back and reference previous search results without having to search again. Lastly, the Notepad++ window manager doesn’t seem to let you add another pane to the center window without having it span the entire width of the editor. Not a huge deal, of course, but it’s a slight impediment to arranging things exactly as I want them.
Despite these minor annoyances, I still slightly prefer Notepad++ to TextPad, mainly due to the more standardized shortcut keys. And unlike TextPad, Notepad++ is free (as in both “free speech” and “free beer”).
BBEdit (Mac Only)
I’ve been using BBEdit since the late nineties when a designer friend of mine recommended it to me. BBEdit’s tagline is “it doesn’t suck,” and I’d have to say that I agree with them. Some of the features I find very useful are 1) grep pattern matching for search and replace functions, 2) one-click document statistics including page and word count, and 3) the “project” features which I describe below. The BBEdit shortcuts are completely second nature to me at this point as well which saves time.
Like Notepad++, BBEdit gives a visual cue when a file has been modified, but it also goes one step further by displaying a different cue when your scrolling position has changed in a long file. That way you can save your spot or choose to ignore it when you close the program. Not a huge deal, to be sure, but it’s one additional little detail that makes you feel more in control of your environment. BBEdit has lots of nice little features like this.
In the latest version 9 release, BBEdit introduced the concept of a “project,” or what might be called a workspace in other programs. I really like the default configuration with the “project explorer” in the left pane and the “documents browser” in the right, and as mentioned above, I’ve used this as the template for most of the other GUI-based text editors that I’ve used since upgrading to version 9. Another feature in the latest release that I really like is the snappy word autocompletion — faster than most of the programs I’ve tried that implement one. This better-than-average performance is especially useful when writing correspondence or project documentation. I’m a relatively fast typer, albeit a sloppy one, and the autocompletion keeps up with me most of the time.
As with all of the editors I use, though, there are some minor flaws. The nit that probably bugs me the most is that there’s no shortcut to make all of the selected text either upper or lower case. You have to navigate to the “Text” menu and select “Change Case…” first. Then you can select the options for your transform and press the “Change” button. I imagine that most developers these days probably don’t have a need to do this very often, but I find myself using it all of the time due to the nature of some of the legacy projects that I maintain. It would definitely be nice to have a shortcut for this, as well as for some other features that I would consider to be common use cases.
Another small drawback with BBEdit is that it’s not cheap — $99 for a single license. I think because it first became popular in the design world where people already expected to pay a lot of money for software (like Photoshop), Bare Bones was able to position themselves at a slightly elevated price point. To me it’s worth it, but for others the advantages may not be worth the steep price tag. You can always download the free trial to give it a spin before you buy, though. And they also offer a free, watered-down version called TextWrangler that may have all of the options that you need.
Coda (Mac Only)
Coda sort of straddles the line between an IDE and a traditional editor, making it a bit hard to categorize. Since I use Coda mainly as an editor myself, I’ve decided to include it in this section. I’ve been a longtime fan of Panic’s Transmit program for FTP on a Mac, so when they released a Web development tool, I was intrigued enough to purchase a copy.
I primarily use Coda for Web programming using scripted languages like Ruby and PHP. It’s fast and lightweight, making it ideal for coding where you mostly just need syntax highlighting. I also use it to edit markup and CSS for the handful of static websites that I still manage. And the built-in FTP support has come in very handy for the sites that I haven’t yet moved over to the cloud. Multiple terminal sessions can be managed using the same tabs as open files, making it easy to switch between an SSH session, a Git log, and a scaffolding tool, for example. The terminal emulator’s text-smoothing option works really well with a monospaced font, and I’m able to apply my familiar “blue background with white font” settings without it looking too messy.
It’s the little things that really make Coda a pleasure to use, though. For example, the “Sites” tab opens up a “wall” featuring nice looking icons for each Web site project. The icons are actually recent screenshots of each project’s home page which Coda updates periodically. These images are “taped” to the wall with realistic looking transparent tape and a nice drop shadow where the icons curl up as if they’re pieces of paper. There’s also a little slider in the lower right-hand corner that lets you resize all of the icons, similar to the iPhoto user interface. Is a feature like this necessary to open your Web projects? Certainly not. Does it make the interface more elegant and fun to use? You bet. Attention to fit-and-finish details like this is one of the things that drew me to the Mac platform in the first place.
For Web development where you don’t need the overhead of a full-on IDE — or integration with a project manager / build tool like Maven — Coda is an excellent choice. It also has built in support for the Subversion VCS, although I currently use Cornerstone for that.
I’m not going to go into too much depth here because I think the debates between CLI editor advocates have already been played out in too many other forums. I typically use Vim as my command line editor for Linux, Snow Leopard, and Cygwin, as opposed to the many other available options. I probably wouldn’t recommend it to somebody just starting out with CLI editing, though, mainly because there are dozens of cryptic key commands to memorize. And I have to admit that in many ways Emacs is the superior editor. I use Vim because it’s quick, fully featured, and I’m just used to it. I also like to work on ancient Unix machines as a hobby, and Vim — or at least it’s precursor Vi — is almost always available on these systems. And it also brings back a tiny bit of nostalgia for my earliest days of word processing using WordStar on a CP/M machine!
So that’s it for text editors for now. Next time, I’ll talk about IDEs that I use on a daily basis.