阅读更多

0顶
0踩

研发管理

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

2013-05-21 10:02 by 副主编 WnouM 评论(5) 有8572人浏览
本文转载自王垠的博客,作者在文中讨论了由来已久的编辑器之争,并给出了自己的解决方案——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本身就是一个操作系统,我们...

  • 2024年机器人大作业代码

    2024年机器人大作业代码

  • 学生信息管理系统,idea-mysql小项目,记录一下

    这是mysql文件直接导入就行了,可以查一下相关指令例如:mysql -u root -p mydb_copy < mydb.sql就好了,这里就不多赘述了

  • 搜索关键字飞入飞出效果.zip

    Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

  • 基于ssm的团员管理系统源代码(完整前后端+mysql+说明文档+LW).zip

    管理员 管理员信息管理 学院管理 辅导员管理 学生信息管理 公告信息 辅导员 个人资料修改 团员信息管理 优秀团员管理 团费缴纳管理 团员活动管理(主题,内容,参与人数,日期) 团员活的报名 学生 个人资料修改 入团申请管理(提交申请,申请结果查看) 团员活动查看(只能查看,不能修改,活动报名) 团员活动报名 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7

  • 基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)

    基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目),个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕设的学生和需要。

  • Python项目-自动办公-51 Excel_案例_把文件夹整理到Excel中.zip

    Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

  • 汽车检测33-YOLO(v5至v9)数据集合集.rar

    汽车检测33-YOLO(v5至v9)数据集合集.rar多对象-V4 2023-03-12 9:33 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包含4278张图像。 多对象以Yolo V5 Pytorch格式注释。 将以下预处理应用于每个图像: *调整大小为640x640(拉伸) 应用以下扩展来创建每个源图像的3个版本: 将以下转换应用于每个图像的边界框: *以下90度旋转之一的同等概率:无,顺时针,逆时针方向

  • Python项目-自动办公-44 excel处理实例(二维表转一维表).zip

    Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

Global site tag (gtag.js) - Google Analytics