
Professional programmers, both beginners and experienced, usually adhere to the concept of IDE, or “integrated development environment”. True, is it convenient to have the most necessary means of organizing, writing, maintaining and testing code in one application with a single interface for all tools? In addition, the environment, specially designed for programming, provides a number of advantages, such as autocompletion, validation and syntax highlighting.
Such tools are available for all common desktop operating systems, including Linux and BSD, and many of them are completely free, so it hardly makes sense to limit yourself to Windows Notepad, nano or cat.
However, among fans of Unix walks in various variations of the meme that “Unix is an IDE”, in the sense that the tools that developers have in the terminal easily implement the basic capabilities of modern IDEs. You can agree or refuse to recognize Unix "IDE" in the same sense as Eclipse or Microsoft Visual Studio. One way or another, you are most likely surprised at how a modest Bash can be a complete development environment.
')
In what sense is Unix an IDE?
The meaning of the IDE is to combine all the tools with a common interface concept, and teach them how to work together without further ado. This is especially important for GUI applications, since they usually find it difficult to find a common language. In addition to the ability to copy-paste text, they have no other means of interaction.
At the same time, it is interesting that users of the command line already have on hand perfectly-designed and time-tested Unix tools. These tools from the very beginning have a common interface in the form of streams of text and files due to the “everything is a file” principle embedded in the Unix architecture. Almost everything in Unix is built on top of files and streams, which are the common interface we are looking for. Forty years of development of these tools allow Unix to be as capable as possible with a full-fledged IDE.
Great idea
This approach did not remain the domain of only white-haired Unix veterans; around the modern incarnations of Vi and Emacs (Vim and GNU Emacs) formed a community of developers working on extensions for any type of work with the text. For both editors there are plugins for any programmer tasks, and a number of them I would call vital.
It seems to me that ultimately the developers of the extensions strive to turn the named text editors into real IDEs. Often you can find posts that Vim or Emacs can never leave in the process.
But, I think, cram into the text editor abnormal features it is not the right approach to the problem. Bram Moolenaar, the author of Vim, seems to largely agree with me, judging by: help design-not. The command line is always available via Ctrl-Z, and its mature, well-integrated toolkit will, if possible, plug any text editor into the belt.
About this series of publications
In this series of posts, I will go through the 6 most important properties of the IDE and give examples of how the basic Linux tools when working together make it easy to use them to implement these qualities. This is by no means an exhaustive review, and the means I’m going to talk about are not the only possible choice.
- File and Project Management - ls, find, grep / ack, bash
- Text editor and editing tools - vim, awk, sort, column
- Compiler and / or interpreter - gcc, perl
- Build tools - make
- Debugger - gdb, valgrind, ltrace, lsof, pmap
- Version control - diff, patch, svn, git
What I will not talk about
I don't think IDEs are bad; they are great, which is why I'm trying to argue that Unix can be used in a similar way, or at least think of Unix as such. I'm also not going to say that Unix is always the best tool for programming tasks; probably, it is much better sharpened for development in C, C ++, Python or Shell than for such mainstream languages as Java or C #, especially in writing complex GUI applications. Also, I'm not going to persuade you to throw at the dump the hard-won knowledge of Eclipse or Microsoft Visual Studio in favor of the somewhat esoteric world of the command line. I just want to show you what we do on the other side of the fence.
Unix as IDE: IntroductionUnix as IDE: FilesUnix as IDE: Working with TextUnix as IDE: Compile