程序员的工作效率:Emacs vs IntelliJ IDEA

我用 Emacs 写了 7 年的 C++ 代码。 4 年前,当我换了工作,开始使用 IntelliJ IDEA 转向 Java 开发。毫无疑问,比起 Emacs,我在 IntelliJ IDEA 上写代码更有效率。

导航

代码好像真的是80%由导航生成,只有20%是实际写作的结果,IntelliJ IDEA的真正亮点所在是导航到代码库。例如,假设你要添加功能到现有的类,即使你对那个类很熟悉,你还是需要检查新代码该放在哪里比较合适,需要添加一 个新的声明吗?还有什么其他的类在使用你现在修改的方法?这些都需要查看现有代码。

甚至在你写代码时也会有很多导航,你想要使用的那个方法的名称是什么?参数的序列是什么-是先有一个string,然后一个
整型,或是其他方式?枚举可能的取值是什么?

有一些些导航存在于一个文件中,而在一个文件中我最常用的操作有:跳转到文件的顶部或底部,转到一行的开始或结束,选择文本,剪切,复制,粘贴,向前向后搜索,注释以及取消注释代码。 Emacs 和IntelliJ IDEA对这些操作都有很好的
命令和快捷键支持。

但是,当涉及到文件之间的导航时,IntelliJ IDEA就有很大的优势。其中一个最有用的命令是Ctrl + B(转到声明),正如其名所暗示的,你可以转到变量,方法,以及类的声明处,即使它在另一个文件中。Ctrl + Alt + 左键可以返回上一级,我时刻都在用它,经常会在跳几级后回到开始的地方。

另一个相关的导航命令是Ctrl + Alt + B(转向定义)。在一个接口的方法名处使用此命令,你将会得到一个弹出的列表显示着这个方法所有实现的地方,然后你可以选择一个你需要转向的,(如果只有一个实现,你就可以直接转到哪儿)。重载方法是同样的道理。

与此相反的是Ctrl + U (转向父类方法或父类)。如果插入符在一个接口函数的实现处(一个小小的界面符号在方法名的左侧),这个命令将会带你转到接口本身。

当我想查看一个方法或变量被使用的所有地方时,我使用Ctrl + Alt + F7(显示用法)。这个命令弹出一个包含所有使用处
的列表,你可以很容易地转向任意一个。如果要查找类,我使用Ctrl + N ( 转到类),它可以让你使用大写字母和*通配符搜索类名。我也经常用ctrl + E。他会弹出一个窗口包含了最近最常使用的15个文件(最常使用的在最上面)。你只需要向下选择一个你想要的,然后按下回车转到它。

另一个有用的命令是Ctrl + P(参数信息),在方法和构造函数的参数处使用它来获得一个弹出窗口显示参数的名称和类型。而在Emacs中,从某种意义上来说这不是导航,你将不得不去方法或构造函数的定义处去找到这些信息。

上述所有的命令是难以置信的节省时间。在Emacs中,你需要自己转到文件以便找到你所需要的。而在IntelliJ IDEA中,它是自动的。事实上,我注意到,在我使用C++和Emacs的日子里,比起Java我定义的类趋向于更大,方法少而且长。我想一个原因是,当 一切操作都在同一个文件中时Emacs导航更加容易,但是对于具有巨大导航功能的 IntelliJ IDEA来说,如果功能分散在多个文件中也并没有多大的关系.

其他优势

除了导航,IntelliJ IDEA在很多方面都具备优势。虽然这两种环境都有语法高亮, IntelliJ IDEA在此之上增加了一个新的有用功能。静态的方法和变量以斜体显示,没有使用的变量或方法会变灰。当然,IntelliJ IDEA会用红色标注任何你输入的语法错误。没有必要再去为了检查错误编译程序-它会实时地帮你完成。

在实际编码时IntelliJ IDEA也会有一些非常有用的功能。首先就是名称的自动补全,键入一个变量或方法名的几个字母,按Ctrl+空格键,名称会被补全。或者在点后按Ctrl+空格可以查看一个对象的可用方法。

另一个功能,根据IntelliJ IDEA的使用统计数据,是我用的最多的一个单一功能,那就是语法的自动选择。当你反复按下 Ctrl + W,他对代码的选择部分会越来越大。例如,它就会选择一个方法名,然后是一个表达式,再然后是整个语句,最后是整个代码块。这在搜索,排版缩进,注释代码 时非常有用。

