Emacs и «самоусиливающаяся производительность»


14

Короче говоря, мой вопрос для вас, хардкорных пользователей Emacs, таков : достигли ли вы этой «самоусиливающейся производительности», о которой говорит Стив Йегге ?

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

Вы действительно чувствуете, что расширение вашего Emacs в конечном итоге сделало вас в 10 раз более продуктивным , и ваша производительность продолжает расти в геометрической прогрессии, и так далее, и так далее?
Есть ли у вас примеры / опыт, которыми можно поделиться?

Что касается меня, я использовал и Emacs, и Vim для разработки (в настоящее время придерживаюсь Vim), мой .emacsи .vimrcоба достаточно настроены для удовлетворения моих потребностей, и я ценю мощь обоих этих редакторов. Но я не испытывал эту «самоусиливающуюся петлю» Emacs, и не встречал кого-то, кто это делал (конечно, это может быть потому, что я не очень хардкорный Emacser и еще не встречал столько Emacsers).

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

Но в любом случае, я был бы рад видеть поразительные примеры от сторонников Emacs, которые возвращают меня к Церкви Emacs.

Ответы:


15

В 10 раз продуктивнее ? Скорее всего, не. Я склонен думать, что мультипликативные факторы больше похожи на 1,1, что накапливается через некоторое время.

То, о чем говорит Стив Йегге, на самом деле является размышлением о том, чтобы быть экспертом в Emacs, и это очень редко. Люди, которые достигают этого мультипликативного эффекта, активно настраивают свой опыт работы с Emacs, написав elisp, чтобы адаптировать Emacs к своим конкретным потребностям. Например, Yegge писал ejacs . Интерпретация цитаты Yegge подразумевает, что вы настраиваете Emacs, чтобы упростить настройку / расширение Emacs.

Вот как я бы разбил различные уровни экспертизы применительно к Emacs:

  • Новичок знает , как запустить Emacs, перемещать курсор, внести некоторые изменения, выйти из Emacs.
  • Начинающий продвинутый знает , как поставить некоторые базовые настройки в их .emacsили полностью скопированы куски чужих .emacsв них. Они знают, как сделать глобальные привязки клавиш, requireвстроенные пакеты, включить второстепенные режимы.
  • Компетентные пользователи Emacs имеют большие .emacsфайлы, возможно, разбитые на несколько файлов. Они загружают и используют нестандартные пакеты, знают, как находить документацию для команд, режимов, просматривать существующие привязки клавиш, знакомы с различиями между второстепенными и мажорными режимами. Компетентные пользователи обычно поддерживают работу одного экземпляра Emacs в течение нескольких дней / недель, написание, компиляцию, запуск и отладку программ из Emacs.
  • Опытные пользователи могут свободно писать emacs lisp, создавать свои собственные интерактивные команды и легко писать второстепенные режимы. Опытные пользователи изучают код lisp в emacs, чтобы лучше понять используемые ими режимы, использовать отладчик elisp и обычно использовать низшие процессы (оболочки, процессы lisp, ...).
  • Опытные пользователи Emacs пишут новые основные режимы с нуля, смотрят и модифицируют код C для Emacs, знают, что такое рекурсивное редактирование , и используют его, используют межпроцессное взаимодействие для интеграции Emacs с внешними инструментами. Они также читают список рассылки emacs-devel .

А так как вы просите личного опыта, вот примеры того, что я лично сделал, чтобы я чувствовал, что я более продуктивен. Примечание: мне довелось работать в компании, в которой мы далеко не на переднем крае сред разработки, например, мы все еще используем CVS.

  • Я интегрировал Emacs с инструментом отслеживания ошибок: когда я делаю коммиты, он регистрирует имя файла и версию в полях для ошибки, а из Emacs я могу просматривать свои ошибки, назначать их, устранять их и т. Д.
  • Я написал мост, соединяющий мой продукт (дневная работа) и Emacs, что фактически делает мой продукт неполноценным процессом, позволяя мне вносить изменения в исходный код на лету.
  • Я расширил обработку тегов с помощью команды find-file-in-tags, которая предоставляет несколько ярлыков, подходящих для моей среды разработки.
  • Я написал режим, который принимает результаты регрессии и позволяет мне переходить к сбоям, проверять файлы журналов, перезапускать один или несколько тестов или вводить отладочный запуск с минимальными нажатиями клавиш.
  • Мой еженедельный отчет о состоянии (да, я использую Emacs для электронной почты) генерируется автоматически с использованием коммитов, которые я делал в течение недели.

Это изменения, которые я сделал, чтобы адаптировать Emacs к моей среде и рабочему процессу.

Я в 10 раз продуктивнее окружающих? Нет.

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

Это поразительные примеры? Нет. Я уверен, что многое из того, что я сделал, уже доступно в Visual Studio . Моя статья вернет вас к Церкви Emacs? Возможно нет.

