为什么我应该使用集成开发环境(IDE)?

397
在另一个问题中,Mark 高度评价了IDE,说“有些人仍然不知道为什么要使用IDE…”。作为一个使用vim进行编程,并且在大多数/所有同事都使用vim或emacs进行所有工作的环境中工作的人,IDE有哪些优势?为什么我应该使用IDE?
我相信这对一些人来说是一个充满争议的问题,我不想引发争论,所以请只回复您认为基于IDE的方法更优越的原因。我不想听到为什么我不应该使用IDE;我已经不使用IDE。我有兴趣从“另一面”听取意见。
如果您认为IDE可能适用于某些类型的工作但不适用于其他类型的工作,我也很想听听您的看法。

1
感谢您通过我的博客联系我,这个网站真的应该有一个私人消息系统! - Mark
11
Emacs 是一个不好的例子。很难找到 Emacs 缺少的 IDE 功能。区别在于什么是开箱即用的,什么需要自定义。 - jfs
8
IDE(集成开发环境)是无用的,真正的程序员使用vim。 - user216441
30
因为评论的原因,你是否开始使用集成开发环境(IDE)了? - Aftershock
1
有时候你别无选择,只能使用一个集成开发环境(IDE):( - XY Li
不使用IDE进行编译语言开发的人通常是老手,他们不想改变自己的方式,或者说,他们是慢速程序员(相对于他们本来可以做到的)。没有IDE,你能达到的效率是有限的。但是,在IDE中重构方法/变量名称只需要3秒钟,而手动完成则让我不敢想象。例如NetBeans甚至内置了分析器 - 它在我运行应用程序时显示我正在执行的SQL查询! - trilogy
36个回答

539

这真的取决于你使用的是哪种语言,但在C#和Java中,我发现IDE对以下方面有益:

  • 快速导航到类型,无需担心命名空间、项目等
  • 通过将成员视为超链接来导航到成员
  • 当你记不住所有成员名称时进行自动完成
  • 自动生成代码
  • 重构(大规模的)
  • 组织导入(在Java中自动添加适当的导入,在C#中使用指令)
  • 实时警告(例如某些错误甚至不需要编译周期)
  • 悬停以查看文档
  • 在屏幕上同时保留文件、错误/警告、控制台、单元测试等视图和源代码,以便有用地使用
  • 从同一窗口轻松运行单元测试
  • 集成调试
  • 集成源代码控制
  • 直接从错误详细信息中导航到编译时错误或运行时异常发生的位置。
  • 等等!

所有这些都节省时间。这些都是我可以手动完成的事情,但代价更高:我宁愿编码。


93
我猜emacs是一个集成开发环境(IDE)。 ;) - Svante
99
当Vim以那种方式运作时,我会说它算得上是一个集成开发环境(IDE)。 - Jon Skeet
58
根据我的经验,Vim和Emacs最大的缺点是没有像“真正”的集成开发环境(IDE)一样可以实时提供警告。当然,我知道它们可以作为非常好的开发环境使用。但实现实时警告需要将高级编译器嵌入到编辑器中,而我不认为它们可以达到这种程度的集成。 - Joachim Sauer
16
你看过Flymake吗?它至少为Emacs提供了一些实时警告功能。网址是http://flymake.sourceforge.net/。 - polyglot
62
警告-随打随现,我认为John Skeet需要这个来警告IDE尝试更正以下代码将是徒劳无功的尝试。 - cmcginty
显示剩余21条评论

101

代码补全功能。它对于探索代码非常有帮助。


108
我会说“代码自动完成”而不是“智能感知”。 - Hannoun Yassir
3
我可以按Ctrl+P,这会给我一个下拉列表,其中包含vim认为我可以使用的许多命令。 - new123456
17
不仅仅是探索代码。如果我键入一个“.”,但没有弹出任何东西,那么我的代码就有问题了;通常我甚至不需要编译就可以找到它。如果我键入一个“.”但没有得到我期望的结果,这意味着我正在使用错误的类型,或者忘记了将某些东西设置为内部或公共,或其他类似的问题;我不需要运行来发现问题。Intellisense非常有用,可以在最早的时刻发现错误。 - Ryan Lundy
1
这怎么算是一个答案呢?当你大声读出来时,它听起来像是一个糟糕的微软口号... - Kellen Stuart
1
好的...YouCompleteMe,Deoplete...如果你想要那种类型的代码补全。我不知道Emacs是否有这个功能。此外,Vim在开箱即用时具有出色的自动完成功能,当我使用其他编辑器时会感到缺失。 - JakeD
使用代码补全来探索代码的原因在于,总体而言,文档提供了较差的用户体验。 - imbatman

86

为什么我使用IDE的简单答案就是懒惰。

我是一个懒散的人,不喜欢用困难的方式去做事情,当有一种简单的方式时,我更愿意采用它。 IDE使生活变得轻松,所以吸引着我们这些懒散的人。

在我输入代码时,IDE会自动检查代码的有效性,我可以突出显示一个方法并按F1键获得帮助,右键单击并选择“转到定义”以立即跳转到其定义位置。我按下一个按钮,附加调试器的应用程序就会为我启动。如此等等。开发人员每天需要做的所有事情都聚集在一个地方。

没有必要使用IDE,但不使用IDE会更加艰难。


如果你正在使用Visual Studio .NET,F12键被映射为“转到定义”。(我刚刚发现了)所以你不需要右键点击来进行操作。8) - Knobloch
@Knobloch,我倾向于同时使用VS2008和Eclipse。以前我经常使用FlashDevelop。这三个软件的“转到定义”快捷键都不同,所以我倾向于依靠右键单击 :) - David Arno
你可以熟悉地右键单击菜单栏并选择“自定义/键盘快捷方式”。 - dkretz
19
这并不仅是因为懒惰:)使用一个集成开发环境可以节省宝贵的时间,从而提高生产力。 - Spectre87
1
此外,一个集成开发环境已经准备好使用了,不需要设置很多困难的东西来提高生产力。 - Akira Yamamoto

