Недавно участвовал в дискуссии о Емаксе и понял: даже опытные разработчики не понимают, что такое Емакс и зачем он нужен. Наверное, и ваш знакомый травит байки про сломанные руки и скобочки? Кидайте ему этот линк.

Выложим багаж: Емакс – мощнейший тексовый редактор. В пользу Емакса говорят несколько факторов. Наверное, вы ждете чего-то в духе “вот этой фичи в ИДЕ нет, или она требует на два клика больше”. Нет, список ниже – фундаментальные вещи.

Все известные программисты работают либо Емаксе, либо в Виме. Линус Торвальдс, Гвидо ван Россум, Армин Ронахер, Джо Армстронг и другие. Согласитесь, у них должны быть деньги на покупку самых крутых ИДЕ. Почему один человек пишет в Емаксе интерпретатор языка или ОС, а другой не может пофиксить в Эклипсе глючный интернет-магазин? Что вынудило профессионалов использовать бородатое поделие вместо передовых средств?

Гомогенность. Про нее я рассказывал в докладе про Кложу. (Не нравится слово – подойдет “мономорфность”). Гомогенность означает единообразие интерфейса на всех уровнях системы. Под интерфейсом понимаем не отображение окошка, а соглашение о том, как взаимодействуют уровни системы.

Лисп – гомогенный язык. Любая конструкция лиспа – S-выражение, и ничто другое. Интерпретатор Лиспа на Лиспе занимает 15 строк. Это важно для дальнейшего объяснения.

Емакс – это рантайм старенького Лиспа, поэтому перенимает черты языка. В Емаксе есть только буферы. Буфер может быть связан с файлом, а может и нет. Буфер может выводить текст, а может и считывать. В буфере может быть файл, терминал, список процессов, результат поиска (find, grep). Однако, каждый буфер подчиняется единым правилам. Перемещение по тексту, навигация по семанической структуре, выделение, копирование и вставка работают для буферов одинаково.

Гомогенность в корне отличает Емакс от классических ИДЕ типа Пайчарма и Идеи. В них много окошек, и каждое живет своей жизнью, подчиняется своим правилам. Скажем, в Емаксе результат поиска – это текстовый буфер, и я могу искать в нем же встроенным поиском по C-s. Я могу настроить подсветку по регулярному выражению для любого буфера – потому что с точки зрения Емакса нет разницы, подсвечивать код, маркдаун или шелл.

Гомогенность упрощает. Я не должен знать, как работает то или иное окно, я просто работаю. Растущая сложность систем – главная проблема разработчика. Мы используем сто утилит для написания кода, дебага, деплоя. У каждой свои параметры и баги. Так пусть хоть что-то из окружения работает просто, не выкручивая мозг.

Емакс и Вим заставляют отказаться от мышки. Задумывались ли вы, как неэффективно использовать аналоговый манипулятор для работы с цифровым устройством? Мышка удобна для игр и оконного интерфейса, когда элементы расположены в пространстве. Емакс ожидает от пользователя ввод команд, которые не зависят от положения курсора или разрешения экрана. Представьте, что у вас экран размером со стадион, а значимые элементы интерфейса в накрест лежащих углах. На перемещение курсора уйдет 10 минут, а на ввод команды – доли, как и прежде.

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

Емакс – это очередной рубеж в карьере разработчика. И не потому что освоить Емакс сложно (на мой взгляд, намного легче Вима). Начать работать в этих двух редакторах означает настроить мозг на определенный лад, впитать ту философию, что заложили ученые бородачи 40 лет назад. Инструмент не сделает из новичка мастера. Но точно уверен, что с Емаксом я стал работать гораздо продуктивней.

Современные ИДЕ – это бизнес. Со всех сторон я слышу, что они помогают, улучшают. Их пропихивают в образовательные учреждения (Пайчарм со своим edu-project), чтобы юные умы не видели терминалов, а сразу писали код. Бизнес-адепты ИДЕ с пеной у рта докажут, что писать без коммерческого пакета нельзя и убыточно для бизнеса. Я думаю, понятно почему?

Хорошо, в одном из прошлых проектов я писал в Емаксе, коллега - в Саблайме. Проект – огромный и сложный. И мы были на равных с теми, кто использовал Пайчарм. Как так могло получиться?

Много фишек Емакса могут работать хуже, чем отточеные аналоги в ИДЕ. И автокомплит, и индексирование, и эвристическое обнаружение ошибок. Вот только правда жизни в том, что голова и профессиональное чутье со временем вытесняет эти прибамбасы. Со временем видишь ляпы в коде без подсказок машины, автокомплит становится не нужен, отключаешь то, что так долго настраивал.

Емакс – лучшее средство для тех, кто пишет на разных языках. Я много программирую на Питоне, правлю Js, зависаю в маркдауне, балуюсть Кложей и Гоу. Есть ли ИДЕ с поддержкой всех этих технологий одновременно? Могу ли я настроить поведение системы для каждого языка?

Емакс ускоряет процесс и упрощает работу. В том и парадокс, что система 40-летней давности делает это лучше коммерческих ИДЕ. Жаль, что многие разработчики понимают это поверхностно.