Однако, если вы видите шаблон поведения в вашей среде разработки, и у вас есть этот зуд, который говорит вам: «Мне действительно не нужно делать X / Y / Z снова и снова, если бы я мог только ...», тогда Я рекомендую попробовать использовать Emacs, чтобы избавиться от этого зуда. Эта царапина может стать первым шагом на пути к самоподкреплению, о котором говорит Стив Йегге.

Небольшое примечание: я не знаю, что многие (какие-либо?) Действительно опытные пользователи Emacs активно используют сайты переполнения стека, или, по крайней мере, они не отвечают на вопросы, связанные с Emacs. Я говорю, что это основано на лучших пользователях для тегов emacs и elisp при переполнении стека.


+1, Хорошее применение модели навыков Дрейфуса к Emacs-fu. Для читателей, незнакомых с Дрейфусом: en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition
limist

Примечание: я лично считаю себя достаточно опытным пользователем Emacs, но я не настраиваю свой Emacs'en просто потому, что сталкиваюсь с таким количеством систем, что настройка параметров по умолчанию будет контрпродуктивной, а не просто выполнением работы.

11

Конечно, это свидетельство анекдотично, но ваш вопрос явно требует анекдотического свидетельства.

Я студент, занимающийся исследованиями в академической лаборатории, которая включает в себя множество научных вычислений, а также письма. В такой среде (например, python, SQL, учебные утилиты командной строки специального назначения, текстовые файлы, LaTeX / BibTeX) изучение emacs в значительной степени определяло разницу между ручным шпателем и экскаватором. После года Emacs (на котором я бы оценил себя твердым Компетентом с пальцем на ногах в Proficient), Мне не терпится решить проблемы, которых боятся мои товарищи по лаборатории. Не потому, что они ленивы, а я старательна, а потому, что срывать горы с помощью экскаватора весело и обременительно царапать горы шпателем. По крайней мере, два раза моя команда начала спорить о внесении некоторых сложных изменений в формат отчета, но обнаружила, что это задание уже выполнено, прежде чем они даже закончили спорить о том, кто должен был это делать. Regexp заменить + встроенный elisp.

Так что, в смысле первого порядка, да, emacs сделал меня гораздо более продуктивным.

Похоже, вы спрашиваете об увеличении производительности в смысле второго порядка: мои доходы от emacs составляют? Хотя я бы не оценил себя полностью как Proficient , не говоря уже о Yegge , я думаю, что начинаю видеть подножку экспоненциальной кривой, и что мое использование emacs делает дальнейшее emacsing еще более продуктивным. Немного краткой, анекдотичной статистики из репо, чтобы количественно оценить это:

  • В команде из 7 человек я отвечал за более половины коммитов. С поправкой на старшинство я по-прежнему совершаю почти в два раза чаще. Не потому, что я почти в два раза лучше, а потому, что emacs почти управляет контролем версий для меня. Поскольку я могу фиксировать, обновлять и объединять безболезненно, я регистрируюсь с меньшими дискретными порциями, как мы все должны делать. Но это означает, что я чувствую себя более свободным, чтобы идти на «большие риски» (я должен отметить, что мы пишем экспериментальный код для научных исследований, а не для производства), что означает, что я узнаю больше о программировании и своей теме.

  • В последнем отчете, который мы написали, svn blame говорит мне, что я отвечал за большее количество строк, чем три других автора вместе взятых . (Это не только потому, что у меня был последний коммит. Мне было интересно какое-то время, поэтому я начал отслеживать его, и результаты были довольно стабильными на протяжении истории версий.) Потому что я в 6 раз быстрее писателя? Нет: потому что emacs - это бензопила для текста. Это означает, что я могу делать те виды LaTeX-операций, которые никогда бы не удосужились попробовать. Это значит, что я больше понимаю о LaTeX, что делает меня еще более продуктивным в будущем.

  • 100% документации (как для кода, так и для внутренних исследовательских заметок) принадлежит мне. Потому что мои коллеги не заботятся о документации? Ну, меня это тоже не особо волновало, пока я не нашел режим орг. В то время как я, как правило, uber-type-B об этих вещах, org-mode превратился в легкую зависимость. Мгновенный экспорт из режима Org в приятный на вид html и LaTeX снял все барьеры на пути к ответственной документации и превратил ее в своего рода игру. Так что теперь я делаю это. Если бы этого не произошло, я бы этого не сделал, или, по крайней мере, я бы испугался, отложил бы это и позволил пиявке ментальной энергии.