当然,还有重命名支持。在Emacs中,如果我重命名一个方法名称,我需要做查找和替换。但是对于每一个替换,我不得不检查以确保我不会一不小心改 变不应该改变的东西。如果方法是公有的,我又必须在其他类中找到出现的地方。在IntellJ IDEA中,这就变成一件非常容易的事情。仅仅需要选择方法名,按下Ctrl+F6,输入新的名字,然后敲回车。所有文件中方法名出现的所有地方都将会被 替换。

对IDE毫无根据的顾虑

我经常会看到一些评论,关于如何你如果使用了IDE,你就必须很多时候在使用使用鼠标和菜单。这是完全错误地。我在所有的程序中都喜欢用快捷键,尽 量不用鼠标。IntelliJ IDEA对于所有的命令都有强大的快捷键绑定,而且很容易增加新的或者修改现有的命令。所以你需要使用鼠标和菜单的情况并不多。以上我提到的所有命令都是 用快捷键访问的。

另一个毫无根据的顾虑是你只能做那些列在IDE菜单中的操作。这也是一个不能成立的观点。就我而言,我所做的正和我在emacs中的一样,即编写和编辑代码。唯一的区别是,IntelliJ IDEA更快更准确。

还有一个普遍的担心,即你会被强制带入到IDE“封闭的环境中”。好了,没有什么可以阻止你在需要的时候使用其他具。源码树一直在那里存在。退出 IDE,去用任何你需要的工具,然后再返回来。例如,我有时需要跨越好几个IntelliJ IDEA工程使用grep。在这些情况下,我就会用一个合适的正则表达式来使用grep。没有什么大不了的。

最后,我还看到的一种说法是IDE到处加了配置和元数据文件。在IntelliJ IDEA中,只有3个工程文件被加到了目录结构的根目录下。就是这样。非常的不起眼。

你不知道你错过了什么

非常有趣的一件事是,在我换用IntelliJ IDEA之前我非常喜欢用Emacs。我已经学到了很多快捷操作,已经变得非常善于编辑。我也非常善于使用grep,查找以及使用目录结构中的其他的 Unix命令,因此并没有觉得我还缺少什么工具。快速说明一下:Unix命令行工具最好的来源是 Unix Power Tools。

当我开始用Symsoft时,几乎所有的开发人员都在使用 IntelliJ IDEA。所有就很自然地尝试了。我很快发现可以用它能做什么,并且永不回头。事实上,一旦意识到它可以做一些酷的东西,我就坚持展示它给我的前同事看。 无论何时,只要我和他们共进完午餐,我都会带他们来到我的办公室。给他们展示一些IntelliJ IDEA的招数,眼见为实。

但是一个好的编辑器总会有自己的空间

对于一个好的文本编辑器来说总会有一些有用的地方。即使我没有用Emacs写java,我还是几乎每天都在用它。这是我编辑文本文件的选择,我也偶然用它编写bash和ruby脚本。

然而,就在前几天,我的一个同事提出了关于文本编辑器的话题。他提到他开始学习VIM,本着确保我知道我错过了什么的精神,我也会试试看。所以过会儿,我将会用Vim代替Emacs。让我们看看结果会如何呢。

原文链接: henrikwarne 翻译: 伯乐在线 - hahakaka

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-09-03 03:04:20

程序员的工作效率:Emacs vs IntelliJ IDEA的相关文章

为什么程序员的工作效率跟他们的工资不成比例(转)

英文原文:Why programmers are not paid in proportion to their productivity 最有效率的程序员会比一般的程序员的编程效率高上几个数量级.但在任何公司里,他们的工资水平却只会出现很小的浮动差距.甚至在整个行业内,这种差距也不是很大.如果一个程序员的效率能达到其他人的10倍,为什么他不能得到10倍高的报酬呢? Joel Spolsky在最近的他的一个演讲里就这个问题给出了一系列的答案.首先,程序员的工作效率在整个行业内千差万别,但在一个公

22条日常技巧助程序员提高工作效率、节约时间

我一直在测试和调整各种生产效率的技术,在过去的五年中,阅读了大量的书籍(其中大多数是重复的) ,这里是我的一些结论: 这不是一个关于时间的问题,而是关于精力. 为了"有效率",我们试图在一个工作日内塞进尽可能多的小时,但最终一切都更多地取决于你的注意力,积极性和良好状态(这些都是直接与精力等级联系在一起)而不是工作时间 . 我最近在葡萄柚的一个内部演示上提及了我提高效率的想法,结果性的演示是在Slideshare上的:producitivity porn. 其中一些关键结论: 决定什么

程序员提高工作效率、节约时间的22条日常技巧

