Professional programmers, both beginners and experienced, usually adhere to the concept of an IDE, or “integrated development environment”. However, it is convenient to have the necessary means of organizing, writing, support and testing code in a single application with a unified interface to all tools? Besides, environment specially designed for programming, has a number of advantages, such as auto-completion, validation and syntax highlighting.
Similar tools are available for all common desktop operating systems, including Linux and BSD, and many of them are absolutely free, so it makes little sense to limit yourself to the Windows Notepad, nano or cat.
However, in the environment of fans of Unix walks in a variety of variations of the meme that “Unix is the IDE”, in the sense that the means by which the developers have in the terminal, easy to implement the main features of modern IDE. You can accept or refuse to accept Unix “IDE” in the sense that Eclipse or Microsoft Visual Studio. Either way, you are likely to surprise you as a complete development environment can be a modest Bash.
The sense in which Unix is an IDE?
The meaning of IDE is to combine all the tools the General concept of interface, and without unnecessary suffering to teach them to work together. This is especially important for GUI applications, since they usually with great difficulty find a common language. Besides being able to copy-paste the text, they have no other means of interaction.
It is interesting that users of command-line already have on hand well-designed and well-tested tools of Unix. These tools from the outset have a common interface in the form of streams of text and files because inherent in the architecture of the Unix principle “everything is a file”. Almost everything in Unix is built on top of files and streams, which are the required common interface. Forty years of development of these tools allow Unix opportunity not to give a full-fledged IDE.
This approach left a lot of the only gray-haired veterans of Unix; around modern incarnations of Vi and Emacs (Vim and GNU Emacs) formed a community of developers working on extensions for all types of text. Both editors have plugins for any programming task, and a number of them I would call vital.
I think that ultimately the developers of extensions tend to turn to the named text editors in these IDE. Often you can find posts about what Vim or Emacs can do not leave in the process.
But, I think, to cram into a text editor uncharacteristic of opportunity is not the right approach to the problem. Bram Moolenaar, author of Vim seem to largely agree with me, judging from :help design-not. Command line is always available via Ctrl-Z, and its Mature, well integrated within itself, the instrumentation capabilities will put to shame any text editor.
About this publication series
In this series of posts I will go through the 6 most important properties of IDE and give examples of how the basic tools Linux when working together make it easy to use them for implementation of these qualities. It is by no means an exhaustive review, and means about which I will tell you, is not the only possible choice.
- Managing files and projects — ls, find, grep/ack, bash
- Text editor and editing tools — vim, awk, sort, column
- The compiler and/or interpreter — gcc, perl
- Build tools — make
- Debugger — gdb, valgrind, ltrace, lsof, pmap
- Version control — diff, patch, svn, git
About what does not speak
I don’t think the IDE is bad; they’re great, just so I trying to argue that Unix can be used similarly, or at least to think of Unix as such. I’m also not going to argue that Unix is always the best tool for the task of programming; probably it is much better confined to develop in C, C++, Python, or Shell than for mainstream languages like Java or C#, especially in terms of writing complex GUI applications. Also I’m not going to convince you to dump hard knowledge hard-won Eclipse or Microsoft Visual Studio in favor of some esoteric world of the command line. I just want to show you what we do on the other side of the fence.