有个比较隐蔽的问题似乎很少答案接触到:
GUI界面中,版本之间的兼容性是得不到保证的:例如说你现在用惯了vc6(学校sb老师要求的),假定你在4年的大学里,已经把那个老掉牙的vc6用得无比炉火纯青,任何功能闭着眼睛都能准确地用鼠标或者快捷键打开相应的设置对话框。现在你毕业了,公司的开发环境是vs2019,要设置同样的参数,你能不能第一次就能保证找到?又过几年,你公司要求你把这个项目迁移到mac/ios上,那个sb的apple,要求你必须用xcode才能编译。那这时,你之前在vs系列上的所有无比熟练的ide/gui操作技巧和习惯,又有多少能迁移到xcode上?
而vim/emacs等编辑器,在版本间迭代时,只要配置文件不动,几乎可以做到整个操作习惯完整迁移。而且,不同平台之间迁移,操作习惯也基本上能得到保证,这就在很大程度上可以节约迁移平台时的学习和适应成本。
这个问题的本质是:
基于CLI/命令行的操作可以很便捷的通过脚本/配置进行灵活的组合和固化。这使得很多本来是非常复杂的命令/操作/判断,都可以得到极大程度的简化。而且只要脚本/配置的名字或者什么关键字不发生变化,那么它就可以持续延续下去。类似的,新功能的添加,只要名字/关键字不发生冲突,也可以无缝的引入而不引发任何改变。如果用户用不到这个新功能的话,甚至可能干脆就对此毫无感知。
而任何GUI程序,不管前后版本之间如何用心设计仔细研究,都很难保证在两个版本间保持绝对的操作兼容性。如果跨越几个版本,那么可能连不少核心功能的操作或者位置排布都可能会有不可避免的变化。
我发现一个很有意思的现象。
说到GUI操作方式用于开发,就象很多人在回答里说的,GUI操作方式在简单的情况下还行,复杂点的情况下效率难以提升,命令式编辑器、文本编辑的方式,效率反而更能有稳定的保障。
但说到WEB应用,很多程序员认为桌面软件就该死掉了,以后所有应用都用浏览器,所有工作都用WEB应用就够了。是真认为其他办公人员不需要“高效地敲键盘”了吗?
桌面应用的操作,设计得好的话,直接敲键盘就做完所有事了,对比在浏览器中必须鼠标和键盘一起用的方式,和把vim拿来和GUI编辑器对比是一样的情况啊。我们很少有看到纯用键盘输入或对此支持得很贴心的网页吧?
至少财务人员也是很需要有能“高效地敲键盘”的软件的。
所以这个问题问“为什么”,因为他们有过体会,才得出这样的结论。对于他们没体会过的(比如象财务人员一样录一堆山一样高的凭证),他们是不会得出这样的结论的,就只会想当然。
最后一更后 的 一更,因为我不得不分享这个视频。
为啥程序员喜欢 Vim 这类编辑器?因为这玩意是 programmable,程序员的编辑器不能程序员操作合适吗?翻 qiang 去看一下这个视频,你就知道 Gui 编辑器永远不可能超越 Vim 或者其他 可编程编辑器。。。。谁在乎 写小说,程序员要写程序,包括写程序也是写程序。
最后一更:
我杠不动了。写这么长的东西,没人看,找个 Coner Case 来杠。
强调一下:答案写的清清楚楚 - Vim模式的优势是在编码的场景下,就是你平时写程序会用到的操作;脱离场景谈优势,没有意义,Vim被创造出来就是处理计算机相关的数据和文件
以下是原答案的引用:
比如你用VScode,如果你开了Vim模式,那么他跟VIM没有特别多区别(当然,肯定还是有区别的),而且GUI的vim mode会带来一些优势,比如一些操作用鼠标还是比较方便的。
你就会看到描述和可重复的重要性和高效。特别是对于程序员,我们如何高效的操作代码块,修改代码块,浏览代码块,这些功能,没有任何一款编辑器可以超越Vim的编辑逻辑。当然你不需要用命令行的Vim,但是Vim 模式才是高效的关键。
结论:GUI最牛逼,千万别用Vim,会拖慢你写程序的进度。
---
其实题主有两个问题:
这两个问题其实有密切的联系。首先第一个问题,命令行确实比GUI更加高效,秘密在哪里呢?在于可重复性和可回溯性 + 容易传播。
命令行的优势并不是看起来很酷,而是他的所有操作都可以被 文本化,即你可以通过一串简单的文本描述你想进行的操作,比如 `cat some.txt | grep hello`,这段东西可以被存成一个可执行bash文件,反复执行,而且放在不同的电脑上,都可以执行(满足一些前置条件当然),这就是可重复性;而这个文本可以被版本控制软件,如Git,追踪并记录历史变动,也就是说,你可以回溯到任何一个你Commit过的版本,比如你就该了命令,但是错了,你就可以很方便的回滚,这就是可回溯。
就这两个东西是GUI不具备的,而这两个东西就是高效的关键所在。现在连基本的infrastructure配置都已经文本化了,你不会指望用一个GUI去配置上百个K8s节点,然后发现你点错了一个设置,无法回滚。
当然,你也可以用一些工具把鼠标操作文本化,但是这就有点舍近求远了。不过在某些场景是必须的,比如一些前端的测试,Selenium
回到第二个问题,命令行编辑器不一定比GUI编辑器高效,但是 命令行编辑器,我那VIM举例因为我比较熟悉,的优势并不在于是不是命令行,而是他的编辑逻辑。比如你用VScode,如果你开了Vim模式,那么他跟VIM没有特别多区别(当然,肯定还是有区别的),而且GUI的vim mode会带来一些优势,比如一些操作用鼠标还是比较方便的。
那么命令行编辑器,比如Vim,的优势在哪里呢?其实还是可重复性 + 描述做什么而不是怎么做。特别对于编程,编程的过程大部分时间并没有在输入代码,而是编辑代码,而Vim(Emacs)的特长就是编辑,而且是可重复的编辑。
我举个例子:
a is a b is b c is c 你想把上面的文本变成:
- a is a - b is b - c is c 你会怎么做?在一般的编辑器中,你只能移动光标到行首,然后插入 - 。VIM会怎么做?C+v 竖向选择,3j选择3行,I 插入, - 输入,会车。优势在哪里呢?想一下如果你有30行这样的东西,你要做30次插入么?不,告诉编辑器你要编辑的区域,然后做一次。
另一个例子,我想要删除双引号内部的东西,这个操作在编程中非常常见,vim 怎么做?只需要 di” (delete in "" 就是这么优雅,如果把上下左右+删除比作汇编语言,VIM就是Haskell,就是这么High level) ,没错,就三个按键,不需要鼠标,而且不论双引号里面有多少内容都会被删掉,而且精确控制。感受一下用鼠标?如果内容很长,你就很难受了……怎么点都点不准……
我再举一例:
a is a b is b c is c 你想把开头的 abc变成 hi
hi is a hi is b hi is c 你怎么玩?vim怎么办?一般的编辑器怎么办?你就会看到描述和可重复的重要性和高效。特别是对于程序员,我们如何高效的操作代码块,修改代码块,浏览代码块,这些功能,没有任何一款编辑器可以超越Vim的编辑逻辑。当然你不需要用命令行的Vim,但是Vim 模式才是高效的关键。
以上。
欢迎关注泛程序员,分享量化交易、编程小知识。
这不是信仰,而是客观事实。
而且,事实上,确实就是有一代又一代的人不信这个邪,所以有一代又一代的gui开发工具被开发出来。然而,三四十年过去了,愣是没有一款GUI开发工具能在正规商用开发领域占据效率优势。
所以答案其实很简单:无数的产品经理与程序员都有过与你差不多的想法,也发明了无数个gui开发环境,但能打的一个都没有。哪怕是用来做界面的工具,升级了一套又一套,最终,主流的界面布局方式依然还是「写代码描述」。
android studio虽然提供了一个图形化的界面编辑器,但如果谁能直接用这玩意不用xml代码就写出像素级符合设计师要求的布局,我愿称之为神人。但凡你的项目有独立设计师出图并且对布局精确度有合规要求,你就必然只能去用xml文本编辑,而放弃用图形界面布局。
有的人甚至说到scratch编程。我这么断言,觉得这玩意好用的,恐怕只是没有真正用它写过一个哪怕稍微中低等复杂度程序的云开发者。
为了辅导参赛参赛选手,我曾经用scratch写过一个五子棋程序,可以说是被scratch写代码的低效率惊呆了。用正规语言非常简单就能实现的布局算法与ai,用scratch恐怕得让你手搓鼠标搓出泡。可以说是对程序员身心的极大摧残。
程序员们是如此的抵制uml,抵制画流程图,正因为这些工作往往需要用到低效的GUI制作工具。而「用写代码的方式直接画uml图画usecase图」的工具被创造出来之后,完全是重新定义了整个文档创作流程。
如果感性的认知,就到上边为止了:客观事实已经雄辩的证明了,没有人做出了效率比文本输入更高的图形化编程方式,至少目前没有。
理性认知呢?这就更简单了,gui的表达能力太有限。
主键盘区有47个可见字符,加上上档键一共是94个。一个普通码农的打字速度达到一分钟300字符(折合50~60单词wpm)非常容易,而这一分钟就制造出了天文数字的组合变化:94的300次方。
鼠标呢?鼠标可以对现有项目进行选择,在比较熟练的情况下,一眼看清楚满屏的20个选项并进行精确点选平均花1秒不过分吧?一分钟可能输入的组合变化,只有20的60次方。两者相差了无数个级别,gui编程的表达能力,很明显与文本输入存在极其巨大的差距。
以上就是大致情况,你可以不相信,正如无数前仆后继的人们一样,冲进gui编程这个坑,然后黯然退场。最终,就会意识到,gui的低效导致了它绝对不可能成为主力程序员的编程方式,顶多替代一些休闲与教育用途。
主力的编程方式一定是个文本框来写代码而不会用图形gui拖放,至于这个文本框用独立编辑器呈现还是用某个ide的内置编辑器来呈现,这是没有本质区别的。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有