56

我认为在进行“文本编辑器和控制台窗口 vs IDE”比较时,如果“文本编辑器”指的是emacs,那么这种比较就不太公平了。因为大多数IDE所具备的功能在emacs中也都有。甚至可以说这些功能最初就源自于emacs,而现代IDE主要是对界面进行改进和简化。

这意味着对于原始问题,答案并不是那么明确。它取决于在相关网站上人们如何使用emacs,他们是将其主要用作文本编辑器,还是全力以赴地使用自定义脚本,学习相关模式的命令,了解代码标记等等。


9
没错,这个泛化说法不太准确。我使用Emacs作为所有回答中提到的IDE功能。 - jfm3
21
我认为,在强大的文本编辑器中配置类似于IDE的功能所需的时间可以更好地用于在使用开箱即用功能的IDE中编码。 - jfs
6
我使用vim就像使用一个集成开发环境(IDE)一样。 - user21037
14
@J.F. Sebastian: 问题在于,为了提高生产力,你需要学习那个IDE的方方面面。如果你经常切换语言并使用许多不同的工具,则可能会变得很麻烦。我目前正在学习vim,虽然一开始很难适应,但当我可以在不同的系统和许多不同的语言中找到它时,它很快就会得到回报。 - Isaac Nequittepas
8
我认为将Emacs配置成IDE功能比将IDE配置成像导航、tramp、shell-mode、dired等Emacs功能更加高效。 - Tikhon Jelvis
显示剩余3条评论

