阅读更多

0顶
0踩

研发管理

转载新闻 无谓的编辑器之争

2013-05-21 10:02 by 副主编 WnouM 评论(5) 有8552人浏览
本文转载自王垠的博客,作者在文中讨论了由来已久的编辑器之争,并给出了自己的解决方案——IDE以及结构化编辑器。


无谓的编辑器战争

很多人都喜欢争论哪个编辑器是最好的。其中最大的争论莫过于 Emacs 与 vi 之争。vi 的支持者喜欢说:“看 vi 打起字来多快,手指完全不离键盘,连方向键都可以不用。”Emacs 的支持者往往对此不屑一顾,说:“打字再快又有什么用。我在 Emacs 里面按一个键,等于你在 vi 里面按几十个键。”

其实还有另外一帮人,这些人喜欢说:“对于 Emacs 与 vi 之争,我的答案是 {jEdit, Geany, TextMate, Sublime...}”这些人厌倦了 Emacs 的无休止的配置和 bug,也厌倦了 vi 的盲目求快和麻烦的模式切换,所以他们选择了另外的更加简单的解决方案。

临时解决方案 —— IDE

那么我对此的答案是什么呢?在目前的情况下,我对程序编辑的临时答案是:IDE。

写程序的时候,我通常根据语言来选择最能“理解”那种语言的“IDE”(比如 Visual Studio, Eclipse, IntelliJ IDEA 等),而不是一种通用的“文本编辑器”(比如 Emacs, vi, jEdit, ...)。这是因为“文本编辑器”这种东西一般都不真正的理解程序语言。很多 Emacs 和 vi 的用户以为用 etags 和 ctags 这样的工具就能让他们“跳转到定义”,然而这些 tags 工具其实只是对程序的“文本”做一些愚蠢的正则表达式匹配。它们根本没有对程序进行 parse,所以其实只是在进行一些“瞎猜”。简单的函数定义它们也许能猜对位置,但是对于有重名的定义,或者局部变量的时候,它们就力不从心了。

很多人对 IDE 有偏见,因为他们认为这些工具让编程变得“傻瓜化”了,他们觉得写程序就是应该“困难”,所以他们眼看着免费的 IDE 也不试一下。有些人写 Java 都用 Emacs 或者 vi,而不是 Eclipse 或者 IntelliJ。可是这些人错了。他们没有意识到 IDE 里面其实蕴含了比普通文本编辑器高级很多的技术。这些 IDE 会对程序文本进行真正的 parse,之后才开始分析里面的结构。它们的“跳转到定义”一般都是很精确的跳转,而不是像文本编辑器那样瞎猜。

这种针对程序语言的操作可以大大提高人们的思维效率,它让程序员的头脑从琐碎的细节里面解脱出来,所以他们能够更加专注于程序本身的语义和算法,这样他们能写出更加优美和可靠的程序。这就是我用 Eclipse 写 Java 程序的时候相对于 Emacs 的感觉。我感觉到自己的“心灵之眼”能够“看见”程序背后所表现的“模型”,而不只是看到程序的文本和细节。所以,我经常发现自己的头脑里面能够同时看到整个程序,而不只是它的一部分。我的代码比很多人的都要短很多也很有很大部分是这个原因,因为我使用的工具可以让我在相同的时间之内,对代码进行比别人多很多次的结构转换,所以我往往能够把程序变成其他人想象不到的样子。

对于 Lisp 和 Scheme,Emacs 可以算是一个 IDE。Emacs 对于 elisp 当然是最友好的了,它的 Slime 模式用来编辑 Common Lisp 也相当不错。然而对于任何其它语言,Emacs 基本上都是门外汉。我大部分时间在 Emacs 里面是在写一些超级短小的 Scheme 代码,我有自己的一个简单的配置方案。虽然谈不上是 IDE,Emacs 编辑 Scheme 确实比其它编辑器方便。R. Kent Dybvig 写 Chez Scheme 居然用的是 vi,但是我并不觉得他的编程效率比我高。我的代码很多时候比他的还要干净利落,一部分原因就是因为我使用的 ParEdit mode 能让我非常高效的转换代码的“形状”。

