My ideal IDE

The old joke goes something like, “Oh Visual Studio?  Yeah, that’s the tool I use to host ReSharper.”  Visual Studio has made lots of strides since the old VS 2002 edition.  Before then, it was Visual Studio 6.0, on the much too often occasion I needed to update some old VB6 COM components.  But for me, my current IDE still has a ways to go.

At this point, none of the whiz-bang toolbars and such are even visible, and my daily use looks something like this:


Notice anything missing?  Zero toolbars or navigation helpers.  Those are actually on another screen, out of the way so I can view the code, if I use them at all.  Even with today’s large monitors, screen real estate should go to only the most important things.  Since I’m writing code 99% of the time I’m in an IDE, my experience should be optimized for writing code.

But there are still some things missing in my ideal IDE experience.


Mouse-less by default

If an IDE forces me to pick up my mouse for the 99% slice of what I need to do every day, the IDE has already failed.  Navigation and refactoring tools like ReSharper allow me to jump around far, far more efficiently through keystrokes than picking up my mouse would.

One of the really bothering aspects of many of the ASP.NET MVC demos and sample blog posts is how much they highlight wizards.  Code generation is fantastic, but wizards are a productivity sink.  Take Rails.  Want to generate all the starter code needed for a controller, model and view?  How about this: “ruby script/generate scaffold Product” from the command line.  That one line generates the controller, view, model and a bunch of other stuff.  Why waste time right-clicking around, when you could have a powerful script do all the work?

If I need to add a new file to my project, I still don’t lift my hands off the keyboard.  ReSharper allows me to locate a file in Solution Explorer, add a new file from a template, and begin editing without ever needing to fumble around a gigantic file tree.

Multiple-monitor friendly

Since I get paid to code (and not muck around ridiculous entity model diagrams), I like to see as much code as possible.  Right now, I flip a 24” monitor into portrait mode, so that I can have two code windows open one on top of the other.  It’s not my ideal manner of working, however, as right now VS does not allow me to move code files to another window easily.  I can stretch VS across multiple monitors, but then it becomes a game of mouse-hockey of getting all the screens lined up.

Code windows should be the first-class citizen in my IDE, not menus or toolbars.  What I’d like to be able to do is put any code window anywhere I like, and not even worry about the containing application.  I realize some of this is constrained by OS windowing limitations, but this is just my ideal.

Devoid of designers and wizards for code

If I have to use a designer to code, other than for designing something visual (like WinForms or reports), the IDE has failed.  I haven’t used the visual designer for HTML in several years, as the browser is the true realization of code, and HTML, CSS and JavaScript are the true code behind it.  If something requires me to visualize a picture to generate code, the tools and IDE have failed.  I really don’t understand the notion that if only we can drag and drop our code, it will make it easier to develop.  In my first foray into drag-and-drop development with typed DataSets, I realized it wasn’t the tooling that was failing me, but the underlying assumption that code is meant to be created through visual representation.

IDEs should optimize for typing on a keyboard, and something like a real command window for VS would help.  Things like Rails generators should provide a great inspiration for great code generation/templating solutions.

Profiles for multiple development environments

This is more for laptops, as I use my laptop in a variety of scenarios.  Sometimes I’m at home with one extra monitor, sometimes I’m only on my laptop, and sometimes I’m docked at work with two monitors and my laptop closed.  In each of these, I want to switch my IDE experience, ideally with a few keystrokes (and NOT mouse clicks).  Every morning I have the same pre-work ritual of re-arranging my windows back to where they were.  There seem to be some semblance of profiles, with “Debug”, “Full Screen” and “Regular” seemingly all having their own window profiles.  But for the life of me I can’t see how to create these profiles at will, without resorting to crazy macro-fu.

An actual extensibility model

If I have to develop against COM or program a macro, fail.  Ideally, I could develop extensions in a scripting language like Ruby, whose dynamic capabilities and terseness are ideal for plugins.

It’s funny, my first foray into Rails led me to IDEs like Aptana, because of my Visual Studio biases that IDEs need to be heavy and intrusive.  But all Rails development can be done through a simple text editor and the command line.  Seeing other IDEs and other platforms really led me away from the out-of-the-box experience of VS, so much so that it’s barely recognizable.  So what’s in your ideal IDE?

Refactoring challenge #2 – functionally illiterate