53
我从相反的方向来看待这个问题。我的编程经历中很少停留在Makefile+Emacs领域。从我最早在DOS上使用的编译器Microsoft Quick C开始,我就有了一个自动化事务的IDE。我花了很多年时间在Visual C++ 6.0上工作,当我转向企业级Java时,我使用了Borland JBuilder,然后选择了Eclipse,这对我来说非常高效。
在我最初的自学、大学和现在的职业生涯中,我已经认识到仅在IDE内完成的任何主要软件开发都会适得其反。我这么说是因为大多数IDE希望你按照他们独特的“我控制世界运作”的风格工作。你必须沿着他们的线条切割和分解你的项目。你必须使用他们奇怪的对话框来管理你的项目构建。大多数IDE管理项目之间的复杂构建依赖关系很差,而且依赖关系可能很难完全实现。我曾经遇到过这样的情况,即除非我进行清理/重建所有操作,否则IDE将无法生成我的代码的可用构建版本。最后,从IDE将您的软件移出开发环境并进入其他环境(如QA或生产)的方法很少干净利落。通常需要点击一堆按钮才能构建所有部署单元,或者你有一些笨拙的工具,IDE供应商提供给你打包东西。但是,那个工具通常要求你的项目和构建结构绝对符合他们的规则,有时这对于你的项目要求根本行不通。

我已经学到,如果要与团队进行大规模开发,我们可以通过使用IDE开发代码并使用手动编写的命令行脚本构建所有内容来提高生产力。 (我们喜欢Java开发中的Apache Ant。)我们发现,在IDE中运行脚本只是一个点击操作或自动化噩梦,对于复杂的构建而言,从IDE中退出并在shell中运行脚本要容易得多(也不会造成太大干扰)。

手动构建需要我们放弃一些现代IDE中的好处,例如后台编译,但我们获得的收益更为重要:干净且易于构建的内容可以存在于多个环境中。那些敏捷开发者所说的“一键构建”?我们有了。我们的构建脚本也可以直接由持续集成系统调用。通过持续集成管理构建使我们能够更正式地将代码部署分阶段迁移到不同的环境,并让我们几乎立即知道某人提交了破坏构建或单元测试的错误代码。

事实上,将构建角色从IDE中移除并没有对我们造成太大的伤害。Eclipse中的智能感知和重构工具仍然非常有用和有效 - 后台编译只是为了支持这些工具。而且,Eclipse独特的项目切片方式已经成为一种非常好的方法,可以以每个人都能理解的方式分解我们的问题集(尽管对我来说还是有点啰嗦)。我认为Eclipse最重要的一点是优秀的SCM集成,这使得团队开发变得非常愉快。我们使用Subversion+Eclipse,这非常高效,也很容易培训我们的员工成为专家。

3
+1,构建东西时(至少通常情况下)引入的复杂性是我倾向于厌恶集成开发环境的最大原因之一。 - Scott Schulthess

24
作为你在问题中突出的回答的作者,我必须承认我有点晚了才来到这个问题上。在列举了许多原因之后,我必须说,专业开发人员的生产力是最受重视的技能之一。
所谓生产力,是指以最佳结果高效地完成工作的能力。IDE可以在许多方面实现这一点。虽然我不是Emacs专家,但我怀疑它是否缺乏任何主要IDE的功能。
企业应用程序中的关键步骤,如设计、文档编写、跟踪、开发、构建、分析、部署和维护,都可以在IDE中完成。
如果你有选择,为什么不使用如此强大的东西呢?
作为一次实验,承诺自己在30天内使用IDE,看看你的感受。我很想听听你对这次体验的想法。

10
Emacs有一些Eclipse缺少或非常难以发现的功能。例如,能够选择一块代码并对其进行原地排序。Emacs的fill-paragraph在编辑注释时也很难被超越;虽然Eclipse有类似的功能,但相比之下非常弱。 - Porculus
17
许多人不使用集成开发环境(IDE)主要原因是它们太臃肿了。如果你只想做一个三明治,那么你并不需要整个超市。 - user427390
9
以我的经验来看,集成开发环境(IDE)不允许你像使用键盘一样深入和一致地与所有内容进行交互。此外,Emacs拥有一些非常棒的功能,而IDE没有,这些功能从小型但有用的功能(矩形区域,hippie-expand,广泛的键盘导航)到相当重要的功能(tramp,dired,通过elisp进行透明自定义,键盘宏)不等。我相信有些IDE也有这些功能,但我没见过。 - Tikhon Jelvis

20

使用集成开发环境(IDE)具有以下优点:

  • 编译通常是"即时的",这意味着不再需要切换到命令行来进行编译
  • 调试功能已经集成在IDE中,并且在IDE中使用步骤调试器可以使用源代码编辑器直观地展示哪些代码正在执行
  • IDE通常具有更多关于您正在使用的编程语言的语义知识,可以在输入时显示可能存在的问题。重构比"搜索替换"更加强大。

还有更多的好处,也许你应该尝试一下。


我不能代表每个最小的编辑器说话,但是Vim有宏可以编写脚本,可以做很多事情,比如编译和运行。 - user427390
1
@Corey,重点是你必须编写脚本。它应该已经可用。 - crush

20

IDE(集成开发环境)基本上包括以下内容:

  • 带有代码完成、重构和文档功能的编辑器
  • 调试器
  • 文件系统浏览器
  • 版本控制系统客户端
  • 构建工具

所有这些功能都在一个单一的软件包中。

您可以使用单独的工具或仅使用出色的可编程编辑器和额外的工具(例如Emacs,Vim也可以但在我看来少了一点IDE能力)获得所有这些功能以及更多其他功能。

如果您发现自己经常在不同的实用程序之间切换,而这些实用程序可以集成在环境中,或者如果您缺少此处列出的某些功能(以及其他帖子中完整列出的功能),那么也许是时候转换到IDE(或通过添加宏等来改善您的环境的IDE能力)。如果您已经使用多个程序构建了自己的“IDE”(如我上面所提到的),则没有必要转换到实际的IDE。


12

Eclipse:

具有代码高亮、后台编译和指出我的错误等功能。

与javadoc集成,使用ctrl-Space建议变量名。

当我编译时,我会立即收到错误提示。我可以双击一个错误,它会显示相应的行。

与JUnit非常好地集成,ctrl-F11运行测试并告知我测试失败。如果输出窗口中有异常,我可以双击一行,它会将我带到失败的那一行。此外,ctrl-F11在运行测试之前确保所有内容都已编译(这意味着我永远不会忘记这样做)。

与ant集成。一个命令用于构建和部署应用程序。

与调试器集成,包括远程调试Web服务器。

优秀的重构工具,可以搜索代码段的引用。帮助我了解更改的影响。

总而言之,它让我更加高效。


问题在于Emacs可以做到这一切,而且支持的语言比Eclipse还多。 - Tikhon Jelvis

11

我曾经在1994-2004年将Emacs作为主要的开发和邮件/新闻环境。直到2004年,当我被迫学习Java时,我才发现了IDE的强大之处,并惊讶地发现我实际上喜欢这个IDE(IntelliJ IDEA)。

我不会详细说明具体原因,因为这里已经提到了很多 -- 只需记住不同的人喜欢不同的功能。我和同事使用了同样的IDE,我们都只使用了一小部分可用的功能,而且我们都不喜欢对方使用IDE的方式(但我们都喜欢IDE本身)。

但是,IDE相对于Emacs / Vim相关环境的一个优势是:你花费更少的时间安装/配置所需的功能。

使用Wing IDE(用于Python),我只需安装15-20分钟就可以开始开发。不知道我需要多少小时才能让我在Emacs / Vim上使用的功能运行起来。 :)


2
启动时间较长,但后续效果更加“量身定制”。 - sjas
3
配置Emacs/Vim只需要将相应的文件复制到程序可以找到它们的位置。如果您将配置文件都放在一个目录中并保持良好的组织,那么这真的不难。之后,您可以将它们放在闪存驱动器、互联网存储或存储库中,这样您就可以在需要设置工作环境时进行“克隆”。 :) - Gordon Gustafson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接