Другие комментаторы предполагают, что причинно-следственная связь может быть точно обратной: возможно, emacs вознаграждает высокопродуктивного, что лишило бы уверенности гипотезу о том, что средний пользователь, скорее всего, получит какие-либо выгоды. Я мог бы также предложить своего рода самореализующийся эффект плацебо: сделал ли Emacs меня более продуктивным (и, конечно, мы никогда не узнаем, так как у меня нет идентичного близнеца, который не изучал Emacs), я имею конечно, пережил прозрение в моих отношениях со структурированным текстом. Я рад использовать emacs, что означает, что я использую его больше, а это значит, что я узнаю больше об этом, получаю больше удовольствия и т. Д. Когда я обнаружил режим BibTeX, я помню, как будто только что пригласил девушку на первое свидание.

Если вы пропустили это: emacs заставил меня вздрогнуть от мысли о редактировании библиографических баз данных. В моей работе это чего-то стоит, я думаю.


8

Например, на Facebook парень рядом со мной использовал Vim, а парень рядом с ним использовал Emacs. Они оба были быстры и чертовски продуктивны, и я приписываю это не редактору, который они использовали, а их собственному умению и пониманию.

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

Люди, которые заинтересованы в повышении / оптимизации своей продуктивности, как правило, более продуктивны из-за своей направленности или поведения в жизни, независимо от эффективности самой производительности.

Это можно подытожить следующим образом: «Вы не лучший разработчик, потому что вы используете Emacs или Vim, но те люди, которые достаточно преданы, чтобы овладеть этими инструментами, как правило, являются хорошими разработчиками» [1].

  1. Это ужасное обобщение, поэтому оно не является абсолютной истиной и в любом случае ничего не значит (кто такой хороший / плохой разработчик? И т. Д.)

4

Я пользуюсь Emacs уже около 20 лет, и должен сказать, что нет, я не достиг этой точки.

Чтобы добраться до «emacsvana», о котором он говорит, вам действительно нужно стать экспертом по elisp . Я немного поработал, но на самом деле мои навыки заканчиваются тем, что я могу настроить новый режим, который написал кто-то другой. Попытка отладить (или не дай Бог исправить) чужой elisp немного за мной, и писать свой с нуля даже не мысль.

Это от кого-то, кто на самом деле ранее использовал lisp и имеет более чем 20-летний профессиональный опыт разработки программного обеспечения.

Возможно, я просто что-то вроде чего-то, но я подозреваю, что очень немногие пользователи Emacs дошли до того, о чем он говорит.

В этом нет ничего плохого. Я знаю, как создавать макросы, что само по себе делает загрузку в Emacs более продуктивной, чем в любом другом текстовом редакторе. В некоторых случаях это более чем в 10 раз продуктивнее. Тем не менее, это не делает меня лучше, чем кто-то, кто знает vi одинаково хорошо (поскольку он также может делать макросы).


Re: ваш текст жирным шрифтом, я был бы гораздо более удивлен, если бы большинство из 20-летних пользователей Emacs просто знали, как сделать нечетный макрос. Кажется, анафема для всего, что Emacs так блаженно не осознает, что это за потенциал.
ocodo

4

Нет, нет, и я никогда не слышал о ком-либо, кто имеет. Я не думаю, что это происходит. Я думаю, что Стив Йегге делает то, что делают популярные блогеры: он делает противоречивое, чрезмерное заявление, чтобы донести свою точку зрения и быть более заметным. Я не думаю, что он имеет это в виду. Вероятно, он намеревается сообщить следующее: «Emacs действительно эффективен с самого начала, и если вы будете много настраивать его, вы узнаете, как с ним работать еще эффективнее, что здорово, ммм-кей?»

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


4

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

Если у вас есть файл в 10000 строк, в который вы должны добавить номер строки в начало каждой строки, вы также можете потратить полдня, делая это вручную в Блокноте.

Или запустите макрос или используйте встроенную функцию Emacs для такого рода вещей. Тогда вы сэкономите половину рабочего дня и увеличите производительность более чем в 10 раз.

Речь идет об обнаружении повторения и его устранении. Это требует интеллекта, опыта, практики и навыков, поэтому не все, кто использует Emacs, увидят преимущества в производительности.


Или вы можете сделать простую обработку текста sedи оставить себе выходной.
Джош К

@Josh K: Или Perl, или WKK, или оболочка с пастой. Какой бы инструмент ты не знал лучше, правда.
Zan Lynx

даже написание программы на C для этого не займет больше 5 минут
user281377

2
Emacs не очень подходит для работы с ОЧЕНЬ большими файлами. Слишком вяло.

2

Я не знаю о «N раз быстрее», но некоторое осторожное добавление служебных функций может сделать Emacs довольно хорошим помощником при заполнении шаблонов. Добавьте к этому немного знания целевого языка, и вы можете делать такие вещи, как «сказать emacs, что вы хотите создать функцию, сообщить ему входные аргументы (типы, если язык требует информацию о типах) и возвращаемое значение, чтобы emacs создал каркас для дальнейшего использования». заполнение".

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.