Emacs和“自我增强性能”


14

简而言之,对于您的Emacs核心用户,我的问题是:您实现了Steve Yegge所说的 “自我增强性能” 吗?

Emacs具有自我托管功能:在其中编写东西可以使环境本身更强大。这是一个反馈循环:递归的,自我增强的,可乘的效应之所以发生,是因为您正在增强用于创建增强功能的环境。

您是否真的觉得增强Emacs最终使您的生产率提高了10倍,并且您的生产率继续呈指数级增长,依此类推?
你有一些例子/经验可以分享吗?

对于我来说,我同时使用Emacs和Vim进行开发(目前坚持使用Vim),.emacs并且我和Im .vimrc都进行了适当配置以满足我的需求,并且我欣赏这两个编辑器的强大功能。但是我没有经历过Emacs的“自我强化循环”,也没有遇到过这样做的人(当然,这可能是因为我不是真正的Emacser顽固派,并且还没有遇到那么多Emacsers)。

例如,在Facebook上,我旁边的那个家伙正在使用Vim,而他旁边的那个家伙正在使用Emacs。他们两个都像地狱般迅速而富有成果,我不认为这是因为他们使用的编辑器,而是他们自己的才智和态度。

但是无论如何,我很高兴看到埃马克斯支持者的惊人例子使我回到埃马克斯教堂。

Answers:


15

生产力提高10倍?不见得。我倾向于认为乘法因子更像1.1,它在一段时间后会累加。

Steve Yegge所说的实际上是对成为Emacs 专家的一种反映,而这些很少见。实现这种乘法效果的人们通过编写elisp来定制Emacs以满足他们的特定需求,从而积极地定制Emacs体验。例如,Yegge写了ejacs。解读Yegge报价严格意味着您正在自定义Emacs,以使其更易于自定义/扩展Emacs。

这是我分解适用于Emacs 的各种专业知识的方式:

  • 一个新手知道如何运行的Emacs,移动光标,做一些修改,退出Emacs。
  • 一个高级的初学者知道如何将一些基本的自定义内容放入他们的中.emacs,或者已经将其他人的完整内容完全复制.emacs到了他们中。他们知道如何进行全局键绑定,require内置程序包,启用次要模式。
  • 合格的 Emacs用户拥有大.emacs文件,可能会分成多个文件。他们下载并使用非标准软件包,知道如何查找命令,模式的文档,查看现有的键绑定,对次要模式和主要模式之间的差异感到满意。合格的用户通常会将单个Emacs实例运行几天/几周,从他们的Emacs编写,编译,运行和调试程序。
  • 熟练的用户乐于编写emacs lisp,创建自己的交互式命令,并乐于编写次要模式。熟练的用户可以查看emacs lisp代码以更好地了解他们所使用的模式,使用elisp调试器以及通常使用劣等流程(shell,lisp流程等)。
  • 熟练的 Emacs用户从头开始编写新的主要模式,查找和修改Emacs的C代码,了解什么是递归编辑并使用它,使用进程间通信将Emacs与外部工具集成。他们还阅读了emacs-devel邮件列表。

由于您是在寻求个人经验,因此这里列举了一些我个人所做的事,这些例子使我觉得自己效率更高。注意:我碰巧在一家不适合开发环境前沿的公司工作,例如,我们仍然使用CVS。

  • 我将Emacs与错误跟踪工具集成在一起:提交时,它将在错误字段中记录文件名和版本,然后从Emacs中查看我的错误,分配它们,解决它们,等等。
  • 我写了一个连接我的产品(日常工作)和Emacs的桥梁,有效地使我的产品成为劣等的流程-使我能够即时更改源代码。
  • 通过在标签中查找文件扩展了TAGS处理,它提供了许多适合我的开发环境的快捷方式。
  • 我编写了一种模式,该模式可以获取回归结果,并使我能够跳到故障,检查日志文件,重新运行一个或多个测试或以最小的击键次数进入调试运行。
  • 我每周的状态报告(是的,我使用Emacs进行电子邮件发送)是使用我整个星期内所做的提交自动生成的。

这些是我为针对环境和工作流程专门定制Emacs而进行的更改。

我的工作效率比周围其他人高10倍吗?没有。