当要写 Java 的时候,我一般都用 Eclipse。最近写 C++ 比较多,C++ 的最好的 IDE 当然是 Visual Studio。可惜的是 VS 没有 Linux 的版本,所以就拿 Eclipse 凑合用着,感觉还比较顺手。个别情况 Eclipse “跳转定义”到一些完全不相关的地方,对于 C++ 的 refactor 实现也很差,除了最简单的一些情况(比如局部变量重命名),其它时候几乎完全不可用。当然 Eclipse 遇到的这些困难,其实都来自于 C++ 语言本身的糟糕设计。

终极解决方案 —— 结构化编辑器

想要设计一个 IDE,可以支持所有的程序语言,这貌似一个不大可能的事情,但是其实没有那么难。有一种叫做“结构化编辑器”的东西,我觉得它可能就是未来编程的终极解决方案。

跟普通的 IDE 不同,这种编辑器可以让你直接编辑程序的 AST 结构,而不是停留于文本。每一个界面上的“操作”,对应的是一个对 AST 结构的转换,而不是对文本字符的“编辑”。这种 AST 的变化,随之引起屏幕上显示的变化,就像是变化后的 AST 被“pretty print”出来一样。这些编辑器能够直接把程序语言保存为结构化的数据(比如 S表达式,XML 或者 JSON),到时候直接通过对 S表达式,XML 或者 JSON 的简单的“解码”,而不需要针对不同的程序语言进行不同的 parse。这样的编辑器,可以很容易的扩展到任何语言,并且提供很多人都想象不到的强大功能。这对于编程工具来说将是一个革命性的变化。

  • 已经有人设计了这样一种编辑器的模型,并且设计的相当不错。你可以参考一下这个结构化编辑器,它包含一些 Visual Studio 和 Eclipse 都没有的强大功能,却比它们两者都要更加容易实现。你可以在这个网页上下载这个编辑器模型来试用一下。
  • 我之前推荐过的 TeXmacs 其实在本质上就是一个“超豪华”的结构化编辑器。你可能不知道,TeXmacs 不但能排版出 TeX 的效果,而且能够运行 Scheme 代码。
  • IntelliJ IDEA 的制造者 JetBrains 做了一个结构化编辑系统,叫做MPS。它是开源软件,并且可以免费下载。
  • 另外,Microsoft Word 的创造者 Charles Simonyi 开了一家叫做Intentional Software 的公司,也做类似的软件。
  • 大小: 41.7 KB
来自: 王垠的博客
0
0
评论 共 5 条 请登录后发表评论
5 楼 thc1987 2013-05-23 14:51
开发效率啊亲
4 楼 bean-woo 2013-05-23 09:42
有工具不用是SB
3 楼 mathgl 2013-05-21 17:11
white_crucifix 写道
写java的几乎没有多少人会故意避开IDE吧,写脚本语言的程序员倒是不用IDE的很常见。毕竟java相比脚本语言写起来代码会多一点,也容易笔误,总是靠编译来调错翻来覆去也麻烦


用vim, emacs写java很有些行为艺术的味道。。

