Почему Emacs?

от автора

    Почти каждый программист, который хоть немного любит свою работу и не привязан к конкретному языку программирования, рано или поздно придет к использованию Emacs… или vim… или STE… или еще к одному из множества текстовых редакторов.

    Собственно, почему именно Emacs? Причина первая и самая главная — он мне нравится, за причинами же менее вескими, но более объективными добро пожаловать под кат.

        В процессе чтения этой статьи у пользователей других редакторов может появиться желание воскликнуть, что в их редакторе такое тоже возможно. Это правда — и это замечательно, но не суть важно — в конечном счете каждый пользователь все равно выберет себе редактор по вкусу.

Что это такое?

    Если отбросить шутки, то Emacs — текстовый редактор. Текстовый редактор с колоссальными возможностями для расширения. Многие редакторы в той или иной мере расширяемы, в случае же Emacs важна именно степень расширяемости. Именно она выделяет его среди многих других.

    Часть редактора написана на С — эта часть отвечает за базовое взаимодействие с ОС, отрисовку окон, ввод-вывод. Практически весь код, отвечающий за работу с текстом, написан на elisp, или же является оберткой для С-шных функций, которые можно вызывать из того же elisp.

    Именно такой подход позволяет сделать из Emacs что угодно — почтовый клиент, броузер, терминал, клиент для wordpress, интерфейс для MySQL и многое, многое другое. Emacs, являясь текстовым редактором, является также и мощной платформой для создания приложений.

    Еще одним важным отличием от большинства расширяемых текстовых редакторов заключается в том, что менять поведение Emacs можно прямо на ходу — вы можете переписать функцию переключения между вкладками так, чтобы она не отображала в списке табов файлы с раширением .txt, не перезапуская редактор. Вы можете скопировать код плагина который нашли в интернете, и который, как вы считаете, понадобится вам только один раз, во временный буфер(вкладку), выполнить его и таким образом получить весь функционал в редактор. А можете чуть-чуть подредактировать плагин, выполнить — и у вас тут же будет своя версия, нужная именно вам.

Кому не нужен Emacs?

    Если вы программируете на Java или C#, то скорее всего Emacs не даст вам тех же возможностей по работе с кодом, к которым вы уже привыкли. Если вы работаете над поддержкой большого проекта, где большая часть работы заключается в рефакторинге, то Emacs вам тоже не особо поможет. Если для вас важнее интеграция с JIRA, GitHub, или развеселый отладчик, то опять таки — Emacs вам не нужен.

    При этом все равно находится значительное количество людей, которые пишут код для указанных языков в Emacs.

    Если вы испытываете непрерывное желание рефакторить по мелочи, борясь за совершенство кода, например, переименовывать переменные, менять иерархию классов, интерфейсы методов и т.п. — то Emacs тоже вам скорее всего не нужен. Но сколько-то серьезная поддержка рефакторинга существует на сегодняшний день хорошо если для полудюжины языков, и если ваш язык не входит в это число, то почему бы и не попробовать Emacs?

    Есть обширная категория людей, которые работают программистами, но которым программирование неинтересно. Они приходят на работу, пишут код, изучают новые технологии по необходимости, но программирование для них есть лишь способ заработка, интересы и увлечения у них другие. Ну не надо им это все. Когда они выходят из офиса, то забывают все рабочие дела и живут обычной человеческой жизнью. Если вы один из таких людей — Emacs вам просто не нужен.

А кому он нужен?

    Если вы относитесь к одной из следующих категорий людей, то Emacs вам попробовать стоит(если вы конечно и так уже не счастливый пользователь похожего редактора):

  • вы пишете на языках, поддержка которых в ведущих IDE далека от совершенства

  • вы пишете на нескольких языках, и вам надоело каждый раз переключаться в нужную IDE

  • вы признаете, что эргономика, скорость работы и отзывчивость большинства современных IDE оставляет желать лучшего

  • вам лень слишком часто тянуться к мыши для выполнения каких-либо действий

  • вы хотите иметь полностью унифицированную среду разработки на работе и дома, или просто на нескольких компьютерах сразу

  • вы хотите иметь удобную среду для организации заметок и ведения справочной информации, к которой можно обращаться не покидая редактора

  • вы занимаетесь рефакторингом по делу — т.е. вам нужно не сделать код идеальным, а привести абсолютно нечитаемый код к состоянию поддерживаемости

  • вам часто приходится работать с двумя-тремя файлами, из которых вы перебиваете куски спецификаций, или же сравниваете логи, или же переписываете с языка на язык… И хотели бы чтобы все это умещалось на экране.

  • вам нужна среда, которая будет запущена неделями и не будет потреблять огромное количество памяти, тормозить, держа при этом открытой сотню файлов и временных буферов

  • вы испытываете потребность в автоматизации редактирования большого числа файлов

  • вы используете многословный язык, который поощряет написание большого количества вспомогательного кода

  • вам постоянно чего-то не хватает в стандартных решениях и вы хотите малой кровью дописывать необходимые мелочи под себя

  • вам нужны продвинутые возможности по обработке текста — многострочное редактирование, редактирование прямоугольных областей, макросы, передача кусков выделенного текста на обработку внешним утилитам и т.п.

  • у вас бывали ситуации, когда из-за удивительной политики безопасности вы проводили часы редактируя что-то через ssh, не имея возможности использовать sshfs, поскольку та самая политика разрешает только один единовременный коннект(хотя если быть честным — vim оказывается доступным на таких серверах гораздо чаще)

  • вы предпочитаете универсальный способ работы со всем — текстом, файлами, системой контроля версий, терминалом, базой данных
