Emacs会让我成为一个更好的程序员吗?
史蒂夫·叶格在他的博客上发表评论 :
世界上所有最伟大的工程师都使用Emacs。 世界变化的types。 不是旁边的立方体中的大加仑。 不是弗雷德,那个惊人的人在大厅里。 我正在谈论我们这个行业最伟大的软件开发人员,那些改变了行业面貌的人。 詹姆斯雏鹅,唐纳德克努斯,保罗格雷姆斯,杰米Zawinskis,埃里克本森。 真正的工程师使用Emacs。 你必须聪明地使用它,如果你能掌握它,它会让你非常强大。 如果你不相信我,请在Paul Nordstrom的肩膀上看看他的作品。 对于那些曾经使用Visual Blub .NET IDE的人来说,这是一个真正令人大开眼界的事情。
Emacs是100年的编辑器。
上一次我使用文本编辑器编写代码时,大约在1000年前我仍然在记事本中编写HTML。 从那以后,我一直或多或less地依赖于IDE,在整个职业生涯中使用过Visual Studio,NetBeans,IntelliJ,Borland / Codegear Studio和Eclipse。
对于它的价值,我已经尝试了Emacs,而我的经验是一个令人沮丧的,因为它完全缺乏开箱即可发现的function。 (显然有一个Emacs命令来发现其他的Emacs命令,这是我找不到的方式 – 就像生活在你自己的残酷的禅宗般的笑话。)我试图让自己像一个好月份的程序,但最终决定我宁愿拖放GUIdevise器,智能感知和交互式debugging。
我们很难将事实与“狂热主义”分开,所以我还不愿意把叶戈的评论看作是现实。
那些依赖IDE的人和那些不依赖IDE的人之间在技能,生产力或者编程享受方面是否存在显着差异呢?还是仅仅是狂热主义?
首先让我说,我是一个自称是Emacs崇拜的真正信徒。
这就是说,博客是疯狂的。 你写在你觉得有用的东西。 我发现Emacs可以帮助我,主要是因为我花了大学时间来支付开销,学习如何修改它以适应我的需求,并根据需要修改自己。
但是其他人做事情的方式不同,正如他们所说的那样。
他(Steve Yegge)在其他文章中详细阐述了这一点。 http://steve-yegge.blogspot.com/2008_04_01_archive.html可能是最全面的,但信息被埋在那里,因为它是与主题相切的。;
我想总结一下:那些仅仅是优秀或者能干的程序员会拿起一个IDE来认识它,并且可能做得不错,但是他们会限制IDE为他们提供的东西。 换句话说,他们适应IDE。 另一方面, 优秀的程序员将会根据自己的环境来调整自己的环境 ,比如编写脚本或者自己的工具,或者扩展他们的工具。 而最后一点,不仅Emacs是最具扩展性的环境,它也是最容易扩展的环境,而且它也是您从扩展中获得最大收益的环境 – 您的扩展集成到Emacs中他们是股票的特点,所以你的未来扩展可能会build立在你以前的扩展(积极的反馈循环类的东西)。
最好的程序员使用vi或emacs,因为最有经验的程序员是最好的,20年前,除了vi和emacs之外没有太多select。
在vi(大约1987年)开始使用文本terminal非常慢的机器后,我在几年后(在一台更快的机器上)转换为(GNU)Emacs,几乎只用了近10年。
Emacs是第一个真正集成的开发环境 – 整个编辑/链接/编译循环可以在emacs中进行控制,并且您可以自行编译您使用的任何编译器。
现在,像eclipse这样的IDE甚至可以更好的集成(说实话:emacs在graphics方面很糟糕),但Emacs仍然是“纯”文本编辑的最佳环境之一。
改善你清晰的思维和解决问题将使你成为一个更好的程序员。 没有程序可以做到这一点。
除非我知道如何和为什么,否则使用更好的锤子不会帮助我build立一个更好的房子。 ;)
叶奇需要见识比尔·乔伊。 他不仅是世界上最伟大的程序员之一,他还写了大量的vi。 在vi。
简短的耻辱告白:在过去的一年中,使用vi(和vim / gvim)已经有20年了,在过去一年左右,我已经开始使用Eclipse进行java编辑(而Thunderbird用于电子邮件),尽pipe在我目前的工作中,机器内存很less,除了当我需要debugging器时,我通常使用vi。
依赖于IDE的人和不依赖IDE的人之间在技能,生产力或编程享受方面是否存在显着差异呢?还是仅仅是狂热主义?
让我们把这个缩小到Visual Studio和Emacs–否则这个问题太广泛了,我怀疑大多数人(至less在StackOverflow中)对这两个都很熟悉。 [我是,我使用和喜欢emacs]
接下来,我们来分解这个问题的三个组成部分。
编程的乐趣主要归结为主要喜欢编程本身,其次是没有烦恼的因素popup来,当你这样做。 使用与你斗争的工具将从享受中减去。 所以,我会猜测,通过使用你喜欢和熟悉的工具,享受可能达到最大化。
当然,一旦你熟悉了一个新的工具,你可能会发现你更喜欢这个工具,因此如果你用新的最喜欢的工具来编程,就会更喜欢编程。 我不清楚,一般人都会喜欢VS emacs(反之亦然),当他们都知道的时候。
接下来,编程技巧。 如果技能和VS / emacs的select之间有任何联系,我认为这是技能select,而不是select导致技能。 根据我的经验,{VS,emacs}似乎并没有让我学到任何有关编写更好的代码的知识。
一个好的工具可以使我能够在较less的时间内编写相同的代码(因此代码质量相同) 如果我们假定productivity = quality of code `times` code per time
,那么任何能够让你在较短时间内编写好的代码的编辑器就是一个理由,这是提高生产力的原因。
我可能对VS太不熟悉了,但是在这里我认为emacs有一些我在VS中没有发现的优势。 这听起来很可笑,但是像Ctrl-[fbnp]
那样简单的光标移动是一个真正的好处 – 这意味着你不必将手移到方向键上。 另一件事:你可以做一个search或replace,其中包括换行符,我经常使用,我不想错过它。
我喜欢的另一件事是在我的编辑器中embedded一个shell的能力。 根据我的经验,在非Windows平台上它更有价值(我的第一个“编程”经验,IIRC,正在编写DOS.bat文件,所以我不只是一个火爆的变形金刚迷),但在这些平台上,这是一个巨大的胜利。 它使emacs与“everything”(用find / locate进行文件search,用grep进行文本search,用svn / git / hg / …进行版本控制,把它命名)“集成”。
最终裁决 – 你应该学习emacs吗? 这全是迷恋吗? 如果你有时间,我会说,总是值得学习新的方法来做同样的事情,因为新的方式可能会变得更好地为你工作。 我鼓励你不要拒绝,因为当你们都是新手时,看起来就是这样。 从这个意义上说,就像切换到Dvorak键盘布局一样:开始时速度较慢,但一旦速度加快,至less可以像QWERTY一样快,而且更舒适。 我也推荐同样的方法来学习新的(编程)语言:因为你不知道词汇(标准库),说事情很难,但奖励仍然在那里等着你。
引用的文字开头是“世界上所有最伟大的工程师都使用Emacs”,我也不会把它看成是面值。 他是否了解世界上所有最伟大的工程师? 这是世界上最伟大的工程师列表,你或我?
一旦学会了,像EMACS或vi这样的强大的编辑器会让你更有效率,或者至less在没有你最喜欢的IDE的情况下被捕获,效率会更高。
这是杀手的“曾经学过的”部分。 高效地使用这些工具有很多工作和实践,一开始就非常困难。
我个人是Emacs迷,但Emacs只是一个工具。 它不会让你成为一个更好的程序员,而不是一个超级花式的笔会让你成为一个更好的作家。
“伟大的程序员”将自己的环境适应于自己可能有一些优点,但许多工具可以做到这一点(例如vim和SlickEdit),所以Emacs在这方面没有什么特别之处。
我认为最有可能的事实是,“优秀的程序员”对编程充满热情,而对此充满激情的人往往会find有助于激发这种激情的工具。 Emacs(以及vim和SlickEdit等)就是这样一个工具。
我不相信有什么区别,更重要的是偏好。
但是我注意到,你编写的代码越长,或者编写的代码越低,使用emacs或vi的可能性就越高。
虽然IDE在过去的十年中已经有了很大的改进,但是它们仍然将节目安排在一个安全的“泡沫”中,远离了一些丑陋的细节。 往往会发生的是这种抽象的增加使得更多的程序员可以做得更多,知识也更less。 当然,这并不适用于所有程序员,但更简单的工具确实能够为更多的用户带来编程。
更多的底层工具知识往往意味着代码更加稳定,因为偶然发生“违背谷物”的可能性较小。 把EMACS列为唯一的领先指标是不公平的,因为它来自于各种语言和工具,更多的是关于理解的深度,而不是特定的技术。
回过头来,你可以在UNIX上学到VI或者EMACS,或者你专门从事个人电脑(好吧,还有VMS,CMS,AS400等等,但那些都是旧技术)。 这两个stream都吸引了非常热衷的人,但是UNIX的人倾向于想要一个复杂的解决scheme,而个人电脑的人只是想快速完成。 文化是非常不同的。
恕我直言,IDE倾向于围绕特定的平台或语言或操作系统进行优化:Eclipse JDT非常适合Java,Visual Studio是以C ++ / .NET为中心的,等等。如果你只是在工作,该平台,但如果你改变平台,你必须基本上学习一个新的IDE(或至less一个新的插件,视图,观点,我不知道什么Eclipse的)。
了解emacs,Textmate或vim(我的个人偏好)或任何通用编辑器的优势在于,无论您正在编写什么平台,您在该编辑器中获得的技能都适用。 它们针对编辑文本进行了优化,一旦掌握了它们,就可以用任何语言非常高效地编辑文本。
Yegge也声称,优秀的程序员将他们的工具调整到他们的工作风格,而不是相反。 我认为这对于通用编辑器是一个胜利,因为你定制了一个编辑器,而不是必须弄清楚如何使四个不同的IDE适应所有的行为。
我认为最好的程序员往往是那些花费时间来定制他们的环境的人,使他们能够更快速/更容易地执行他们可能做的任务。 当涉及到定制您的环境时,Emacs是最强大的编辑器之一。 它有一个陡峭的学习曲线,但是,一旦你过去了,实际上没有限制,你可以做它为你做。
有人曾经说最好的程序员是懒惰的, 那些一旦他们需要做一次以上的事情,就find一种自动化的方法,这样就不需要太多的工作。 Emacs允许你非常非常懒惰;)
我从一开始就使用IDE(可以说,从QBASIC开始)以及许多年。 现在我已经几乎完全转向了VIM(以各种不同的方式)来开发我所有的工作,我不后悔。 我的生产力肯定增加了。
当然,没有任何东西可以替代Visual Studio中的Windows窗体devise器。 但与VIM(和Emacs,我敢肯定)相比,Visual Studio中的文本编辑器真的很糟糕。 一旦你掌握了控制台和GNU开发者工具(我的意思是说,GCC, binutils
和gdb
,然后是一些)的原始力量,你会注意到这些工具可能看起来是原始的,但它们恰恰相反,实际上提供了IDE提供的所有工具(除了表单devise器之外)。
当你第一次使用这些工具时,你的攀登就会非常陡峭,激励可能很小。 我很幸运(?)被迫使用这些工具,所以我没有select,我可以逃避。
就我个人而言,我觉得你应该使用任何使你更有成效的东西。 如果你没有时间投资一个项目来学习Emacs,那么在那个时候可能不是你最好的时间。
不过,我确实认为在有足够的时间去了解其他IDE是个不错的主意。我在日常工作中使用Visual Studio,但是在家里,我使用Eclipse进行小型项目,并使用Emacs以及。 在我考虑使用Emacs的特定时刻,我的努力能够更好地完成实际工作,而不是放慢与Emacs的竞争。
我认为在一定程度上认为所有最好的程序员都使用Emacs是荒谬的。 有许多优秀的程序员并不像Emacs那样受欢迎(也可能是声音)。
我在一年半之前就开始使用Emacs,因为它是几个想要的合作者 – 想用正则expression式(在支持他们的编辑器中)工作,想要学习Lisp,想要一个更好的编辑器。
用正则expression式编辑我的代码,教会了我很多关于在代码中寻找模式的知识。 击键需要一段时间才能习惯,但是如果没有鼠标,我会飞得更快。
Emacs使我能够在笔记和编码中保持同一应用程序的工作 – 最小的上下文切换意味着最小的大脑切换,并且我可以继续专注于手头的任务。
不错。良好的代码让你成为更好的程序员。
也就是说,良好的文本处理是效率的关键。 vim或者emacs将会改变你如何使用文本 – 两种方式都被certificate是有效的,但在风格上几乎彼此不一致。 而且,这个辩论还是比较老的(回到80年代和90年代,文本 – >编译器是关键的),所以还有许多其他的文本编辑器和/或IDE可以帮助你成为最好的程序员。
不可以。如果您认为使用emacs会使您成为一名更好的程序员,那么您就会混淆因果关系。
不过,我确实每天都在使用它。 我发现用emacs + maven的效率要高于用Eclipse开发的java的效率(尽pipe我偶尔也会启动Eclipse来偶尔进行重构或debugging会话)。
这些是我的原因:
- emacs中的实际文本编辑体验胜过其他所有内容。 使用只有你的键盘能够完成如此之多的速度真是惊人。 Eclipse更多的是面向鼠标的,当你input的时候,你会遇到很多恼人的障碍。
- 能够使用elisp自定义emacs非常强大。 我甚至会说,如果你没有花时间学习基本的elisp和定制你的环境,那简直就是在浪费你的时间。
- 实际上你可以在文本编辑器中做任何事情的扩展。
对我来说,selectEmacs的主要原因是它允许我从键盘上做所有的事情。 这是很好的,因为它可以节省一些时间,我通常会使用鼠标。 另外,由于我发现自己非常活跃,所以我有一种倾向,就是因为使用我的慢速触摸板而使得我的编程“凹槽”中断。 另外,它的自定义使得它可以照亮一些IDE。 但是,如果你发现自己的IDE编程速度够快,那么我会说Emacs的学习曲线是不值得的。
我不认为这会让你成为一个更好的程序员,但是当你达到这个水平时,你很可能会使用emacs(或vi)
: – /
这两个好东西(我以前从来没有用过emacs,但是我仍然用vi来做最平凡的任务)是事实,它们不会打断你的思路 ,你不需要把手放开键盘抓住鼠标,并在文件菜单中寻找正确的选项。 你只是,继续写作。 在你的脑海里,你可以这样说:“replace这个词的所有事件”,按回车继续你的工作。
另外,我不认为他们使用emacs是他们唯一的工具。
它会让你更好的程序员? 可能不会。 但是当你拥有这样的专业知识水平时,你可能会喜欢使用这些工具编码的速度。
没有。
纪律,批判性思维和自我完善的愿望将使你成为一个更好的程序员。 你的工具集,而你的生产力的主要因素,不会创造天才。
如果你不喜欢emacs或vi,不要使用它们。 通过做出有意识的select,你正在塑造你的发展环境,以适应你自己的需求和工作实践。 在任何情况下,你都有权使用你喜欢的东西 – 而忽视任何愚蠢的人来抨击你用来写入磁盘的工具 – 这是重要的。
注意:这里的“工具集”在字面意思上是工具的“品牌” – 特定的编辑器,编译器等。概念工具集,例如版本控制,unit testing,改进过程。
emacs最大的特点之一就是可以处理任何大小的文件types。 诚然,如果你打开一个疯狂的巨大的encryption文件,它不一定是有用的,但它会打开。 大多数编辑(和IDE)会给你带来很大的痛苦,如果你给他们一个文件太大和/或不是他们预期的格式之一。
尝试在记事本中打开1 Gig文件作为示例。
我在1980年左右开始使用Emacs,它一直是我工具箱中的工具。 这不是唯一的工具,但总是我可以转向的东西,并知道我将能够完成一些有用的工作。
强制性的煽动性评论 :另一方面,我对vi没什么好说的。 我一直觉得vi会高兴地杀了我,然后出卖我的器官。
在现实生活中,我使用Netbeans进行几乎所有forms的开发,并且使用emacs进行快速编辑。 几乎没有任何东西可以像emacs那样方便(对于我来说),现在就可以完成一些疯狂的事情。
任何人都必须在编译的二进制可执行文件中编辑静态string? 有比emacs更好的工具吗? 这当然适合我。
我知道你没有问这个问题,但是学习emacs(意外地)改进的一件事是操纵一个命令行。 在学习emacs keybindings之前,我使用光标键移动光标和导航历史logging,因为我不知道更好。 当我意识到我可以在bash
使用backward-word
, move-beginning-of-line
和backward-kill-word
(我一直与Cw
, 正如Stevey所build议的那样 )时,这是一个灯泡的时刻( Mt
常常是有用的对于那些以前从未见过的人来说,也是最令人印象深刻的)。
我在Solaris上做了很多工作,其中root shell是“posix shell”,默认情况下没有emacs绑定。 我发现我的手指现在自己inputexec bash
,每次login时,用我手指下的熟悉的编辑命令可以更快地感觉到。
但是必须承认,我仍然觉得Knuth的书很难(虽然值得) – 所以我不认为这是神奇的改善我的编程。
Emacs使我在文本处理和文件系统导航方面更加高效 。 而且由于这两件事情都是在我编程时涉及的,所以它使我成为一个更有效率(因此更好)的程序员。
我认为Emacs可以让你成为更好的程序员,尽pipe是间接的。 我认为Emacs让我实际上用一种函数式语言( Elisp )来编写,这种语言让我对其他函数式语言( Clojure )感兴趣,据我所知 ,它会使我成为一个更好的程序员。 这就是说,我想时间会告诉你。
那些依赖IDE的人和那些不依赖IDE的人之间在技能,生产力或者编程享受方面是否存在显着差异呢?还是仅仅是狂热主义?
我不认为你真的可以得到答案。 有很多不同的方式来衡量技巧,生产力和编程的乐趣 – 所有这些都可能是非常主观的和/或不能被分解成一件事情造成的。
这仍然是一个有趣的问题。
我个人的看法是 – 这取决于程序员:)
G-人
能够使用一些可定制的编辑器可以让你做出漂亮的事情,但特别是emacs不一定是最好的一个可能的。 我自己是一个SlickEdit用户,我用emacs出名的所有同样奇怪的半自动化的东西。 我见过人们用vi和各种基于Windows的编辑器做类似的事情。
所以,套接字设置好,但争辩说,Craftsman使一个真正的套接字是愚蠢的。
掌握Emacs键绑定及其内置函数将允许您比IDE(例如Eclipse或Visual Studio)更快地操作文本。
不要拿我的话, 使用Emacs看看专业人士的这些video。
一旦你在Emacs中达到一个体面的水平,你可以有效地编辑任何语言:Java脚本,Java,Ruby,Python,HTML,C,C ++等
开始使用Emacs是一个痛苦的屁股,开箱即用的体验比糟糕的更糟糕。 Emacs默认configuration不会将Emacs新手暴露给Emacs的更强大的function(嬉皮扩展,etags,yasnippets等)。 我build议从Emacs Starter Kit的点文件开始。
Steve Yegge声称世界上最好的程序员使用Emacs的另一个原因是elisp。 Elisp允许有经验的程序员轻松地扩展Emacs。 在Eclipse或Visual Studio中编写扩展比在elisp中编写快速function甚至是新的次要模式困难得多。
我相信它有一个很大的误解,认为使用这些基于文本的编辑器(如VI和Emacs)非常重视或需要成为“优秀的程序员”。 我总是觉得IDE是强大的,然后他们用来做,而且这真的是一个偏好和风格。
我在大学使用emacs。 那大约在16年前。 我没有回头。 虽然我希望自己仍然可以对emacs感到满意,但事实是我的MS IDE非常高效。
你发布的文本只是一个巨魔。 是的。 没有别的理由,比起一场宗教战争。
我从emacs开始,但切换到vi,因为它简单,我更优雅。 另外,如果你曾经陷入单用户模式,ed命令是vi命令的一个子集。 我不知道emacs是否可以处理。
所以在这方面,我认为vi使你成为一个更好的程序员。