但是,对于我的日常工作,我可以通过几次击键来完成许多其他人在其非定制环境中花费很多时间才能完成的任务,并且通常需要他们在编辑器和Web浏览器或Shell之间切换。 。

他们是令人震惊的例子吗?否。我确定我所做的很多事情都已经在Visual Studio中提供了。我的文章会让您回到埃马克斯教堂吗?可能不会。

但是,如果您在开发环境中看到一种行为模式,并且有这样的诉求告诉您:“我真的不必一遍又一遍地执行X / Y / Z,如果我只能...”,那么我建议尝试使用Emacs抓痒。这种刮擦可能是史蒂夫·耶格(Steve Yegge)所说的“自我强化”道路的第一步。

次要注意事项:我不知道有很多(任何?)真正熟练的Emacs用户正在积极使用堆栈溢出站点,或者至少,他们没有回答与Emacs相关的问题。我说这是基于堆栈溢出的emacselisp标签的最高用户。


+1,将Dreyfus技能模型很好地应用于Emacs-fu。对于不熟悉Dreyfus的读者:en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition
limist

注意:我个人认为自己是一个非常熟练的Emacs用户,但我之所以不能自定义Emacs'en是因为遇到如此多的系统,因此自定义默认设置会适得其反,而不是仅仅完成工作。

11

当然,这些证据是轶事,但是您的问题明确要求提供轶事证据。

我是一名在学术实验室从事研究的学生,该实验室涉及科学计算和写作领域。在这样的环境中(想想:python,SQL,学术用途的命令行工具,文本文件,LaTeX / BibTeX),学习emacs大致可以使抹泥刀和反铲挖掘机有所不同。经过一年的emacs(在此情况下,我将自己定为一个坚实的主管,并且脚趾浸入了Proficient),我发现自己渴望解决我的同事所担心的问题。不是因为他们懒惰而且我很勤奋,而是因为用反铲力将山推倒并用刀在山上刮擦很有趣。至少有两次,我的团队开始争论要对报告的格式进行一些复杂的更改,却发现任务已经完成,甚至还没有完成关于谁必须做的争论。正则表达式替换+嵌入式elisp。

因此,从一阶意义上讲,是的,emacs使我的工作效率提高了很多。

看来您是在从第二个层面上询问生产率的提高:我的emacs收益是否复合?尽管我不会完全评价自己的熟练程度,更不用说Yegge了,但我的确认为我已经开始看到指数曲线的脚步了,而我对emacs的使用使进一步的emacs更具生产力。回购中的一些简短的轶事统计数据可以对此进行量化:

  • 在7人一组的团队中,我负责了一半以上的提交。调整资历,我仍然几乎要犯两次。不是因为我的性能几乎是我的两倍,而是因为emacs几乎为我处理了版本控制。因为我可以毫不费力地进行提交,更新和合并,所以像我们所有人都应该做的那样,我使用较小的离散块进行检入。但这意味着我更愿意承担“更大的风险”(我应该指出,我们正在为科学研究而不是为生产而编写实验代码),这意味着我可以学习更多有关编程和主题的知识。

  • 在我们写的上一份报告中,svn blame告诉我,我所负责的行数是其他两位作者加起来的三倍。(这不仅是因为我有最后一次提交。我对此感到好奇,所以我开始跟踪它,并且在整个版本历史记录中结果都相当稳定。)因为我的编写器速度快了6倍?否:因为emacs是文本的电锯。这意味着我可以做以前从未尝试过的乳胶手术。这意味着我最终对LaTeX有了更多的了解,这使我将来的工作效率更高。

  • 100%的文档(包括代码和内部研究说明)都是我的。因为我的同事不关心文档?好吧,在我发现组织模式之前,我也不是很在乎。虽然我通常在这些事情上是超级B型,但org-mode却概述为轻度成瘾。Org-mode的即时输出到美观的html和LaTeX中,消除了负责任文档的所有障碍,并将其转变为一种游戏。所以现在我做。如果没有,那么我不会,或者至少我会害怕它,把它放下,让它充满精神能量。

