最好的编程编辑? 没有明确赢家的永无止境的战斗

已发表: 2022-03-11

不管有什么明显的相反证据,程序员都是人。 而且,和所有人类一样,我们喜欢利用我们的选择自由。 无论选择是服用红色药丸还是蓝色药丸,穿裙子还是裤子,还是使用一种开发环境而不是另一种,我们所做的选择都将我们置于一组人或另一组人中。 选择不可避免地出现在我们对选项的评估之后。 做出选择后,我们倾向于相信任何选择不同的人都会犯错误。

您可以轻松地搜索互联网并找到数百个关于 Emacs 与 Vim 的辩论。 即使你全部阅读,也不可能客观地选出获胜者。 但是,开发环境的选择是否能告诉您开发人员可以交付的工作质量? 绝对不!

一位出色的开发人员可以将她的代码写入记事本中,并且仍然可以交付出色的东西。

当然,专业人士在为他们的工作选择工具时会考虑很多事情。 这适用于每个职业,包括软件开发。 然而,很多时候,选择是基于个人品味,而不是容易有形的东西。

程序员将大部分时间都花在了开发环境上,所以我们想要一些既美观又实用的东西是很自然的。 每个开发环境都有其优点和缺点。 作为一个整体,它们是软件开发行业的驱动力。

最好的编程编辑

开发人员在选择一组编程工具(如所选的编程编辑器)时应该评估哪些内容? 这个问题的答案并不像听起来那么简单。 软件开发接近于一门艺术,很少有“模糊”因素将杰作与高价收藏品区分开来。

每种编程语言,无论是 Java、C#、PHP、Python、Ruby、JavaScript 等,都有其与项目结构、调试和部署相关的开发实践。 但是,它们的共同点之一是编辑代码。 在本文中,我们将从软件开发中最常见的任务:编写代码的角度来评估不同的开发平台。

IDE 与通用文本编辑器

集成开发环境 (IDE)(或交互式开发环境)是一种软件应用程序,可为计算机程序员提供用于软件开发的综合设施。 IDE 通常由源代码编辑器、构建自动化工具和调试器组成,并且许多支持许多附加插件和扩展。

文本编辑器是更简单的应用程序。 与 IDE 相比,它们通常只对应于 IDE 的代码编辑器段。 然而,它们往往远不止于此。 创建 IDE 是为了服务于软件开发的目的,而许多文本编辑器也旨在供非开发人员使用。

静态类型语言可以从 IDE 中获得很多好处。 由于严格的类型规则,IDE 可以在编译之前直接在编辑器中检测跨类和模块甚至跨文件的错误和命名不一致。 此功能是许多 IDE 的标准配置,因此,IDE 在静态类型语言中非常流行。

然而,对动态类型语言做同样的事情是不可能的。 例如,如果方法名称可能由代码本身生成,由一系列字符串连接构造而成,则尝试检测动态语言中的命名错误只需要运行实际程序即可。 因为 IDE 的主要优点之一不适用于动态语言程序员,所以他们更倾向于坚持使用像 Sublime 这样的文本编辑器。 附带说明一下,这也是测试驱动开发运动围绕动态语言社区发展起来的主要原因,并且在静态语言中没有那么强大的追随者。

是什么造就了出色的编程编辑器?

除了各种语言的许多不同功能外,每个编程编辑器都需要有一个组织良好且干净的用户界面。 整体美学吸引力也不应被忽视。 这不仅仅是好看的问题,因为精心设计的编辑器具有正确的字体和颜色选择,有助于减轻眼睛疲劳并提高工作效率。

在当今的开发环境中,无论功能集如何,陡峭的学习曲线都是一种负担。 时间总是宝贵的,所以一个好的编辑器应该很容易习惯。 理想情况下,程序员应该能够立即开始工作,而不必跳过太多的环节。 瑞士军刀是一种实用且有用的工具,但任何人都可以在几分钟内掌握它。 同样,对于编程编辑器来说,简单是一种美德。

用户界面、功能和工作流程

让我们仔细看看 UI、不同的特性和功能,以及应该成为任何编程编辑器一部分的常用工具。

当然,行号应该默认打开并且易于打开或关闭。

片段对于在固定布局中插入标准化文本块很有用。 然而,编程很多事情都是只说一次,所以要小心使用代码片段,因为它们可能会让你的代码在未来难以维护。

