Профессиональные программисты, как новички, так и профессионалы, нередко являются сторонниками концепции IDE, или «интегрированной среди разработки». И вправду, удобно иметь самые необходимые средства организации, написания, поддержки и тестирования кода в одном приложении с единым интерфейсом для всего многообразия инструментов. Вдобавок, среда, специально спроектированная для программирования на разных языках, как правило, имеет ряд преимуществ, таких как автодополнение, проверка и подсветка синтаксиса.
Подобные средства есть для всех распространенных настольных ОС, включая Linux и BSD, при этом многие из них совершенно бесплатны, засим вряд ли имеет смысл кодить в Блокноте Windows, в nano, или при помощи cat.
Однако, в среде поклонников Unix гуляет в разнообразных вариациях мем о том, что «Unix — это IDE», в том смысле, что средства, которыми разработчики располагают в терминале, легко реализуют основные возможности современных IDE. Вы можете соглашаться или отказываться назвать Unix «IDE» в том самом смысле, что и Eclipse или Microsoft Visual Studio. Так или иначе, вас скорее всего удивит, насколько законченную среду разработки может являть собой скромный Bash.
В каком смысле Unix — это IDE?
Смысл использования IDE состоит в том, чтобы объединить все инструменты общей концепцией интерфейса, и без лишних мучений научить их совместной работе. Это особенно важно для GUI-приложений, поскольку они обычно с большим трудом находят общий язык. Кроме возможности копипастить текст, у них нет других средств взаимодействия.
При этом интересно, что пользователи командной строки уже имеют под рукой отлично спроектированные и прошедшие проверку временем инструменты Unix. Эти инструменты с самого начала имеют общий интерфейс в виде потоков текста и файлов по причине заложенного в архитектуру Unix принципа «все является файлом». Почти все в Unix строится поверх файлов и потоков, которые и являются искомым общим интерфейсом. Сорок лет развития этих инструментов позволяют Unix по возможностям не уступать полновесным IDE.
Отличная идея
Такой подход не остался уделом только лишь убеленных сединой ветеранов Unix; вокруг современных воплощений Vi и Emacs (Vim и GNU Emacs) образовались сообщества разработчиков, работающие над расширениями для любых видов работы с текстом. Для обоих редакторов есть плагины под любые программистские задачи, и ряд из них я, Vim-зависимый человек, назвал бы жизненно важными.
Мне кажется, что в конечном счете разработчики расширений стремятся превратить названные текстовые редакторы в настоящие IDE. Нередко можно встретить посты о том, что Vim или Emacs можно вообще не покидать в процессе работы.
Но, думается, впихивать в текстовый редактор несвойственные ему возможности не есть верный подход к проблеме. Bram Moolenaar, автор Vim, похоже, в значительной степени согласен со мной, если судить по :help design-not. Командная строка всегда доступна по Ctrl-Z, и ее зрелый, хорошо интегрированный внутри себя инструментарий по возможностям заткнет за пояс любой текстовый редактор.
О этой серии публикаций
В этой серии постов я пройдусь по 6 важнейшим свойствам IDE и дам примеры того, как базовые средства Linux при совместной работе позволяют с легкостью использовать их для реализации этих качеств. Это ни в коем случае не исчерпывающий обзор, и средства, о которых я буду рассказывать, не единственно возможный выбор.
- Управление файлами и проектами — ls, find, grep/ack, bash
- Текстовый редактор и средства редактирования — vim, awk, sort, column
- Компилятор и/или интерпретатор — gcc, perl
- Средства сборки — make
- Отладчик — gdb, valgrind, ltrace, lsof, pmap
- Контроль версий — diff, patch, svn, git
О чем не буду говорить
Я не считаю, что IDE плохи; они великолепны, как раз поэтому я и пытаюсь утверждать, что Unix можно использовать аналогично, или по крайней мере думать о Unix в таком качестве. Я также не собираюсь утверждать, что Unix — всегда лучшее средство для задач программирования; вероятно, он гораздо лучше заточен для разработки на C, C++, Python или Shell, чем для таких мейнстримных языков, как Java или C#, особенно в части написания сложных GUI-приложений. Также я не собираюсь убеждать вас выбросить на свалку тяжко выстраданное знание Eclipse или Microsoft Visual Studio в пользу несколько эзотеричного мира командной строки. Я лишь хочу показать вам, чем мы занимаемся по ту сторону ограды.
Продолжение следует
Автор: kamelopardus