我一直在测试和调整各种生产效率的技术,在过去的五年中,阅读了大量的书籍(其中大多数是重复的) ,这里是我的一些结论: 这不是一个关于时间的问题,而是关于精力. 为了"有效率",我们试图在一个工作日内塞进尽可能多的小时,但最终一切都更多地取决于你的注意力,积极性和良好状态(这些都是直接与精力等级联系在一起)而不是工作时间 . 我最近在葡萄柚的一个内部演示上提及了我提高效率的想法,结果性的演示是在Slideshare上的:producitivity porn. 其中一些关键结论: 1. 决

程序员:选择效率,还是选择质量?

程序员:选择效率,还是选择质量? 时间:2014-11-07 02:28 来源:36kr 作者:36kr 本文作者系程序猿Daniel F Pupius,这是一篇他发表在Medium上的博文,讲述自己怎么在实际写代码的过程中,发现在效率和质量间做出抉择 其实是个伪命题. 程序开发项目进行过程中,通常会冒出这样的困惑:应该选择效率,还是选择质量?很多程序猿都会有偷懒的思维, 觉得把一些摸不清头绪.不知道怎么写的代码片段去掉,可以节省很 多时间,更早完成项目计划. 其实过去几年中,我也是这么想的,但

程序员的工作、学习与绩效

工作中,碰到一些这样的例子,总有人提出疑问,为什么一个同事工作勤勉,完成了很多事情,季度绩效评定很高,但晋升却碰壁了.之前已经写过一篇<技术晋升的评定与博弈>,基本就能解答这个问题.但隐藏在背后的更深层次的本质却是:工作.学习与绩效的关系. 工作 程序员的主要工作是:编程,产出代码,完成需求,交付软件系统. 程序员按其工作技能和经验,大体又分为三个阶段:初.中.高级.三个级别的程序员的主要工作都是编程与产出代码,产出代码的数量也许相差不大,但产出代码的属性可能有明显差别. 在曾经的文章中提出过

《告别失控:软件开发团队管理必读》一一2.4 程序员的工作要求与能力

2.4 程序员的工作要求与能力 要想成功地招聘和管理程序员,首先要认识到每个程序员都有其独特的能力.就像雪花一样,任何两个程序员都不会是完全一样的.我们常常会说,程序员之间写代码的能力可能相差一个数量级.这种差异是怎么出现的呢?教育.经验.天赋以及直觉,还有其他无形的因素,都有可能导致这样的差异. 多数程序员不需要借助显式的排名或者头衔,从直觉上就能理解同行之间的差异.但是如果能把程序员的类型与等级正式记录下来,并简要描述每种类型与等级的职位要求与能力(见表2-1),那么管理工作将会轻松很多,项

程序员的工作环境和他们的工作效率

1.足够大的桌面空间 我认为程序员的办公桌最好能够并排坐下2个人,用来结对编程或者code review.而在不离开座位的情况下,还要有足够的空间用白板或者纸面展开讨论问题.而协作的同事就不必站在身后费力的越过肩膀去看屏幕上的内容.而桌面上可以放下2个显示器并可以还要可以随手拿到常用的参考资料及书籍,同时要有合适的文件柜或壁柜存放归档的资料,以此避免桌面上堆满了各种打印的资料. 2.电脑环境 我想工作的机器应该要有足够的内存,比如8G,这样并行打开复杂的workspace时候就不需要关闭邮件或者

程序员编程工作应该避免的一些坏习惯

良好的编程习惯是每个程序员都应该具备的工作素质,在我的软件生涯中屡屡发现一些程序员的身上总有这样或者那样的坏毛病这些毛病在一些从业时间不是很长的程序员的身上表现的特别突出.1. 搭棚子   搭棚子顾名思义就是拿到一个任务的时候,既不做更详细的需求分析,也不作详细设计,一开始就打开编程工具,噼里啪啦的定义了一堆的模块,我不说是定义类,是因为这样代码里根本就找不到对象,然后就在这些模块的基础上进行工作,结果整个程序看起来就象胡乱搭起来的棚子,虽然有个程序的样子,而且似乎也实现了所要的功能,但是这样的

java程序员找工作 简历应该如何写?

问题描述 准备出去找工作了..但是简历还有一点没有搞点.请大家帮帮忙~就是在项目的那一块...需要用技术描述项目但是不清楚应该怎么说..比如说项目技术采用了ssh2+dwr那如何说明为什么要使用ssh2+dwr呢? 解决方案 解决方案二:你可以从项目规模(比如项目的大小或运用.后期维护等等)和运用ssh2+dwr的好处来写啊解决方案三:路过~~~~~~~~~~~解决方案四:同一楼解决方案五:实话实说,可以精通,熟悉几门东西,但不要过多,可以对其他很多技术说是了解过.解决方案六:姓名:XXX电话: