Integrated Development Environment: Unix


Just ran across an interview with James “Javaman” Gosling where he explains about his work with the new cross-platform IDE, netbeans. In particular, this crack made me laugh:

And IDEs are generally targeted at low-end developers—people who are not experts at writing code. And if you look for tools that are oriented toward (those) people, you basically find nothing. The No. 1 tool (in that area) is Emacs, and I was kind of the guy responsible for the original Emacs, 23 years ago. One of the things I find frightening is it’s still around, and in many ways it hasn’t really changed. Is that the best you can do for a (low-end) developer?

Although this will out me as an Emacs user, I say “if it ain’t broke, don’t fix it.” Emacs is still around (and being actively developed) because for many users it works. It’s stable, supports many programming languages (i.e. syntax highlighting and block indenting) and is copiously documented. Why not use it?

But the issue here really isn’t Yet Another Editor war. All that I’ve said about Emacs is equally true for vi. The beef I have is really with the popular implementations of an Intergrated Development Environment. My sense is that the early success of Borland’s QuickPascal for MS-DOS, with its “advanced” editor, online language help and integrated debugger, prompted application designers to think “every programmer needs this for their own language.” In a way, this is true. However, it is meaningful that this was an MS-DOS product. MS-DOS was never taylored to the developer, but rather to the business application user. Therefore, a stock install of MS-DOS was a barren and lonely place for a programmer. What else was a PC coder to do in the eighties?

As free Unix clones became available in the nineties, many of us got our first glimse at an operating system appointed for programmers. Help facilities like man, text munging tools like awk and sed, filesystem tools like find, a rainbow of text editors and free version control systems like RCS all put the anemic MS-DOS environment to shame. There was never a need in Unix for one monolithic application designed to faciliate coding; every aspect of Unix is geared towards it. Editors need only provide access to these other tools to be an “IDE” in the DOS sense of the word.

So, Gosling’s scorn of Emacs is a bit surprising to me in the context of programming. The editor is only a part of the picture. Building a whole application just to faciliate programming is sort of weird from a Solaris guy. The problem is that the Windows environment is openly hostile to programming. I certainly got that message loud and clear, which is why I develop in Linux.

One final point about IDEs in general. The core activity of programming is, oddly enough, text editing. Why is it that IDE editors in Windows (and I suspect netbeans to be only marginally better) have such a paucity of advanced editing features? I need the

button to indent based on the semantics of my language. I need rectangluar cuts. I need multiple buffers for cut text so that I can recall them all later. I need to be able to pipe a region of text into an external command, like
perl -wc
. I need to be able to easily open a shell to run test harnesses. I need dynamic completion of words (for the love of God, don’t make me type more than I have to). Most of all, an editor better not make me touch that phuqing mouse while I’m thinking! My motor skills are piss poor and I don’t need additional distractions while coding.

In conclusion, it’s clear to me that Unix and its frequent companion tools constitute to the most robust and stable IDE I’ve ever run across. Although it isn’t the easiest IDE to learn, it is certainly the most powerful around, bar none.

[Original post and comments.]