Monday, March 9, 2009

IDE, IDE, IDE, the IDEs of March


This is the story of installing a billion software development environments, and which ones gave me fits and which ones I will continue to use, at least until I am too dead to program anymore.

First of all, as the most basic "IDE", there is the Unix Makefile and the GNU compilers. This includes the infamous VI or EMACS (or whatever grim editor of your choice...). I have been using this kind of environment for decades, ever since the early Unix days, especially when the GNU compiler was available for most of them, and the "gdb" debugger (or something like it) existed. Yes, this kind of world is grim, but there is an elegance to it and a reliance on human intelligence that cannot be equaled by anything else, so far.

But it has the terrible drawback of being clunky. There are much better editors nowadays, and even make file makers, automakes, and so forth. Yet, the clunkiness will never go away, and you spend a lot of effort tweaking makefiles and all the dependencies and the order of object files and libraries. It is a pain in the butt, even on a single Unix/Linux machine. It is awful when you start making everything machine and OS independent.

VC6.0 through VS2008 and .NET. In recent years I've had to put up with Microsoft's IDE for a lot of programming. The early ones were pretty grim, and mostly made you get buried in complex object systems that assured your life would be a giant Microsoft Pain In The Butt Object forever. The later versions, especially now that there is the "CLI" or Common Language Interface, it is even worse than ever. Managed Code may be all the rage, but it is just crappy programs that result from it, unless you are running the fastest, most memory endowed machines on Earth. Some people are, so they don't notice how piggy the stuff is.

Many people LIKE Microsoft, and all it's complexities and sludgy software that puts Quad Core boxes on their knees. It does have an extensive, extremely robust functionality, and I cannot fault the standards of programming that Microsoft has set. As long as their companies buy all the tools and fast machines for them to develop on, who cares about anything like cost and power consumption. Now, there is C# (sort of a C++ version of Visual Basic) and all the C#pies in the world pray at the alter of Microsoft, once again.

My biggest complaint with .NET was when I tried to write photograph processing software using .NET. What a nightmare. It made accessing the pixels of any particular image file almost impossible. So I wrote a low-level processing module to do the heavy lifting and used .NET to do all the weird Microsoft GUI stuff. It kind of went -- thunk thunk thunk as it processed images.

Onward. GTK+2.0. On my two personal Linux boxes, one a modern Dell laptap with openSUSE 11.1, the other an old clunky Thinkpad 600e with Ubuntu (Xfce). They are able to use a variety of IDEs, despite the slowness of Thinkpad, as well. That poor little thing could never run the VS2008 crap, but it runs all the others (which I list below) OK. I also used a Redhat 64bit server for one contract, but no IDE -- straight makefiles for that dude. Things worked good, though. GTK+ is a very extensive, complex GUI tool kit (GTK == Gimp Took Kit) that was used to write the Gimp Image editor. Very, very complicated, and lots of low level C stuff, but it writes high performance programs.

Eclipse.A one-time IBM product -- now Open Source. I like Eclipse for Java things pretty good. It makes good code, it is fairly elaborate in helping with editing, finding bugs, automatically fixing certain things and debugging. It makes Java programs that run identically (or nearly so) on all Linux boxes and all Microsoft boxes. Eclipse also has a C++ interface (perspective, it's called), but it isn't so elaborate or useful as the Java related stuff. Eclipse is a bit intense for the Thinkpad, but the programs created by it run very nicely on the Thinkpad 600e. I was able to write decently performing image processing routines directly in Java that worked adequately, if not lighting speed.

Netbeans. I also like Netbeans. I have used it to make some Java based web pages and stand alone Java programs that are pretty tight and portable. It also allows C++ and (with some difficulty) is able to make portable code, within limits. It does not involve any particular GUI for C++, so you are on your own there. I used GTK and a few extra tools to make GTK somewhat easier. But GTK at it's easiest is NOT easy. It is fast, however. It is probably possible to mix wxWidgets into Netbeans, but I have not tried yet. Especially on Microsoft, where the most difficulty getting those things to all play together lies.

Anjuta. This is a very cute Linux program, and it has some nice interfaces to other things like GTK/Glade and other programming aids. I actually liked using it, except that it wouldn't run on Microsoft without a massive effort, and it sometimes crashed in the middle of very complicated work. Although I thought at first I could get it to work on Microsoft, it would be very difficult.

Code::Blocks (using wxWidgets or GTK). This program is my favorite, so far. Mainly because I am a C++ guy (not C# nor .NET -- real C++). Also, it has a swell widget maker interface that is nearly as clever as the VS2008 Forms editor. The main difference is the resulting code is WAY faster with Codeblocks and wxWidgets than .NET. I'm sure there is some reason why .NET is used by a lot of Microsoft coders, but they don't care if it runs on Macs or Linux. With wxWidgets it runs on virtually ANY computer with some kind of C++ and graphics subsystem to support it's GUI.

I cannot say Codeblocks is easy to setup. Some cases are OK, such as if you just use the wizard to create a new project on Linux, everything is a snap. On Microsoft I had to try about 4 different configurations to get wxWidgets to work (finally just using VC9.0) but for GTK programs I use another thing (MinGW C/C++). I'm not sure why it had to be so difficult, but there were a few things I just resorted to using a text editor to fix underneath the hood. And when I copy program elements from Microsoft to Linux I have to be very careful to ONLY copy the source files and not the setup files.

However, after I get it all working, and get the Debug vs Release stuff all in focus, it works very well. And the resulting programs are very robust and attractive, and they obey whatever standards of GUI behavior exists on whatever system they reside on.

So, in the IDEs of March, Codeblocks wins. Yet I still like Eclipse for Java, whenever I need that kind of thing. And I also like Netbeans for some things. In fact, it would REALLY nice if someday there was some kind of virtualized IDE that ran all those things simultaneusly and could use the best features of each one whenever the Software Project of the Day needed it.

Someday, perhaps, but so far it is nice just to have something that I can write truly portable code on any system I'm using, and run it directly in C++.

I have recently tried Qt. Although it is commercial, except for a crippled "free" version, it seems nice enough. I is limited on Windows to a non-VC++ world, and that bothers me somewhat. But I'm still impressed with it.

Now, I will have to get my hands on a Mac OS/X system, and really make my life complicated. I don't mind so much if I have to jump through hoops or whatever, but I will use wxWidgets (and hopefully something like Codeblocks) to do the GUI stuff, no doubt about it. I just don't want to pay for a Mac right now.

Anyway, that's my 2 cents on the IDEs I've used. I'm sure there are others, and some people love one over another, different than me. But once I've spent time learning something that works as well as Codeblock, Eclipse and Netbeans, it is hard to bother with anything else.

No comments: