A popular player in the TechTarget family of sites is WhatIs, a place where people can go to find easy to comprehend technical definitions for acronyms, terms and new technical catchphrases. The site's been around for quite a while, and while that tends to earn it a great deal of respect with both search engines and the overall IT community, one of the drawbacks to its lineage is the fact that occasionally, definitions become a bit stale.

One of the terms I've been recently asked to update is IDE, which according to the WhatIs definition that is currently hosted on the sister-site SearchSoftwareQuality, stands for Integrated Development Environment. Every experienced software developer knows what an IDE is, but how would one define the term to someone just learning about IT?

What is an IDE?

Fundamentally, an IDE is a tool for assisting in the development of software, or more specifically, writing code. An IDE helps developers write code. We all know certain developers that praise tools like VI or EMACS, and insist that any truly righteous software developer needs nothing more than a text editor and a compiler to develop software, but for the less worthy members of the congregation, a tool like NetBeans, Eclipse or JetBrains' IntelliJ certainly makes life a lot easier. I guess that really is the most important point: an IDE makes writing code easier.

I used to each a Java programming course. We'd force students to use nothing but Notepad++ and the Java compiler for the first week. On the second week, we'd introduce Eclipse, and their jaws would drop. Simple things like color-coded keywords, automatic syntax formatting, incremental compilation that identified syntax errors as soon as they occurred, intellisense, auto-complete features and suggested solutions to existing problems were just some of the features that made those new students wide-eyed. Of course, the aforementioned items don't differentiate an IDE much from text-processing software like Microsoft Word or OpenOffice Writer, so any explanation of the term IDE must explain what differentiates the development tool from a modern word processing program.

With tools like IntelliJ and Eclipse, the editor is the central piece, but the IDE also includes windows or views that act as portals into the project as a whole. While editing a piece of software, there might also be a visual element displayed on the IDE that shows all the external files the piece of code currently being edited references. Another window might show warnings about existing code snippets that a hacker might be able to exploit, while another window might show the current status of the latest CI run and how many unit tests are failing on the current build.

The core element of any IDE is of course the editor, but the beauty of an IDE is that it can provide a variety of other mechanisms that allow a developer to look beyond the specific slice of code they are currently working on and instead get a broader picture of the projects as a whole. Most IDEs allow a developer to view the structure of the database, search various feature and bug-fix branches of the repository, edit build scripts that might be written in Gradle or ANT, and even submit bug reports or update project tracking tools like JIRA.

Putting the 'I' in IDE

An IDE's main focus is to help software developers write code, be it Java, HTML, C# or Scala. But any non-trivial software project has an intimidating number of dependencies and integration points. Perhaps that's why the “I” in IDE stands for integration, because a development environment must no only assist in the writing of code, but also assist in integrating the code that is written into other parts of the system. In fact, one of the most exciting advances to happen to IDEs in recent years is the introduction of plugins, which are almost like power-pills that the tool can consume to give it new capabilities. A basic installation of a popular IDE like Eclipse or NetBeans can easily be given the capability to interact with a GIT repository, or run Gradle scripts, or execute a suite of unit or performance tests simply by downloading and installing the required plugin. As a result, an IDE has the capability to not only assist in the writing of code, but instead grow into a tool that can interact with a variety of different systems that participate of the management of the overall application lifecycle.

I'm not too sure how well this definition works in terms of explaining succinctly what an IDE is or what it does, but I do believe it covers most of the pertinent points. If any of the readers have insights on what I might have missed, let me know in the comments.