对当前文件进行 lint 或语法检查的能力非常有用,启动它的能力也是如此。 如果没有此功能,程序员必须切换到外部命令行窗口,选择并运行正确的命令,然后逐步查看错误消息以查找错误源。 但是,lint 必须在程序员的控制之下,因为 lint 引起的延迟可能会在关键时刻中断编码器。

内联文档

只要不妨碍内联文档,它就很有用,但是在类定义上打开浏览器页面有时会更有用,尤其是当有很多相关的类不直接相互扩展时。 从浏览器文档剪切和粘贴代码到正在编写的代码是很容易的,因此随着程序员对文档知识的增加,内联文档的额外复杂性通常变得不那么有用,实际上,更烦人。

Word-completion 很有帮助,因为它速度快,几乎与编辑中的文档一样可靠,而且侵入性较小。 只需输入一个单词的几个字符,然后按 Enter 键即可获得其余部分,这是令人满意的。 否则,一个人会在过度打字的压力下工作,这被懒惰的程序员所憎恶,他们想要输入ee而不是更冗长的exponentialFunctionSquared 。 单词补全通过最小化打字、强制连贯命名和不妨碍来满足。

跨程序重命名变量和函数很有用,但您需要能够查看更改并确保您的代码没有损坏。 再次,单词完成是一个有用的中途站,因为它适用于所有语言; 您可以为具有较长生命周期的项目使用长名称,而不会产生输入开销。 您可以在本地通过较短的名称使用对它们的引用,以缩短可能会分布在过多行上的表达式。 如果您需要重命名,长名称是唯一的,因此这种方法适用于所有语言和所有文件。

源文件有时会增长很多。 代码折叠是一个很好的功能,它简化了长文件的阅读。

使用元字符和正则表达式对局部、增量或全局进行范围限制的查找/更改是当今最低要求的一部分,语法突出显示也是如此。

流行编程编辑器概述

多年来,我经历了许多编辑,这就是我对他们的看法:

  • Emacs:世界上最受欢迎的编辑器之一。 Emacs 最大的特点是它的可扩展性,尽管它的扩展语言很复杂(你甚至可以用Mx tetris在其中玩俄罗斯方块)。 Emacs 的粉丝认为它基于终端的界面是一个很棒的特性,而其他人可能会争论它是一个缺点。 根据我的个人经验,我发现采用和学习的东西太多了。 我敢肯定,如果您知道如何使用 Emacs,您将永远不会使用其他任何东西,但是接受和学习整个文化比我想做的要多。 尽管如此,它在开发人员中的受欢迎程度证明它远非旧时代的遗物,而且仍然是我们未来的一部分。

  • Vi/Vim:Vim 是另一个强大的基于终端的编辑器,它是大多数 xNIX 操作系统的标准配置。 除了具有与 Emacs 不同的界面之外,我的观点实际上是相同的。 如果你是靠它长大的,我相信你永远不会使用其他任何东西。 掌握 Vi 技能将使您在通过 SSH 和其他紧要关头进行操作时变得更加简单,并且一旦您熟悉了击键,您就不会遇到速度问题。 虽然不像 Emacs 那样难以破解,但学习曲线仍然相当陡峭,而且它肯定可以使用窗口编辑器的一些不错的功能。

  • SublimeText:正如它的名字一样,SublimeText 是一个漂亮的文本编辑器,具有大量的功能。 与一些类似的编辑器不同,SublimeText 是闭源的,因此不能在低级别进行修改。 SublimeText 提供了传统文本编辑器的简单性,以及简洁快速的 UI。 许多开发人员发现它比 Vim 更易于使用,对于新手来说尤其如此。 学习曲线并不那么陡峭。 虽然 UI 简洁明了,但 SublimeText 确实提供了一些漂亮的功能,例如 UI 右侧的按比例缩小的显示代码,允许用户快速滚动代码并相对轻松地导航。 虽然它不是完全免费的,但功能有限的演示版是。 解锁所有功能将花费您 70 美元。

  • Atom 是 GitHub 为新一代开发人员制作编程编辑器的成果。 虽然它仍在进行中,但 Atom 是一个非常强大的编辑器,拥有一个充满活力的开发人员社区,他们热衷于新的扩展、JavaScript 库等。 它的缺点包括一些 UI 怪癖,一些附加包可能行为不端的可能性,以及在处理(非常)大文件时报告的性能问题。 但该项目正在积极开发中,目前的缺点可能会得到改善。 Atom 是一个开源项目,它可以很容易地被黑客入侵以满足您的需求。

  • Nano:在狭窄的角落里表现出色,但功能不够丰富,无法防止不可避免的想法潜入脑海,即必须有更快的方法来做到这一点,因为人们努力通过击键来缩进代码块,同时保持注释排列在第 80 列! 它甚至没有文本突出显示,并且不应该用于配置文件更改以外的任何事情。

  • TextMate2:TextMate最大的缺点是只能在Mac上运行。 正如其创建者所说,“TextMate 将 Apple 的操作系统方法带入了文本编辑器的世界。” 通过桥接 UNIX 基础和 GUI,TextMate 精心挑选了两全其美的优点,让专家脚本编写者和新手用户都受益。 它是许多 Ruby、Python 和 JavaScript 开发人员的首选编辑器,并且对 Bash 或 Markdown 也有很好的支持。 在本文发表时,TextMate 2 仍处于 Beta 阶段,但它已经拥有一个非常成熟的插件生态系统,有望将其扩展到 Emacs 的扩展之外。

  • jEdit:基于 Java,被一些人认为很慢。 开箱即用的配置可能会让某些人望而却步,但如果配置得当,jEdit 可以非常快,而且外观非常漂亮。

  • Eclipse:另一个广泛使用的 IDE,Eclipse 在 Java 开发人员中非常流行,但已经适应了许多不同的平台。 我们可以争辩说,它的整体架构是将其拉入水下的一块岩石,但它仍然是开发人员中最受欢迎的平台之一。

  • Aptana Studio:一个全面的开源 Web 应用程序 IDE。 它可以作为 Eclipse 插件使用,这使得它在一些 Java 开发人员中很受欢迎。 独立版本更加精简,并提供了一系列不同的主题和自定义选项。 对于在 Eclipse 中磨练技能的程序员来说,Aptana 的项目管理功能也可能派上用场。 虽然早期版本在某些硬件平台上存在性能问题,但这些问题已在 Aptana Studio 3 中得到解决,应该已成为过去。

  • NetBeans:另一个相对流行的具有跨平台支持的开源 IDE。 它在启动时比像 SublimeText 这样的精简编辑器要慢一些,并且与某些替代品相比,附加组件的选择是有限的。 由于无缝的 SCM 集成和 HTML5 支持,许多 Java 开发人员已经爱上了 NetBeans。 在最新版本中,NetBeans 对 PHP 的支持也得到了改进。

  • JetBrains:为 Java、Ruby、Python 和 PHP 提供一系列 IDE。 它们都基于相同的核心引擎。 JetBrains IDE 本身就非常强大,它已经获得了越来越多的追随者。 但是,它们不是免费的开源解决方案,尽管有 30 天的试用期,而且价格合理。

  • Komodo Edit:Komodo Edit 具有巨大的潜力,但它充满了烦人的小“陷阱”和特质,这可能会因其缺乏正交性而令人沮丧。 Komodo Edit 感觉杂乱无章,这很遗憾,因为它显然具有强大的功能。 我不断回到 Komodo Edit,希望我错过了一些组织原则,而每次,我都被一堆杂乱无章的能力击退。

  • Geany:Geany 不像这个列表中的许多其他编辑那样是主要的权力参与者。 它更多地由“它不是什么”来定义,而不是“它是什么”。 它并不慢,它没有很多过去的遗产,它没有宏功能,也没有很多缓冲功能的多窗口。 然而,它所做的事情,它做得足够好。 它可能是我尝试过的所有编辑器中要求最低的,并且仍然可以完成您对程序员编辑器的期望的 90%。 Geany 在 Ubuntu 上看起来足够好,这也是我选择它作为首选编辑器的原因之一。

我的结论

在这些伟大的工具中,仅仅宣称其中一个是最好的编程编辑器是冒昧的。 而且有很多编辑器我什至没有尝试过。 没有一种万能的解决方案。 这迫使我尝试了许多不同的编辑器; 如果您对编辑器的寿命更感兴趣,您还需要阅读 Roben Kleene 对代码编辑器的评估。

我目前正在使用 Geany,但这是因为它符合我的要求。 借助 Geany,以及来自 Perl/Gimp/Audacity/Sox 的大量帮助,我能够为我开发的 Android 应用程序开发和维护 Java 代码库,准备它们以针对多个分销商、源代码、lint 的不同配置进行编译、编译、dex 和生成.apk文件,并在全球范围内交付这些应用程序。

您的开发线可能规定了一组不同的要求,我希望我节省了您一些时间来研究最合适的编程编辑器。

相关:语言服务器协议教程:从 VSCode 到 Vim