IDE(Integrated Development Environment,集成开发环境)是一种伟大的工具,可以使开发者的生活更轻松。我简直不敢想象,没有它们的工作会是什么样子。
但是,它们为我们提供的帮助并非无偿,而我也正遭受着这种后果。我使用 2019 年左右生产的、性能不佳的 MacBook Air ,在它上面运行我最喜欢的 IDE、Jetbrains 的 IntelliJ IDEA 社区版,但整个经历一直都不怎么愉快。
在这篇文章中,我想提出一个问题:IDE 是否真的需要这么重,以致于我们在数年前价值一千美元的笔记本电脑上几乎无法使用 IDE?
我遇到的问题
使用 IntelliJ 2022.3 的截图
IntelliJ 是一款非常出色的产品,对于专业开发来说,我根本不会考虑换成其他东西。因此,在这种情况下,拥有最好的笔记本电脑和最好的工具应该是优先考虑的。在我这台拥有 64GB 内存和 10 个 CPU 内核的顶配 Mac M1 上,一切都感觉轻盈流畅(好吧,几乎一切……但在上面运行带有几个 Docker 容器的 Kubernetes,Mac M1 居然有点跑不动了!),所以我在工作中没有任何问题。
但当我在家里想做一个业余爱好项目时,为了不让工作与私人事务混在一起,我试图将它们严格分开,我宁愿选择我家那台性能较弱的笔记本电脑。
问题在于,仅仅在使用 IntelliJ 编写代码和运行测试一个小时左右之后,这台笔记本电脑就变得非常烫手了。风扇的噪音越来越大,最后实在让人讨厌了。
这还不算,当你几乎无法使用任何 IDE 功能的情况下对内容进行“索引”时,这个过程要花上整整一分钟,甚至更长的时间……而且那是在花费了相当长的时间之后,仅仅扫描要索引的东西!
我还有一台戴尔 XPS 13,运行的是 Linux,配置相当不错,但情况也是一样,而且风扇的噪音更大。
我可以毫无问题地看高清视频、听歌、上网冲浪和许多其他事情……但显然,在不是顶配的任何机器上编写代码,要求都太高了。
问题的出现和我所用的语言堆栈没有任何关系。例如,我在 Java、Groovy 和 Dart(这些是我最近写得最多的编程语言)中遇到了或多或少相同的问题。我还注意到,在我使用 Kotlin 和 Java 的项目中,情况明显更糟。因此,问题看起来跟某种特定的语言或者插件没有关系。
尽管这样说有点伤人,但作为 JetBrains 及其工具的忠实拥趸,IntelliJ 似乎已经变得过重,无法在 2020 年初的笔记本电脑上正常运行,而这台笔记本电脑又不是很高端的产品。
我最近一直在向 Jetbrains 报告问题,在最后一次他们告诉我关闭一些插件,因为通常会有一个流氓插件导致问题……从某种意义上来说,这是对的,因为我已经禁用了我不太在意的插件(WASM、Scala、Makefile、Clojure-Kit、JMH、Gradianto),这个问题的确没有那么明显了……但它肯定还是存在的。
IntelliJ 替代方案
Jetbrains 正在开发 Fleet,这是 JetBrains 的一个新的、更轻的编辑器,虽然它看起来很有前途(它非常美观,考虑周全,非常时尚),但在我的笔记本电脑上仍然感觉不够轻……它毕竟使用了与 IntelliJ 相同的后端,这也许就是问题所在(不过这也是一个很大的优势,因为 IntelliJ 的大部分出色的功能也存在于 Fleet 中)……
我可能最终会转向它,但鉴于它仍然存在一些相当严重的问题(这很自然,目前还处于测试阶段),所以估计它还需要一段时间才能准备好投入使用。
当我在十年前使用 Eclipse 的时候,它是一个不错的 IDE,但不幸的是,它变得(我最近确实试了一下!)对用户相当不友好。我不想冒犯任何喜爱它的人,但现在我不会考虑重新使用这个工具了。更不用说,它对大多数非 JVM 语言,特别是较新语言的支持非常差,因为它已经失宠了相当长的一段时间(它曾一度是有商业头脑的语言设计者的首选 IDE)。
很遗憾,对我来说,Vim 是一个我从未想过要使用的工具。我知道有几个基于 VIM 的、新颖有趣的 IDE 项目,比如 neovim,考虑到其广泛的应用,这使它成为一个有吸引力的选择。但我偶然发现自己在旧编辑器之战中坚定地站在 Emacs 一边,正如我们将看到的那样。我想,有一天,我可能会跳到另一边去看看,但那一天并不会很快到来。
可能有人会问:为什么不是 VS Code?好吧,我实际上已经安装了它,但我不能让自己使用它。在我看来,它的快捷键并不符合人体工学(而且我也懒得去定制它,因为接下来的原因),它仍然很重,基于 Electron,而且和其他的替代方案比起来,在使用我关心的语言时,我觉得它很慢。我承认 VS Code 看起来不错,也知道它是当今最流行的编辑器,但它就是不适合我。如果你觉得它足够好,那也可以了……但我肯定需要别的东西。
Emacs 来拯救?!
这就是为什么我目前正尝试重新使用 Emacs。
可能你不了解 Emacs,这是一款与 Vim 一样具有传奇色彩的文本编辑器,但是它所能做的事情要多得多。它存在的时间很可能比你活着的时间还长(当然比我还长),而且仍在继续发展!
它是 GNU 项目的一部分,可以说是早期自由和开源软件的最成功的例子之一。
与我尝试过的其他软件相比,Emacs 是非常轻量的(有趣的是,在它刚创建出来的时候,它被认为是一个重量级的软件……事情发生了怎样的变化)!最近一些开发给大多数编辑器带来了先进的 IDE 功能(当然,我说的是 LSP),今天,Emacs 是一个功能非常强大的 IDE。
它确实需要任何从未尝试过的人进行初始投资,因为你从一个现代编辑器中期待的大多数东西要么必须手动配置、要么内置,但以完全不同的方式工作。你还需要对 Lisp 有一点了解(Emacs 是基于它自己的 Lisp 方言 elisp 构建的),但如果你是那种甚至考虑像 Emacs 这样的东西可以彻底破解的人,这实际上也是乐趣的一部分。
我注意到,有更多“开箱即用”的 Emacs 发行版,如 Spacemacs 和 Doom Emacs,对于那些想要一个现代编辑器而不必手动配置一切的人来说,会感觉更舒服。
几年来,我已经成功地将 Emacs 配置为最基本的现代快捷键,这些快捷键在 90 年代后的大多数其他应用程序中都能使用(比如 Cmd+S 保存,Ctrl+Tab 切换缓冲区等等)。 而且对我喜欢使用的所有语言(Java、Go、C、Rust、Dart、Groovy、Common Lisp 甚至 Zig)都有很好的支持,包括自动完成、内联文档、代码导航(转到定义、查找实现、返回/前进到上一个/下一个位置等)、项目范围内查找文件/类型/符号、一键测试运行器以及其他许多我认为是 IDE 基本功能的东西。
不过,我的 Emacs 设置(请随意取用其中的一些片段),仍不太符合我在 IntelliJ 中得到的开箱即用的效果。
例如,在 IntelliJ 中,配置想使用的 Java 版本是很容易的,不仅包括编译器,还包括你想坚持使用的 Java 标准 API 版本(因为现在 Java 发展很快,这一点很重要),如果你要使用的特性在你使用的版本上不可用,它会警告你,这点非常好。但在 Emacs 上,这样做就很有问题,因为按照我使用 lsp-java 的方式,配置 Java 项目需要通过 Eclipse 完成!
当我试图改变代码格式,并被迫下载 Eclipse 来改变它的默认规则时,我才痛苦地意识到这一点(它会强制删除换行符,让行填满所配置的整个最大宽度,把代码弄得一团糟——我真想知道,谁他妈会认为这是一个好的默认做法!)。
Emacs 还忽略了 IntelliJ 会给出的其他一些重要的、更高级的警告。比如当你检查一个在逻辑上不可能的条件时,它会发现那些令人震惊的逻辑错误……还有一些平凡的功能,我还没有费心去发现如何实现,比如自动修复警告(我真的很怀念 IntelliJ 的 Alt+Enter)和为诸如 System.out.println 和 public static void main 插入自定义代码片段(尽管在 Emacs 中这样做一点也不难,我最终会做到的!)。
另一方面,Emacs 有 Magit,这是一个令人惊叹的 Git 用户界面,感觉很棒。Org Mode 给文本文件带来了神奇的力量,甚至还有像 elfeed 这样的东西,它可以让你不离开编辑器就可以阅读你最喜欢的新闻(来自 RSS feed 和类似 HackerNews 和 Reddit 的东西)!
但 Emacs 真的更轻吗?
为了回答 Emacs 是否真的更轻的问题,我实际上在一个星期六的 24 小时内截图了我的笔记本电脑的电池使用情况,当时我花了一天的大部分时间在 IntelliJ 编码,然后第二天做了同样的事情,但是使用 Emacs (在同一个项目中工作,做非常类似的事情)。
尽管周日我花在编程上的时间比较少,但我认为这些图片让事情变得非常明显。
使用 Emacs 的情况,请注意,在一个美好的下午编码过程中,电池曲线出现了平滑的向下倾斜。
在早上使用 IntelliJ 的情况,你可以看到充满电后,电量被“凶猛吞噬”,在我晚上回到 Emacs 之前,电量就恢复了正常的使用模式。
并不是说我需要这个才知道 IntelliJ 真的非常耗电!我之所以知道是因为笔记本电脑总是在我使用它的时候明显变慢了。像工作区切换动画这样的体验变得极其糟糕。
虽然你可以在上面的截图看到,我充一次电就几乎可以在 Emacs 上呆上一整天,但使用 IntelliJ 我只花了半个上午就不得不插上充电器。
然而,我在意的主要问题是,风扇的声音太大,这虽然试图让 CPU 保持凉爽,但键盘变得太热,触摸起来很不舒服。这些因素加在一起,让我几乎不可能继续在我的小笔记本电脑上使用 IntelliJ,或者至少让我感到真的很不舒服。
最后的感想
很长一段时间以来,我一直想写一篇关于这个问题的文章。恐怕结果可能不是很有启发性。但我仍然认为我上面说的话需要说出来。
Emacs 比任何现代 IDE 都轻得多,同时仍然具有所有重要的特性。我希望 JetBrains 能听到我的心声,并把它放在心上、为此做点什么!也许,Fleet 就是解决办法?!
Emacs 很棒,但它基本上是用爱发电的志愿者在为其努力,因此很多东西感觉真的很不成熟,比如没有文档、难以使用等等。这很大程度上表明,只有一家大公司(或少数公司)支持一个产品时,用户才能真正得到一个完美的东西。但就目前而言,它似乎是我除专业用途外的最佳选择。我真的很高兴它的存在。
原文链接:
https://renato.athaydes.com/posts/switching-from-heavyweight-ides-to-emacs.html