2 楼 guilipan 2013-05-21 14:39
人们用IDE是为了省时省力偷懒,可是有的人懒到了连IDE都不想装的地步。。。
1 楼 white_crucifix 2013-05-21 10:18
写java的几乎没有多少人会故意避开IDE吧,写脚本语言的程序员倒是不用IDE的很常见。毕竟java相比脚本语言写起来代码会多一点,也容易笔误,总是靠编译来调错翻来覆去也麻烦

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 编辑器与IDE

    装载: 编辑器与IDE无谓的编辑器战争 很多人都喜欢争论哪个编辑器是最好的。其中最大的争论莫过于 Emacs 与 vi 之争。vi 的支持者喜欢说:“看 vi 打起字来多快,手指完全不离键盘,连方向键都可以不用。”Emacs 的...

  • 【转】编辑器与IDE

    无谓的编辑器战争 很多人都喜欢争论哪个编辑器是最好的。其中最大的争论莫过于 Emacs 与 vi 之争。vi 的支持者喜欢说:“看 vi 打起字来多快,手指完全不离键盘,连方向键都可以不用。”Emacs 的支持者往往对此...

  • 王垠:编辑器与IDE

    无谓的编辑器战争 很多人都喜欢争论哪个编辑器是最好的。其中最大的争论莫过于 Emacs 与 vi 之争。vi 的支持者喜欢说:“看 vi 打起字来多快,手指完全不离键盘,连方向键都可以不用。”Emacs 的支持者往往对此...

  • [王垠系列]编辑器与IDE

    无谓的编辑器战争 很多人都喜欢争论哪个编辑器是最好的。其中最大的争论莫过于 Emacs 与 vi 之争。vi 的支持者喜欢说:“看 vi 打起字来多快,手指完全不离键盘,连方向键都可以不用。”Emacs 的支持者往往对此...

  • 一个JAVA码农的Node之旅

    对于开发环境, 青菜萝卜各有所爱, 无论你是使用神的编辑器/编辑器之神, 或是sublime/atom/npp之流, 亦或是WebStorm高富帅有钱任性, 都是很不错的选择。 supervisor 是个好东西, 它可以帮你watch代码变更, 自动重启...

  • 一个Java码农的Node之旅

    对于开发环境,无论你是使用编辑器/编辑器之神,或是sublime/atom/npp之类,亦或是WebStorm高富帅有钱任性,都是很不错的选择。 Supervisor可以帮你watch代码变更,自动重启服务,从而节省了手工重启程序的时间。 ...

  • Java中高级面试题总览(二)

    减少无谓的线程切换。 在NIO中有几个核心对象需要掌握:缓冲区(Buffer)、通道(Channel)、选择器(Selector)。 Buffer实际上是一个容器对象,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的...

  • 一张图概括编程语言发展史

    一张图概括编程语言发展史 一张图概括编程语言发展史 Intro 编年史 ...它是一种被标准化的交流语言,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用...之所以有那么多种不同的编程...

  • 不要困在自己建造的盒子里——写给.NET程序员(附精彩评论)

    真正的程序员肯定不会限定在.net平台,程序员就是为了解放生产力,提高工作效率而生的,其实除.net以外,还有其他很好玩的技术或工具,比如你所说的编辑器之神vim,无论是windows平台还是linux平台,都是其它编辑器...

  • 近年创业目睹之怪现状

    标 题: 近年创业目睹之怪现状 一章 发信站: 水木社区 (Sun Jul 8 23:07:38 2012), 站内 外出取材结束,改了一些不通顺的地方,又更了几千字,算是补写到第一章结束吧。 不出意外,大概每周末写一章,每章字数一...

  • 你必须知道的.NET(第2版)

    对于软件开发者来说,其心态越来越急躁,不愿意踏踏实实静下心来研究一点技术,做几年的开发工作都争着转向管理方面;而对于IT出版业来说,各种粗制烂造的书籍层出不穷,导致软件开发者对国人的书丧失了信心。 让...

  • Emacs 学习笔记一

    何必做这些无谓的口舌之争呢? 记 得还有人说过一句似乎听来是很无奈的一句:Emacs是很优秀,但是UNIX系统还有一些其他的优秀软件,由此我们也可以看出人们对态Emacs的态度. 有人说Emacs本身就是一个操作系统,我们...

  • 微信Java开发工具包,支持包括微信支付、开放平台、公众号、企业微信、视频号、小程序等微信功能模块的后端开发

    微信Java开发工具包,支持包括微信支付、开放平台、公众号、企业微信、视频号、小程序等微信功能模块的后端开发。

  • 如何制作MC(需要下载海龟编辑器2.0,下载pyglet==1.5.15)

    如何制作MC(需要下载海龟编辑器2.0,下载pyglet==1.5.15)

  • 民宿预订管理系统 SSM毕业设计 附带论文.zip

    民宿预订管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

  • matlab常微分方程和常微分方程组的求解.docx

    内容概要:本文详细介绍了如何利用MATLAB解决各种类型的常微分方程(组),包括解析解和数值解的方法,并给出了具体的实例以及求解步骤。重点探讨了dsolve()函数的使用来获取方程的符号解,以及各类Solver命令如ode45、ode23等用于求数值解的特点与适用情况。 适合人群:高校理工科专业学生、科研工作者,尤其对数学建模感兴趣的研究人士。 使用场景及目标:帮助用户理解和应用MATLAB解决实际工程和科学研究中的微分方程问题,提升问题解决效率。 其他说明:除了理论介绍外,文档还提供了多个实际案例及其相应的MATLAB脚本供参考和练习,有助于加深理解和提高动手能力。

  • qwen2.5 + langchain pip依赖包

    qwen2.5 + langchain pip依赖包

  • SeeJoPlayer视频播放器.zip

    SeeJoPlayer视频播放器

  • 滑动屏幕调整屏幕亮度.zip

    滑动屏幕调整屏幕亮度

  • Fragment动画效果.zip

    Fragment动画效果

Global site tag (gtag.js) - Google Analytics