其他评论者认为,因果关系可能恰好是倒退的:也许emacs奖励了高生产率,这会使中位数用户可能会享受任何收益的假设失去信心。我可能还会建议一种自我实现的安慰剂效果:emacs是否使我的工作效率更高(当然,我们永远不会知道,因为我没有同一个孪生兄弟,他们都没有学习过emacs),我有在我与结构化文本的关系中,我当然经历了顿悟。我对使用emacs感到很兴奋,这意味着我会更多地使用它,这意味着我会更多地了解它,变得更加兴奋&c。当我发现BibTeX模式时,我想起来的感觉就像是我第一次约会时就要求一个女孩出去。

如果您错过了这一点:emacs使我对编辑书目数据库的想法感到头晕。 我认为在我的工作中值得的。


8

例如,在Facebook上,我旁边的那个家伙正在使用Vim,而他旁边的那个家伙正在使用Emacs。他们两个都像地狱般敏捷而富有成果,我不认为这是因为他们使用的编辑器,而是他们自己的才智和态度。

这句话非常正确,并且在某种程度上适用于各种生产力技巧。

对生产力提高/优化感兴趣的人,由于他们专注于生活或在生活中的行为,往往会提高生产力,而不管生产力提示本身的效率如何。

可以概括为:“您不是更好的开发人员,因为您使用的是Emacs或Vim,但是那种专门致力于掌握这些工具的人往往是优秀的开发人员” [1]。

  1. 这是一个可怕的概括,因此这不是绝对的真理,也无济于事(什么是好/坏开发人员?等)

4

我已经使用Emacs了大约20年了,我不得不说不,我还没有达到这一点。

要获得他所谈论的“ emacsvana”,您确实必须使自己成为一名精明的专家。我做了一些,但是实际上我的技能几乎止于能够配置其他人编写的新模式的水平。尝试调试(或上帝禁止修复)别人的elisp超出了我一点,并且从头开始编写我自己的想法甚至没有任何想法。

这是来自以前实际使用过Lisp并具有20多年专业软件开发经验的人。

也许我只是在做些什么,但我怀疑很少有Emacs用户能够达到他所说的目的。

真的没有错。我知道如何制作宏,这本身使我使用Emacs加载的效率比其他任何文本编辑器都更高。有时候,生产力要高出十倍以上。但是,这并不比了解vi的人让我更好(因为它也可以执行宏)。


回复:您的文字以粗体显示,如果20岁的Emacs用户中的大多数人只知道如何执行奇数宏,我会感到惊讶。对于Emacs如此高兴地没有意识到其潜力,这似乎让人感到厌恶。
ocodo 2011年

4

不,我没有,我从未听说过任何人。我认为这不会发生。我认为史蒂夫·耶格(Steve Yegge)正在做流行的博客作者:他提出了一个有争议的,过分的声明,以阐明他的观点并变得更加引人注目。我认为他不是这个意思。他可能打算传达的是这样的:“ Emacs确实非常有效,如果您对其进行大量自定义,您将学习如何提高效率,这是非常棒的mmm-kay?”

如果他只是这么说,您不会感到困惑,而且他的读者也不会是原来的一半。


4

这样看:Emacs和Vim擅长于文本处理和重复按键的自动化,更不用说导航大块文本了。这是Yegge所说的,尽管是以一种更讲道的方式。

如果您有10000行文件,必须在每行的开头添加行号,则最好花半天的时间在记事本中手动进行操作。

或者,触发一个宏或使用内置的Emacs函数来处理这种事情。这样一来,您就可以节省半天的工作时间,而您的生产力则提高了10倍以上。

这是关于检测重复并消除重复。这需要智慧,经验,实践和技能,因此并非每个使用Emacs的人都会看到生产力的提高。


或者,您可以进行一些简单的文本处理,sed并让自己休息一天。
乔什(Josh K)

@Josh K:或者Perl或awk或带粘贴的shell。确实,您最了解哪种工具。
Zan Lynx

即使编写C程序也不会花费超过5分钟的时间
user281377 2011年

2
Emacs不适合处理非常大的文件。太迟钝了。

2

我不知道“ N倍快”,但是一些实用功能的仔细添加可以使Emacs很好地填写模板。将其与目标语言意识结合起来,您可以执行以下操作:“告诉您要创建函数的emacs,告诉它输入参数(类型,如果语言需要类型信息)和返回值,让emacs为进一步创建框架填写”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.