2010-01-28

Flow

Currently I'm not using any IDE for development. I find this to be remarkable, that in the 21st Century I don't use code-completion, refactoring tools, in-line debuggers, or integrated change management tools. I use VIM for my text editing (which does have syntax highlighting), and the command-line for the other needed tools like pylint, git or subversion, unit tests, uploaders/managers and the like.

Why am I using a bicycle instead of a jet pack?

In the past I've really enjoyed how it feels to work within a really slick IDE like IntelliJ IDEA or Eclipse, especially for Java development. I miss having lots of information given to me, like the code tips that pop up to tell you the method's signature or that automatically infers what type a variable needs to be cast to. Supposedly Microsoft's tools are the best in the world for this type of information and integration.

Up until a few years ago, I did all of my personal development in Eclipse: C++, Java, Python, Ruby... everything. But eventually I stopped. There's more friction in testing an idea (which I do a lot of in Python) if you have to set up a project, configure the repository, and write build scripts. Many of the special tools are weaker in my preferred languages: I've never felt comfortable using refactorings in a Python IDE (though syntax highlighting has gotten LOTS better). I got tired of downloading Eclipse and its extensions for every new computer I was working on.

So, I'm writing this because it seems a bit lazy and unprofessional to just using a text editor. I still feel that using a good IDE is the mark of a truly professional programmer, whether that's true or not. I have this image that a "real programmer" has their Tool Of Creation ready to go each day, humming with power yet easy to use. This is probably very similar to friends who've lamented about not having the perfect place to write a book, or my wife having to do landscape drawings on the kitchen table with an extra lamp from the living room. It just doesnt feel... perfect.

I've learned a lot in the last month as I've made the effort to mediate every day. One of the barriers to this goal seems to be my desire to have everything "right" before I sit down. Sometimes I've eaten recently and my stomach is full. Sometimes I feel too tired. Sometimes I'm getting ready for the next errend and don't want to spend 10 minutes on that. If I wait for conditions to be perfect, I never get around to it.

On the other hand, the projects I'm working on are increasing in complexity. I keep having to look up the URL for the Subversion repository for my new contract job, or spend a lot of time looking up API information. The tools I'm using are really powerful, but I'm running into trouble employing them all, and employing them as regularly as I'd like. When all of my code fit comfortably in two files, with a single command to run them, it made much more sense to keep the infrastructure small. Now that a lot of my currently-shunned tools have had time to advance and my project complexity is increasing... I'm reconsidering my position.

I'm going to give Eclipse another try, but not because I think it'll be perfect. I think I've matured a little in practice and in needs, and my flow is starting to be disrupted by the quality of my tools. These hammers haven't worn out, but if I need to frame a house by myself in a day I need to employ something a little quicker that requires less physical force from me.

And that's really okay.