阅读更多

0顶
0踩

研发管理

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

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

  • Delphi 12.3控件之数据库开发基础课程SQL学习01-认识Navicat SQL工具,创建数据库和表.rar

    Delphi 12.3控件之数据库开发基础课程SQL学习01-认识Navicat SQL工具,创建数据库和表.rar

  • 基于java的ssm教学质量评价系统(含LW+PPT+源码+系统演示视频+安装说明).7z

    本教学质量评价系统采用的数据库是Mysql,使用JSP技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 通过标签分类管理等方式,实现管理员;个人中心、公告信息管理、学院管理、学生管理、教师管理、督导管理、教师信息管理、学生评教管理、督导评教管理,学生;个人中心、公告信息管理、教师信息管理、学生评教管理,督导;公告信息管理、教师信息管理、督导评教管理,教师;个人中心、公告信息管理、教师信息管理、学生评教管理、督导评教管理等信息管理功能,从而达到对教学质量评价系统信息的高效管理。 关键词:教学质量评价系统 ,JSP技术,Mysql数据库

  • springboot社区养老服务系统设计与实现(代码+数据库+LW)

    摘  要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本社区养老服务系统就是在这样的大环境下诞生,其可以帮助使用者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此社区养老服务系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。社区养老服务系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,服务种类管理,社区服务管理,服务预约管理,物品种类管理,物品信息管理,借用信息管理,归还信息管理,活动分离管理,社区活动管理,活动报名管理,疫情监控管理,物业收费管理,资讯中心管理,意见中心管理,系统管理。用户可以注册登录,查看管理员发布的各中心信息,可以服务预约,借用归还,活动报名,发布自己的疫情监控信息,查看物业收费等操作。社区养老服务系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为

  • 南京林业大学毕业设计(论文)规范解读及应用指南

    内容概要:本文档详细阐述了南京林业大学本科毕业设计(论文)的具体撰写规范和要求,旨在确保毕业生能够提交高质量的设计(论文)。主要内容涵盖了从标题到附录的所有部分的撰写要求和格式标准,强调毕业设计(论文)不仅检验学生的学术能力,也是教学质量的关键指标。文中详细描述了每个组成部分的内容要求和书写格式,如标题、摘要、正文、结论、参考文献及附录的具体规定,并提供了具体的标准和操作流程。同时,针对不同类型的专业和学科提出了不同的撰写细则,确保规范适应广泛的学术背景和研究主题。 适合人群:即将进行本科毕业设计(论文)撰写的南京林业大学在校生及其指导教师。 使用场景及目标:① 帮助学生熟悉并掌握毕业设计(论文)的各项要求,从而确保顺利完成学业要求;② 教师利用该规范来审核和指导学生的工作。 阅读建议:该文档条理清晰,分类细致,因此读者应按步骤逐步理解和实践每一部分内容的要求和规范。同时,注意不同专业对于篇幅、内容重点等方面可能存在的特定调整。此外,对于涉及具体的排版和技术术语部分,建议配合实际案例进行练习。

  • 电子与机器人工程领域的计算机视觉视频稳定化技术实现与评估作业指导(2024-2025)(可复现,有问题请联系博主)

    内容概要:本作业指导书详细介绍了面向电气与机器人工程专业的计算机视觉模块课程(EL3105),旨在让学生深入理解和实现实时视频稳定化技术,特别是针对相机抖动补偿的方法。学生需要撰写报告并实现算法,解释选择的视频稳定方法以及具体的软件实现步骤。报告应涵盖背景介绍、解决方案详述、实验过程及其结论。提供的两个预录制视频将作为学生练习的数据集来测试视频稳定性。此外,学生需保证提交材料为原创,未使用任何AI工具辅助。 适合人群:适用于电气与机器人专业本科与研究生级别的学生,在掌握了基本图像特征提取匹配的基础上进一步探索高级应用技能。 使用场景及目标:帮助学员掌握关键点检测、稳健匹配、运动估计等基础知识的应用能力,同时培养他们独立解决实际问题的能力和编程技巧,特别是在视频序列处理方面。 其他说明:评估日期明确为2024年春季学期初开始,并于三月底截止。成绩构成包括对采用方法合理性阐述占30%,具体编码执行效果占40%,最后还有15%取决于成果评价,剩下则是对于报告形式的要求如语言表述规范性和引用文献准确性方面的情况打分。所有提交均在线进行并且需要符合特定格式要求。

  • Delphi 12.3控件之Delphi12TMS WEB Core 2.6.0.0 Beta Retail Setup for D12 (September 24, 2024).rar

    Delphi 12.3控件之Delphi12TMS WEB Core 2.6.0.0 Beta Retail Setup for D12 (September 24, 2024).rar

  • 蚂蚁金服从云到端一站式解决方案-移动开发平台mPaaS V1.1.34产品介绍

    内容概要:本文档详细介绍了蚂蚁金服移动开发平台(mPaaS)及其各个核心子组件的构成和优势,涵盖移动网关(MGS)、移动推送(MPS)、移动分析(MAS)、移动同步(MSS)、实时发布(MDS)以及智能投放(MCDP)。各组件在提供基础能力的前提下分别具有不同特点。移动开发平台致力于为企业提供高可用、高效、稳定的一站式解决方案,并在架构、安全、灵活性等方面有着独特之处。 适用人群:移动应用开发商、产品经理、运维和技术专家、项目管理者以及其他相关人员。 使用场景及目标:通过提供一站式的移动开发方案,帮助企业更好地开发、管理和运维移动应用,降低技术门槛和发展成本,促进应用创新与发展。各组件具体应用于移动应用开发过程的不同环节中: 1. 开放移动服务能力:MGS用于建立统一的通信接口,简化移动端与服务端对接; 2. 移动信息即时触达:MPS用于实现移动推送,提供个性化消息通知; 3. 应用数据采集与分析:MAS用于大规模移动数据分析,辅助决策; 4. 数据增量推送及更新同步:MSS用于保证业务信息同步; 5. 提供高效的版本管理:MDS用于应用实时部署; 6. 支持灵活精准的投放运营:M

  • 基于java的ssm个人交友网站(含LW+PPT+源码+系统演示视频+安装说明).7z

    个人交友网站的主要使用者分为管理员和用户,实现功能包括管理员:个人中心、用户管理、交友信息管理、线下活动管理、活动报名管理、系统公告管理、论坛交流、系统管理,用户:个人中心、交友信息管理、活动报名管理、我的收藏管理,前台首页;首页、交友信息、线下活动、系统公告、论坛信息、我的、跳转到后台、客服等功能。由于本网站的功能模块设计比较全面,所以使得整个个人交友网站信息管理的过程得以实现。 本系统的使用可以实现本个人交友网站管理的信息化,可以方便管理员进行更加方便快捷的管理。 关键词:个人交友网站;JSP技术;MYSQL数据库;

Global site tag (gtag.js) - Google Analytics