Why would anyone want to do that? Build an IDE? Are you insane? With the number of these so called Integrated Development Environments on the market, it doesn’t make sense to make another one, right? Right…until you start to consider the countless “little” languages out there that don’t have an IDE geared towards their use. Or maybe they do, but the ones available are too simplistic for serious work.
I won’t be building an IDE for this post — it simply isn’t necessary for me. But sometimes, I come across IDEs missing certain basic elements that make them very difficult to use. Therefore, I will outline the key parts that every IDE should have.
1. Workspace / Solution Files
When working with medium to large projects, it’s often necessary to have two or more projects open simultaneously. With many of the smaller IDEs, this must be done by opening two separate instances of the program — if that’s possible at all.
Of course, I should also mention that it’s absolutely mandatory for projects to be supported — even more so than workspaces. Without projects, the so-called IDE is really just a text editor.
2. Intuitive Build Configuration
In the build configuration window, it isn’t enough to just give the option to edit the arguments passed to the compiler. There should be a set of selectable options so that we edit, we’re actually selecting the different options we want, not just different letter switches that could theoretically mean anything. It might also save you a couple hours trying to figure out why a user’s code won’t compile only to find out they typed -w instead of -W into the arguments box.
3. A Welcome Screen
This is another feature that so many different IDEs simply have neglected to include. Not having a welcome screen is perfectly fine for a text editor which users typically open through the means of a file association. If opened directly, odds are, they want to create a new text file. When you click that shortcut to run Code::Blocks, Visual Studio or whatever you use, what are the odds that you intend to start a new project? Unless you have a new project every day, odds are not very great. That’s why having a welcome screen with options to open the most recent projects, workspaces in addition to creating a new project/workspace is helpful — it saves us from going into the menu and pulling up a list of the recent projects. Yes, we, developers are that lazy. It’s always good to assume that your users are the laziest people who have ever existed.
On top of these basic features, you could also add a news section that downloads recent news from the project website. I find that unnecessary as a core element but it is effectively free advertising…
4. Tabbed View
It’s surprising how many IDEs today still do not have this feature. It doesn’t have to be fancy — it just has to work. The old way of doing this is using MDI with several sub-windows tiled next to each other for simultaneous editing. In theory, this should work… except the sub-windows tend to get so small that editing becomes quite a pain. MDI does allow making the sub-windows maximized but that would eliminate any efficiency benefits the interface brings. If MDI is an absolute must for your IDE, at least give a clickable list of currently open windows in a menu above the MDI interface to simulate (or at least give the advantages of) a tabbed view when the sub-window is maximized.
5. Easily Accessible Build / Debug / Run Button(s)
This last absolutely important feature is probably the one that bothers me the most — the build / run buttons. In the IDEs that do have them (most of them, thankfully), it typically looks like a set of gears (build) and a play button (debug or run). Sure, there’s Ctrl+B or whatever the keyboard shortcut is, but if you’re about the run the program, you’ll probably be using the mouse anyways in a few moments to test out the program (at least if it has a GUI). Even if it’s just a build, odds are still high that you’ll be using your mouse afterwards in some way whether to close the IDE, switch to a different file or project, or perhaps commit the changes into an SCM repository.
Before you get to adding in the interesting and cool features that “real” IDEs have, make sure the IDE has these basic elements first. Your users will thank you.