Friday, April 09, 2010

On Integrated Development Environments...

I was asked an interesting question recently -- "What is the minimum expected functionality in an IDE? (for me)". This was part of a broader discussion related to what functionality belong's in the "core" of a product.
----
Here is my answer -- let me define a bare-bones IDE first: A program that should allow user to -- Type code + Build/Run programs + Jump to line from compiler output if needed + Jump to line from stack trace (if one gets generated).

Now for the minimum set of features/functions (in no particular order)::
  1. Syntax highlighting (bold keywords would be minimum, prefer colour highlighting)
  2. Jump to method body from a method call -- including methods in another class (F3 in Eclipse)
  3. Code completion
  4. Multiple tabs (not many -- but 4-5 buffers is sufficient)
  5. Short-cuts for open/close files/tabs, to compile, run, navigation, code completion.
I have intentionally left out a whole bunch of things that many others would consider critical, so let me explain my rationale::

  • Project resource organisation (src, lib, dependencies etc): I prefer these in an external build script. As long as the IDE allows one to invoke this external build script via a short-cut then it is sufficient. Build scripts are also handy in large team development.
  • Code folding: Never really used it in Java/C#, will not miss it if they yanked it out. I have used it a bit when digging around some large XML files (which I am certain was required due to some serious bad karma in my previous life -- I have learnt my lesson now, so all will be well by my next birth). Probably handy for HTML developers, but I can live without it.
  • Project file tree view: Handy, but the OS provides file explorers. When a good command interface is used properly, I can get to the code file pretty quick (i.e. Norton Commander like UI -- muCommander these days).
  • SVN/Git integration: Happy to switch to another application that specifically is designed to do this well rather than load a slow buggy plug-in inside the IDE. It is nice to have the intelligent "diff" inside the IDE, but to me it is not a killer feature -- and I can use it quite effectively outside of the IDE.
  • Defect repository integration: Again, prefer to use an application that is specifically designed for this task.
  • Debugger: Necessary tool, but not "core". You see, I am an optimist (and far too arrogant to admit that I would ever need a debugger). Well they did invent printf so that developers can avoid using the debugger.
  • Models/UML/Program visualization: Models are better on a whiteboard. We can get UML reverse engineered if pretty pictures are needed in a document (or) for more rigorous communication (i.e. forced on me). Program visualisation? Handy if I am new to a code base -- but they are not my type. Forward engineering from UML? Tried that relationship too, did not work out, so we broke up. My brain seem to work better and faster in code than in UML.
As you have probably guessed by now .. my preference is to have a bunch of small applications that are built to increase productivity in a specific task. I do acknowledge that there are many tasks that developers do as part of their work-flow. But, the issue is "how often" we do some tasks. Compared to cutting code -- the rest of the other tasks, in general, take up a lot less time hence I prefer these out of the IDE.

I am a part-time developer these days -- so the question is I am missing something that full-time developers consider critical?

1 comment:

allanjones said...

I'm by no means a full-time developer at this stage, but I would add import organisation (auto add/remove unused), refactoring tools (smart identifier renaming, field encapsulation, method/field extraction) and problem resolution suggestions ('Quick Fix' feature in Eclipse). Auto-formatting is quite nice as well, especially when dealing with very poorly formatted code.

I've found each of these features have substantially increased productivity for me and they are definitely missed when I'm using a basic text editor.