Мифы о Emacs

1. Emacs устарел

    Emacs такой обладает теми же возможностями, что и остальные текстовые редакторы, и даже превосходит многие из них. Релизы выходят регулярно, количество расширений на гитхабе и их форков только множится. В списках рассылки разработчиков регулярно проводятся дискуссии на тему чистки устаревшего кода, который никто не использует. Сами чистки тоже проводятся. Практически все фичи, которые появляются в популярных IDE или других редакторах, быстро реализуются сообществом и под Emacs.

    Тем не менее вы вполне можете попасть в коллектив, где за использование текстового редактора вместо серьезной(тм) IDE вас будут презирать. Но это скорее проблема коллектива, а не Emacs.

2. Emacs не годится для разработки в современных условиях

    В Emacs есть интеграция с отладчиками для многих языков. Навигация по коду также присутствует. Этого достаточно для написания приложений любой сложности, при этом ваша продуктивность не упадет по сравнению с работой в IDE, за исключением Java и C#. Эти 2 языка являются уникальным примером того, когда теряешься в догадках — создается ли IDE под язык или же язык под IDE?

    Совершенно верно, что Emacs «не понимает», что перед ней код, а не текст. Поэтому проверки типов у вас не будет, «умного» автодополнения тоже(ну т.е. иногда будет — для некоторых языков). Забудьте про просмотр документации прямо в IDE, хотя ладно — для некоторых языков такая фича есть. Никаких умных рефакторингов. Предупреждений и советов, кроме тех, что способен выдать компилятор или интерпретатор, тоже не будет.

    Тем не менее это не помешает вам писать хороший код. А также писать код быстро и эффективно. Вообще для того, чтобы при использовании полновесной IDE вместо Emacs ваша продуктивность выросла сколько-нибудь значительно, ваша работа должна быть очень и очень специфичной.

    Я проводил эксперимент — импортировал в PHPStorm текущий проект на PHP размером в 400 000 SLoC и пробовал работать в нем несколько дней. После этого я вернулся на Emacs и… единственная показавшаяся мне полезной, функция, которая была в IDE, но отсутствовала в Emacs была добавлена в оный после нескольких минут гугления. Это не отменяет того, что в PHPStrom есть куча вещей, которые в Emacs отсутствуют. Другой вопрос, и вопрос важный, — так ли нужны эти фичи для продуктивности?

    Все описанное выше — мое субъективное мнение, но, с другой стороны, достоверных исследований того как IDE повышает продуктивность работы по сравнению с хорошим текстовым редактором, мне найти так и не удалось. Может быть вам повезет больше.

3. Emacs сложен для освоения

    Он не сложен, но обладает огромным количеством разных функций, которые были добавлены за более чем два десятилетия его существования. Само освоение редактора занимает неделю — за это время вы изучите основные приемы редактирования и привыкните к сочетаниям клавиш. Этого будет достаточно, чтобы чувствовать себя комфортно во время работы.

    Второй этап — это выбор среди того множества функций именно тех, что нужны вам для работы. Он может растянуться на месяцы и даже годы. А скорее всего не закончится никогда — для Emacs постоянно выходят новые расширения, которые могут вам пригодиться.

К чему стремиться

    Чтобы проникнуться духом олдскульного всемогущества рекомендую к просмотру следующие видео:

    Впрочем, это все не важно — почувствовать всю эффективность Emacs можно только самому, через видео это не передать. В качестве обучающего видео на ночь, а также для закрепления понимания сути Emacs, можно посмотреть серию лекций от нашего соотечественника:

Заключение

    Я намеренно ничего не сказал про остальные популярные редакторы с похожей идеологией — Vim, Sublime Text Editor, Notepad++. Пусть лучше пользователи этих редакторов сами расскажут про их плюсы. А вы уже сегодня можете попробовать начать осваивать Emacs — хотя бы для того, чтобы убедиться что он вам не подходит. Ну а если вы уже выбрали себе другой редактор, то тем более попробуйте — врага надо знать в лицо.

ссылка на оригинал статьи http://habrahabr.ru/post/190790/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *