Languages and IDEs, again: Just write some code

Sunday 28 November 2004This is nearly 20 years old. Be careful.

I read Simon’s complaint about Eclipse this morning, and spent a little time looking into it. I considered downloading the latest milestone, and I investigated what version I was running, and whether it would upgrade itself, and so on. And then I realized that fiddling with Eclipse was not how I wanted to spend my software engineering energy. I wanted to write code. And I thought about The IDE Divide, which says you’re either a language person or an IDE person. Bob responded to that division of the world by saying, “you need both”. I guess my attitude toward the dichotomy is that you can do really well with neither.

I often find myself tempted by the glittering riches of some new IDE, or some new language (or language feature), when what I really need to do is buckle down and write some code, or even harder, do some of the difficult thinking that happens before coding. Usually, when I am not making progress on a project, it is because of something that neither languages nor tools will help. Usually, I am mulling over some thorny problem, either in the user experience, or in the architecture. When those hard chunks are out of the way, it’s pretty clear sailing.

So I didn’t do anything about Eclipse this morning. I continued to hack Python in one of the many Python IDEs that clutter my hard drive. Aha! “Many IDEs” must mean I’m an IDE guy. I’ll admit it, I like playing with new tools. But the fact is that I use all those IDEs the same way: as a Python-aware text editor with tabs. I don’t do much more with them than that. For me, IDEs occupy a similar slot to candy: they’re tempting, almost irresistible, enjoyable for a short while, but ultimately unsatisfying. They don’t get at the heart of the problem.

I haven’t had an opportunity to use Eclipse’s luxuriant refactoring tools and quick fix doodads. I’m sure they make developers more productive, how could they not? But they won’t help me decide how to refactor, or what the right semantics are for an abstraction, or predict in which ways the system will have to change in the next release. They won’t help me find the simple path among the complex, or choose just the right words to describe my thoughts, or understand the user’s problem better. They may help me be a more productive coder, but they won’t help me write better software.

So, I must be a language guy, right? Well, no. I haven’t dug into Ruby or Haskell or Smalltalk, and frankly, I don’t know why I would. I can’t explain how Scheme is different than Lisp, I have only a primitive understanding of what a closure is. Even in the languages I use, I am slow to adopt new features. I haven’t installed Python 2.4 yet, and I haven’t incorporated 2.2’s generators into my daily routines.

I’m technologically skeptical and slow to adopt in general (shameful confession: I don’t have a TiVo, an iPod, or a cell phone camera). I’m interested in solving problems, and if the tools I already have can help me solve them, I’ll stick with them.

The fact is, there’s no shortage of choices out there, whether it’s IDEs, or languages. For that matter, what of the support facilities we use during development? Just in the Python world, there are many unit testing frameworks (at least four), many documentation generators (at least ten), many parser generators (at least 19), and so on. Using any of these requires investigation and learning, and correctly choosing among them requires investigation and learning multiplied many times. My time is precious, and sometimes I just need to cut off all the exploration and ask myself what I’ve actually accomplished in the last hour. When I’m stuck on a particular difficult challenge, those twinkly tools are an especially dangerous distraction. Experimenting with a new toy is easier than facing down a hard choice, and playing with the tool almost certainly will not provide the answer.

Of course, I need to stay abreast of the possibilities. Most of these things offer real benefits. A parser generator is a huge win over trying to write a parser by hand. But all that glitters is not gold. Sometimes I need to stay focused on what really matters and put my nose to the grindstone and write some frickin’ code.

Comments

[gravatar]
Good post. It certainly is easy to get distracted by all of the stuff that's out there. As you say in your last paragraph, you need to "stay abreast of the possibilities". That's key. At an even more fundamental level, developers need to be competent with the languages and tools that they already use.
[gravatar]
Yeah, with python there's always a new toolkit, or a new web-api wrapper module, or a new web object structure... when I saw the python code to talk to del.icio.us directly I realized that maybe it was getting circular :-)

"Write some frickin' code" is what it's all about, there really is such a thing as too much input. codemonth was an attempt to put some structure around that, but the four words are probably enough...
[gravatar]
Three words are enough: "con cen trate"
[gravatar]
NEd, I regonize the points you raise. For me it all comes together: I'm also slow in adapting new technology. Furthermore I'm often tempted to download and install some new tool or whatever. But what it comes down to is that both these things (hardware and software) take up their own amount of time. Time is the scarcest resource I have, so I'll have to use it wisely. What I need to do is get out more LOC in ASP.NET, to get more familiar in that niche --cause that's what I do, sorry :)

Anyway, being a techie I can live with the fact I'm not up-to-date on the latest Tablet PC, cellphone etcetc. I saves me so much time to do what I really want, which is code-and-learn...
[gravatar]
I usually delay adopting new tech until I'm sure I'm making the same choice as the herd --- been burned too many times by picking X, and then watching it wither as the rest of the world chooses Y. I've got my students using Eclipse now for Java, since it's clearly the dominant free player (nothin' against IntelliJ, it's just not free). But there's no similarly-dominant Python IDE, just as there's no dominant Python web app framework, so I wind up not using any.
[gravatar]
I find IDEs are most helpful when they have time saving shortcuts. Spending the past year coding java with Eclipse I find certain shortcuts help me work faster because they reduce the disruption to my train of thought. It's the simple things like ctrl+click to jump to a method definition or instantiation of a variable; highlighting all uses of a variable within scope; showing a list of all invocations or uses of a method or variable. Of course some of these are harder or even impossible to write for Python. I find the most helpful part of IDE's is project management and source organization tools, but at the end of the day it's all about shortcuts that may save time.
[gravatar]
Programming for Luddites:

http://www.codinghorror.com/blog/archives/000146.html
[gravatar]
Tomas Øvrebust 4:09 PM on 8 Aug 2008
I thought that I needed a operation with my on my nose i searched on it to straighten my nose up but i found this link and it straighten up my day instead, Just to see on code coos it where on the search list on my search list + the words that reminded me about nose operation and operating system got me here.
And I had just installed Python after my first search today and I had problem decompiling something on Pyton.
This where my second search ended today it is today + crazy!
Before on codes I searched on n programming but now I just typed need nose operation not with my knowledge exactly to do so for something new and challenging programing language to make here i am giving knowledge on the topic that i deeded brought up. Do you typers think of D programing?, I found it on a link I goggled it where about programming it seemed to me being like it is a mixture of different qualities inn programming I am not 110% sure but search it down to your window to find it out it could be something especially designed for you chatters to go ahead!
[gravatar]
I had a brilliant idea, a few years ago which could turn in to a great little money spinner. Trouble is I have never been able to find someone to write the software for it? A little advice and maybe a prod in the right direction would be greatly appreciated?

Add a comment:

Ignore this:
Leave this empty:
Name is required. Either email or web are required. Email won't be displayed and I won't spam you. Your web site won't be indexed by search engines.
Don't put anything here:
Leave this empty:
Comment text is Markdown.