The IDE divide

Via Keith: the IDE Divide raising some interesting points regarding developers who are language oriented vs. developers who are tool oriented.

While the division probably isn’t so clear cut in reality, as this response points out, it is an enlightening simplification.

Personally would say I’m language oriented and often mystified by the alternative point of view. My resistance to “unified IDEs” (EMACS / VIM excepted) is based primarily on wanting the most “raw” access to the source code as possible, rather than what I would regard as a “dumbed down” view which makes me dependent on the tool (and the vendor).

I’d also rather keep pace which changes in a language’s functionality vs. changes in a tool’s features / interface (which tend to be more frequent and frustrating, IMO).

Which is why I found the Oliver Steele’s arguments enlightening, because I find myself agreeing with things like this;

Here is an example from the apache merlin web site


ReferenceDescriptor reference =
new ReferenceDescriptor( Widget.class.getName() );
ComponentModel model = (ComponentModel) m_model.getModel( reference );
model.commission();

Widget widget = (Widget) model.resolve();

Notice how you have to type everything three times. Just reading that makes me angry.

…except that the tool oriented developer probably won’t be typing, or at least not much, things like autocompletion / wizards / drag and drop / code generation etc. having saved the effort.

Oliver alludes (my interpretation), without stating, that this is an aspect of the static vs. dynamic language divide.

To me it sheds alot of light on why we’ve got Perl / Python / PHP / Ruby(etc.) programmers on the one side (language-oriented) and C++/Java/C# on the other (tool-oriented) and both groups think the other is nuts.

So when a C++/Java/C# programmer says their platform is more maintainable than ‘X’ dynamic language, perhaps what they’re really referring to is better tools. And what they don’t see is dynamic ‘X’ doesn’t require tools to the same degree, to be equally maintainable (by a language-oriented developer).

Could be that the way to identify a developers mindset is to ask “What do you see as the future of programming?”. Those that lean towards “programming by pictures / visual modelling / source editing will die” are in the tool camp while those that suggest “more expressive / more power / closer to natural langauge / intuitive syntax” are in the langauge camp.

And I can’t escape my mindset: think the ancient Egyptians have something useful to say about the longevity of hieroglyphics…

Free book: Jump Start HTML5 Basics

