Почему Емакс?
Недавно участвовал в дискуссии о Емаксе и понял: даже опытные разработчики не понимают, что такое Емакс и зачем он нужен. Наверное, и ваш знакомый травит байки про сломанные руки и скобочки? Кидайте ему этот линк.
Выложим багаж: Емакс – мощнейший тексовый редактор. В пользу Емакса говорят несколько факторов. Наверное, вы ждете чего-то в духе “вот этой фичи в ИДЕ нет, или она требует на два клика больше”. Нет, список ниже – фундаментальные вещи.
Все известные программисты работают либо Емаксе, либо в Виме. Линус Торвальдс, Гвидо ван Россум, Армин Ронахер, Джо Армстронг и другие. Согласитесь, у них должны быть деньги на покупку самых крутых ИДЕ. Почему один человек пишет в Емаксе интерпретатор языка или ОС, а другой не может пофиксить в Эклипсе глючный интернет-магазин? Что вынудило профессионалов использовать бородатое поделие вместо передовых средств?
Гомогенность. Про нее я рассказывал в докладе про Кложу. (Не нравится слово – подойдет “мономорфность”). Гомогенность означает единообразие интерфейса на всех уровнях системы. Под интерфейсом понимаем не отображение окошка, а соглашение о том, как взаимодействуют уровни системы.
Лисп – гомогенный язык. Любая конструкция лиспа – S-выражение, и ничто другое. Интерпретатор Лиспа на Лиспе занимает 15 строк. Это важно для дальнейшего объяснения.
Емакс – это рантайм старенького Лиспа, поэтому перенимает черты языка. В Емаксе есть только буферы. Буфер может быть связан с файлом, а может и нет. Буфер может выводить текст, а может и считывать. В буфере может быть файл, терминал, список процессов, результат поиска (find, grep). Однако, каждый буфер подчиняется единым правилам. Перемещение по тексту, навигация по семанической структуре, выделение, копирование и вставка работают для буферов одинаково.
Гомогенность в корне отличает Емакс от классических ИДЕ типа Пайчарма
и Идеи. В них много окошек, и каждое живет своей жизнью, подчиняется
своим правилам. Скажем, в Емаксе результат поиска – это текстовый
буфер, и я могу искать в нем же встроенным поиском по C-s
. Я могу
настроить подсветку по регулярному выражению для любого буфера –
потому что с точки зрения Емакса нет разницы, подсвечивать код,
маркдаун или шелл.
Гомогенность упрощает. Я не должен знать, как работает то или иное окно, я просто работаю. Растущая сложность систем – главная проблема разработчика. Мы используем сто утилит для написания кода, дебага, деплоя. У каждой свои параметры и баги. Так пусть хоть что-то из окружения работает просто, не выкручивая мозг.
Емакс и Вим заставляют отказаться от мышки. Задумывались ли вы, как неэффективно использовать аналоговый манипулятор для работы с цифровым устройством? Мышка удобна для игр и оконного интерфейса, когда элементы расположены в пространстве. Емакс ожидает от пользователя ввод команд, которые не зависят от положения курсора или разрешения экрана. Представьте, что у вас экран размером со стадион, а значимые элементы интерфейса в накрест лежащих углах. На перемещение курсора уйдет 10 минут, а на ввод команды – доли, как и прежде.
Конечно, это экстраполяция. И все же работа с мышью очень неэффективна. ИДЕ не поощрают отказываться от мыши. Видел сто раз, как программист водит мышкой по ниспадающим менюшкам вместо того, чтобы выучить команду.
Емакс – это очередной рубеж в карьере разработчика. И не потому что освоить Емакс сложно (на мой взгляд, намного легче Вима). Начать работать в этих двух редакторах означает настроить мозг на определенный лад, впитать ту философию, что заложили ученые бородачи 40 лет назад. Инструмент не сделает из новичка мастера. Но точно уверен, что с Емаксом я стал работать гораздо продуктивней.
Современные ИДЕ – это бизнес. Со всех сторон я слышу, что они помогают, улучшают. Их пропихивают в образовательные учреждения (Пайчарм со своим edu-project), чтобы юные умы не видели терминалов, а сразу писали код. Бизнес-адепты ИДЕ с пеной у рта докажут, что писать без коммерческого пакета нельзя и убыточно для бизнеса. Я думаю, понятно почему?
Хорошо, в одном из прошлых проектов я писал в Емаксе, коллега - в Саблайме. Проект – огромный и сложный. И мы были на равных с теми, кто использовал Пайчарм. Как так могло получиться?
Много фишек Емакса могут работать хуже, чем отточеные аналоги в ИДЕ. И автокомплит, и индексирование, и эвристическое обнаружение ошибок. Вот только правда жизни в том, что голова и профессиональное чутье со временем вытесняет эти прибамбасы. Со временем видишь ляпы в коде без подсказок машины, автокомплит становится не нужен, отключаешь то, что так долго настраивал.
Емакс – лучшее средство для тех, кто пишет на разных языках. Я много программирую на Питоне, правлю Js, зависаю в маркдауне, балуюсть Кложей и Гоу. Есть ли ИДЕ с поддержкой всех этих технологий одновременно? Могу ли я настроить поведение системы для каждого языка?
Емакс ускоряет процесс и упрощает работу. В том и парадокс, что система 40-летней давности делает это лучше коммерческих ИДЕ. Жаль, что многие разработчики понимают это поверхностно.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter
Max, 9th Jul 2016, link
>автокомплит становится не нужен
Фабрику фабрики фабрик без автокомплита не создашь.
Ivan Grishaev, 9th Jul 2016, link , parent
Всегда интересовало, как фабрика фабрик помогает решить задачу?
Max, 9th Jul 2016, link , parent
Если стоит задача создать фабрику фабрик, то непосредственно
Ivan Grishaev, 9th Jul 2016, link , parent
Максим, фабрика фабрик -- нелепая задача, которая не ведет к цели. Цель -- получить качественный продукт. Как фабрика фабрик приблизит нас к цели, я не понимаю.
LeusMaximus, 15th Dec 2016, link
Есть ли у вас какие-либо рекомендации, с чего лучше начать изучение emacs (туториалы, статьи)?
LeusMaximus, 16th Dec 2016, link , parent
Все, вопрос отпал. Увидел вашу следующую статью про emacs :)
http://grishaev.me/emacs-story
Ivan Grishaev, 16th Dec 2016, link , parent
В Емакс встроен неплохой интерактивный туториал, остальное гуглится. Вспомнить конкретные источники не могу.
Макщ, 8th Aug 2023, link
Спасибо за пропаганду Емакса. Писал в Сублиме, было неудобно, что некоторые задачи не сделать без мыши. Поставил Емакс, накатил ваш инит-файл, допиливаю под себя. Первый день было тяжело, далее кайфую.