Grab a free copy of one our latest ebooks! Packed with hints and tips on HTML5's most powerful new features.

  • http://simon.incutio.com/ Skunk

    You’re spot on with respect to Java; I’ve been forced to use it for some projects at Uni and the only way I’ve found of keeping sane has been to use Eclipse, which really does eliminate a lot of the pain by “second guessing” what you are trying to do, allowing quick creation of boiler plate code. It quickly becomes obvious that the only reason it can do this is Java’s static typing. The thing is, even with the huge power of Eclipse at my command I’m still ten times more productive with Python. Of course, I have far more Python experience and I’ve probably only scratched the surface of what Eclipse can do but it still seems like a pretty big divide.

  • Matt

    C++ programmers aren’t necessarily tool-oriented. I do a lot of C++ work (for my job and for other Open Source things) in vim and am perfectly happy doing it. C++ lends itself quite well to that sort of raw development.

    Java, on the other hand, feels almost like it was designed for use with an IDE. Take it away, take it away!

  • jesse

    For those who resist IDE’s they are only making there life more difficult… I program PHP applications with Zend IDE Studio and it has cut my developement time by 50%! classes are stored for auto-completion, class functions and variables are stored for auto-complete the second that you type them. No matter where I am in my code I get auto-completion on the methods of my class ex I type:
    $objClass = new traslation(‘en’);

    when I type $objClass-> all of the methods and variables appear in the autocompletion box!!! This is GREAT!

    furthermore it has the same global auto-completion for my function libraries and variable names!!! As well as java/php doc comments so that every auto-complete tells me exactly what the function returns and what it does.

    This is a great help when you have 3 concurrent web projects and 50,000 lines of code 15 class and 300 functions.

    A good IDE is to application developement what CVS is to group/open source projects.

    The more we use IDE’s the more get produced and the better they get.

  • eivind

    I use both PHP and C#, but prefere C# because of Visual Studio. I think wizards and drag ‘n drop is ok to get started quick, but after a while I always find myself working the code. The nice thing about Visual Studio is that you have the ability to do both. Different colors and autocomplete function make the coding easier and save me a lot of time. And I have full control of the code as well.

  • Louis-Philippe Huberdeau

    I use VIM for everything (including Java and C++). I just like the idea of having to organise my code and keep it clean. Most IDEs generate total crap by default and unless you actually spend time cleaning it up (which goes back to writing it all), it remains like that. I just write it all by hand, document it, add fold markers. The ending result is very clean and maintainable.

    Writing is a very small part of development anyway. Thinking about it takes much more time. Do IDEs think for you?

    If it’s just about code templates and save around 30 characters typing a base class definition, most acceptable editiors allow you to define macros…

  • Captain Proton

    Personally would say I’m language oriented

    Excuse me? You’re language oriented?

    It seems quite obvious to me that when you look at this blog, most of the posts are about PHP tool this, PHP tool that, instead of about the core PHP language (note that PHP modules are tools, they are not part of the language itself)…

  • http://www.lastcraft.com/ lastcraft

    Hi…

    I would say Harry is “language oriented” as defined by the original discussion. I am too and believe any time the editor can work out what you wanted to type, the programming language could probably have eliminated.

    The one thing that will get me to change my mind is the automated refactoring tools. Being able to rename things safely alone makes these tools worthwhile. Even C++ers are jealous of this one.

    yours, Marcus

  • Kick The Donkey

    Well, I think there is a happy medium. For instance, with PHP, I have no need, or desire for a huge IDE. All I need is a text editor with a few added features: Syntax highlighting, auto-indent, line numbering, etc.

    However, when I’m coding in Java, I’ve found that I can’t live without MyEclipseIDE.

  • OfficeOfTheLaw

    It’s funny how I used to soley rely on IDEs back in my uni days… I thought it was impossible to write a C++ program without that borland ide, or java without JBuilder (probably the worst of java IDEs, in my opinion).

    Once I got into *nix and vim, I haven’t gone back. I have a large .vimrc file filled with all kinds of auto-completion goodies and scripts that makes my life easier (for example, to create a skeleton of a unit test using SimpleTest, I just type ~~unittest and it gets replaced with the class, just like the one generated by Maguma Studio).

    I guess it all boils down to experience… I’d had some bad times with some IDEs throwing in code I didn’t want because it tried to second guess me, and I’m just pretty language oriented. Plus I like to exercise my Lisp and bash scripting skills from time to time to automate my own development process.

  • Anonymous

    IDE’s are great, once you know the language. Too many developers learn to program using an IDE and a) get stuck with it, b) don’t understand the language because everything is done for them.

    Learn to program using vim, emacs, notepad or whatever. Understand the language, then many an IDE should help productivity.

    The down side? Some IDEs take away the flexibility to move the code. You lose code reuse because of stupid naming conventions an ide hooks.

    Eclipse/Netbeans provide clean interfaces to programming without creating convoluted code. Netbeans delivers the whole project as an ANT build, totally divorceable from any IDE.

  • http://www.pointbeing.net/ pointbeing

    Mixed feelings on this one – used to avoid IDEs like the plague until a colleague introduced me to Zend studio, which I’ve found quite helpful in places. Still, I’ve had to pare back most of the panels and dialogues to make it as non IDE-like as I can!

  • MiiJaySung

    IDE’s are the scum of the earth to me. All they do is produce reems of crap. All i want is code highlighting, tabs, split views, and good search and replace. jEdit works nicely for this, even if it takes a while for the crappy JVM to initialise (and on the PC it has the gay coloured lilac + grey look). UltraEdit and Textmate seem quite good (though they aren’t as good atm)

    It’s nice to have a class / method view as well.

    It seems tool based developers are the kind who lack solid experience and education. Look at all the idiots out there using Dreamweaver for developing PHP apps!

  • http://www.phpnerds.com petesmc

    It seems like many of the people who don’t like IDE’s have one argument only, in that they generate ‘crap’ code. First and foremost, IDEs do not have to generate code. Secondly, most IDEs allow to customise any code that they will generate / auto complete. This can be an incredibly useful feature once you get used to it.

  • http://www.gandullia.com jgandu

    I believe auto-complete is an absolute must for serious development, particularly for Dynamic languages like PHP. Using auto-complete religiously, you eliminate errors by typo (which in a language that isn’t complied you may not catch otherwise)
    I use the Zend-IDE for PHP development. That said I consider myself more language-oriented and believe the IDE’s job is to help ME write the code.

  • Dave Fancella

    Personally, I’m a big fan of KWrite as a source code editor. It does the syntax highlighting, and that’s it. Otherwise, it loads quickly. I have some issues with it, but I like it, for the most part. Recently I’m finding Quanta is wonderful for PHP work, because it has shortcuts that’ll let me prototype xhtml stuff, then I just go in and chop it up as needed for the real work I’m doing.

    As far as the IDE thing, correct me if I’m wrong, but isn’t IDE just an Integrated Development Environment? I always thought that meant compiler, linker, debugger all rolled into one suite that worked with a code editor. The rest of the tools attached to the IDE aren’t necessarily IDE. I like IDEs because of some of the things they give you, such as navigation by class. I really like the treeview widget that has the whole project and I can just click a file and start working with it. I like the way they maintain my build files–for projects that only have to ever run on my computer. Invariably, as soon as it’s time to make the project run on someone else’s computer, you have to tweak makefiles and IDEs just don’t cut it (yet).

    My main complaint about IDEs isn’t about the code they generate. It’s about the code they promote and propogate. How many times have you opened up a GUI application code and seen all the working code locked up in event handlers? How many cut and paste jobs where three or four event handlers all did variations of a thing, so the programmer just copied and pasted the first bit he wrote and then made a few modifications? How many bugs does that introduce? Totally defeats the purpose of code reuse, and they promote this type of programming. I had to actively work against Borland’s Builder to get my code out of the event handlers, and the VCL even has utility classes designed to solve this exact problem!

  • http://www.lamande.net nomadeous

    Another point is interesting with IDEs, particularly Zend Studio, the integrated debuggers which can help you a lot in debugging, viewing variables and …
    Surely it can reduce the time of development.

    A language developer who likes Good sides of tools

  • melancholic

    I think the term “IDE” is too broad to actually weed out what I think you are saying.

    Taking it back to the classic example of applications like DW and Frontpage…

    Having to look over code written from these IDES make me want to crack the monitor open with my head.

    But on the flipside, I suppose if one who is a tool oriented developer had a look at my code they’d want to do the same thing…

  • Paul Taylor

    I’ve still maintain one C project in PrimalScript, which does basic highlighting but not much more.. (For C, anyhow)…

    My main languages now, though, are C# and PHP, as odd of a combination as that sounds. I find that Visual Studio is almost a must for C# coding. For PHP, I simply used PrimalScript, which provides the same features for PHP as it does for C, with the exception that it knows about some of the PHP functions, so it gives hints on what parameters you should pass to a function… I was fine with PrimalScript… I already had a license for Zend Studio, which came as a part of their Small Business package. Months into my PHP development, I decided to load it, since I already had a license.

    In short, I don’t use PrimalScript for PHP anymore… Zend Studio is for PHP what Visual Studio is for C#, only without the GUI building part… It definately reduces the number of errors that I have and increases my productivity… Of course, since PHP doesn’t get compiled, is Zend Studio really an IDE? It does have some debugging functionality, but I don’t normally use that because it’s for web pages and I do most of my PHP development for the command line. I’m basically using Zend Studio for it’s specialized text-editor features.

  • Osvaldas

    Some languages indeed lend themselves to automation tools more smoothly than others. Task-oriented languages like PHP with their compact, flexible syntax and nearly no design constraints make IDEs (at least their code-generation features), IMO, less useful than for design-oriented gargantuan languages like Java and C#.

    When I program in PHP, my fingers follow my mind almost asynchronously: as soon as I think of what I want to do I can nearly just as quickly write code that does the thing. In Java or C# this is different: you need to spend more time structuring and then refactoring your code, at least I do. That’s where great tools like IntelliJ IDEA or Visual Studio really come into play. Not sure about Java, but C# is definitely designed for easy IDE-integration. It even has features that have absolutely no meaning outside of the IDE, such as the #region directive which is solely for code-folding capability. An that actually makes sense once you start playing around with it.

    With IDEA, for example, I’m always a few keystrokes away from implementing what’s on my mind, so I can designate all my efforts towards thinking WHAT I want to do, not HOW I will do it. It saves me from a bunch of mistakes and lost ideas as well. E.g. once I decide: “hey, let’s abstract this piece of code into a class named Foo”, I press this and that and there you go: complete with imported packakes, constructors and wisely matched parameter types! “Oh, I also need getters & setters” – click click and here they are!

    I believe the power of tools like IDEA lies in their intelligence and high customizability. As you move from Notepad to an IDE you naturally expect it to know what you wanna do and exactly HOW you want it done. I personally never tolerate a missing space after a comma, or “{” placed on a new line. Another developer, however, might be irritated by my conding style. That’s why it is so important for me to be able to customize all this stuff in the IDE. I also think the lack of adaptability to developer’s needs and taste is one of the major reasons some people dislike IDEs.

  • http://www.phppatterns.com HarryF

    You’re language oriented?

    By the general definition I think so. I’m by no means an expert in language design and can’t give a lecture on parsing theory.

    Have yet to find myself impressed by any IDE except for Eclipse, for the refactoring tools Marcus mentioned.

    It seems quite obvious to me that when you look at this blog, most of the posts are about PHP tool this, PHP tool that, instead of about the core PHP language (note that PHP modules are tools, they are not part of the language itself)…

    Fair point. The “Lazy PHP” blogs were headed in that direction but some of the deciding factors are time, interest, not wanting to condescend etc. For example, I can’t get excited by discussing how references work in PHP4 yet again (especially with PHP5 now here) but perhaps that needs talking about?

    Also tend to start asking “What is PHP?”, when going down that road, which, as Marcus. And things could quickly go downhill…


    class Test {
    function foo() {
    echo 'foo() called';
    }
    }

    $class = 'Test';
    $obj = new $class();
    $obj->foo();

    $class = 'Test';
    $class::foo(); // Hmmmmm

    Unlike Java, Python or Perl, think it’s fair to say PHP hasn’t exactly been designed according to anyone’s particular vision but is the product of consensus, so “best practice” is a sliding scale.

  • WW

    Being a C++ programmer for quite a few years for now, I wonder where the heck did you get it from that C++ programmers are tool oriented. It seems you suffer from the same “sickness” as a lot of people: prejudice. You seem to think that C++ programmers are all M$ or Borland IDE users, programming for Windows. Big mistake. I had the honour of visiting the C++ standardization committee meetings for few years now. I am yet to see any IDE being used there, but I have seen (x)Emacs, vi(m) and of course Visual SlickEdit. So please, if you want others not to think you are nuts, please do not talk about others with prejudice either.

  • Augustinas

    I enjoyed your article but just as WW was surprised to see C++ as a tool oriented language. Though that is most likely the case as time has gone on. I began developing in C++ in 1987 with a C++ to C translator. At that time there was very little available regarding IDEs. Leaning more toward the language side of things I do also appreaciate a good tool such as source code debugging. I’ve done many hours of debugging at the non-symbolic assembly language level to appreciate them.

    I want to thank you for your article. It communicates an important point quite suscinctly.