因为对专业人员来说,命令行的确比图形界面强大,方便——就好像专业人员喜欢使用术语而不是拿大白话展开让每个人都“懂”一样。 当然,强行“拽”术语甚至误用错用术语搞后现代文本风,那就是另一回事了:这种行为值得鄙视;但必须注意,该鄙视的是拿术语装X的行为;甚至,和普通人说话时,该说人话他们不说人话你也可以鄙视;但对于想成为内行、需要和同行高效交流的人,提倡术语才是明智之举。 鼠标是一种更偏模拟量的输入设备,它在输入模糊性的“大概这里”“大概那里”之类信息时非常高效——因为人的思维本身就有一定的模糊性,转换成语言文字甚至具体的纵横坐标等精确指令,反而带来很大的思维负担。 因此,在画图/修图等软件里,鼠标往往比键盘更好用。因为我们真正需要修的可能是画面中模特的“鼻翼两侧”,用键盘就要转换成明确的(81,97)开始的一块不规则区域——可以做到,但为什么不可以是(82,101)呢? 甚至,我该怎么知道模特鼻翼左上角坐标是(81,97)都是个难以解决的问题。这时,不需要动脑子直接可以指上去的鼠标,显然要优越得多。 以上,就是“只能用大白话拽术语纯属装X”的场景。 计算机本质上是个数学机器。精准的使用术语是一个门槛较高的工作。 此时,就好像输入法的联想功能一样,设计一个“上下文菜单”,帮用户选择合适的命令,自然就能大幅提高他们的输入效率、降低记忆负担。 这种情况下,图形界面也是优于命令行的。 但,只要稍进一步,情况就悄悄发生了变化…… 和输入法的联想功能一样,如果你需要输入的东西稍微生僻、它就是“联想”不起来呢? 做计算机命令方面的联想,比输入法还要难得多。毕竟后者有海量语料库(但作为专业输入者,你还是需要掌握生僻字的输入方法,不能依赖联想)。但在某个界面上(比如AutoCAD),可行的上下文甚至可能有无限多种。 除非在某个极为狭隘的领域做一些单调重复的简单工作,否则,只依靠程序员拍脑袋给你拍出来的“上下文菜单”,是不可能顺畅完成日常工作的。 你需要做的工作越复杂,“智能联想”能提供的帮助就越少。 同时,为了提高“智能联想”的命中率,我们写程序时,往往不得不尽量减少用户的可调参数——比如,为了照顾普通用户,我们不敢说去除噪点(参数xx半径yy强度zz)、色彩增强(RGBα颜色通道上的各种操作以及另外一大堆参数)等等等等,而是把所有这些放到一起、搞出十几个固定风格让用户选,还告诉用户说这种高科技叫“一键美颜”,结果输出五毛钱特效……你要开照相馆靠这个能应付挑剔的专业顾客? 此时,智能联想不光无法提供帮助,反而成了专业用户的阻碍——想想如果要你用美图秀秀做商业海报,你会不会骂娘呢?你会不会想念PS那吓死普通人的专业菜单? 显然,一旦面对的问题复杂到一定程度——既然你已经是数学家/科学家/计算机专家了,为什么不直接用精确无歧义的术语呢? 把术语都日常化,的确便于科普;但到了学术交流阶段,不说“扭矩是xx牛顿·米”而说“大概像你手掌上放xx本书时手肘受到的力”,不仅是浪费与会专家的时间,实际上也不可能说清楚你真正想表达的“效率-扭矩曲线”这种高端玩意儿了。 计算机领域也一样。 以上是受 @pansz 朋友的启发,这才能够说的一步到位。 pansz:为什么总有人极力推荐使用命令行操作而非图形界面? 以下是原帖内容。因为当时没整理好思路,因此说的比较凌乱。不看也罢。 举例来说,我有个硬盘坏了,读取速率经常掉到2m以下,还频频出错。里面有500个G的资料要抢救。拷完得差不多一两天,还得人坐旁边看着,错了停了就重拷,再拷贝时要跳过重复文件(现在还好,win10有跳过文件功能),不然很可能拷到同样位置又出错了。 如果你用图形界面,那么你就需要找一个精确吻合你需要的软件,然后一点……点这下当然很容易,可找软件能累死你,因为这种需求太小众了。小众软件太难找甚至压根没有,就是找到也经常要掏钱买,不过相比搜索难度就不算什么了。 但如果你命令行玩的很熟练,那么很容易就可以组合几个常用命令,轻松完成任务――甚至还可以带断点续传功能、拷完可自动关机。 换句话说,命令行模式的确需要你记忆更多命令、孰知一些通用约定;但这些东西可以作为基础,搭建出任意复杂的功能来。 当然了,这也导致它的入门门槛略高,对非专业用户来说得不偿失;即便专业用户,当针对该领域的软件已经较为完善时,不去用现成的图形界面工具就是舍近求远了。 甚至,组合这类命令本身,往往就要求你有一定的编程基础,对非程序员来说那是加倍的不合算。 当然,如果你已经是程序员,那么学会使用命令行(脚本),起码可以在遇到类似问题时,解放你一两天的时间。 刚才手机答的,现在稍微展开点说一下。 这里有一个图形编程工具,是MIT为儿童学习编程设计的:Scratch - Imagine, Program, Share 你猜为什么它就是比不过python、java、C++呢? 各行各业,做事都免不了要用工具;但工具和工具并不一样。 举例来说吧,你在家做饭,完全可以用这个: 但如果你要开个店卖面条,还用上面那个说明你傻。这玩意儿才值得拥有: 图片来自网络,侵删 但如果你说我要造面条机……那么你该买的是这个: 很容易发现,越是面向最终消费者的工具,功能就越是单一,操作也越是简便——量面,倒水,一键出面条。弄伤自己?嗯……举起来砸自己脑袋算吗? 越是面向专业人员的工具,功能就越是复杂,操作界面也多了很多按钮/仪表;如果不注意操作规程,就容易不小心弄伤自己。 但是,在付出这些代价的同时,你也得到了极高的生产力、可以做的面条厚薄、宽度的可调范围也大幅增加。 最后,给专业人员制造工具的工具,其复杂度更为“恐怖”,工伤成了家常便饭: 【活着】工伤档案_腾讯新闻_腾讯网 东莞每年因冲床工伤着达数万人 - 上海二锻冲床有限公司 我们再换一个角度。 面条机虽然最终功能单一,但它有机的组合了许多功能,从搅拌和面到面条挤出,一条龙服务…… 等等,你说,它也有电机啊,拿来拧个螺丝行不行? 不好意思。它可拧不了螺丝。拧螺丝你得找这个: 你说,还不对啊,这玩意儿能拧任何螺丝、也可以配合各种型号的钻头……面条机能做粉条吗?不都是条状可以吃的东西嘛? 你看,刀锯斧刨锤,这几样凑一块足够做任何木工活了。面条机…… 没错,这里还有一个维度:工具的泛用性。 这玩意儿好用不: 好用?我这有个旋翼机,你用它能做飞控吗? 显然不行。做飞控你得找它(以及其它类似的东西): 没错,没那个现成的计算器好用,前者开箱即用,算账全靠它;后者……对不懂计算机的你来说,它和一块砖头没多大区别——还不如砖头好用呢,起码垫脚啦拍人啦拿来就用。这树莓派啊,吃不能吃喝不能喝梳头发都别别扭扭不好用…… 但是树莓派有无限可能。 对工具使用者来说,他总是有两个选择方向:方向一是只能做一样的专用工具,方向二则是泛用型的基本工具。 专用工具单件学习成本低,使用方便;泛用工具学习成本高,使用不便,甚至常常伴随着危险。 作为生产厂家,你可能会买椅子生产线;但作为一个高级木匠,你肯定选择带锯机、木工机床。因为只有后者才允许你发挥自己全部的专业才能——生产线?我造生产线。 作为木匠,借助木工机床,他是万能的;买条生产线他就只能像没有技术的农民工一样接收半月培训坐生产线旁边当螺丝钉,然后只造同一个型号的椅子(的一个零件的一个面、一个孔)。 换句话说,对专业玩家,学习使用更接近根本、泛用型更强的工具,效率反而是更高的。 就好像我们程序员,说白了只会顺序分支循环三种控制结构和与或非三种逻辑——然后借助某种编程语言几十个关键字/运算符表达出来——经过四年学习,便可宣布计算机领域我全能。 反之,你要只会玩war3地图编辑器,这个图形界面可强大了——给你八年时间,你能用它清理磁盘吗? 欲速则不达。 单件学习效率高的工具,在面对一整个大领域的问题时,往往反而是更难学难用的。 因为做100种家具你就不得不学习使用一百条生产线,每条生产线又有100个位置……你得掌握一万个知识点才可能做出100种不同家具。 再多一种家具?从头学吧。 但如果你学锯刨钻斧,学木工机床,只需掌握至多几十个知识点,你就是万能的。 没错。这里就是图形界面和字符界面设计着重点上的根本不同了。 图形界面就像计算器,你需要什么功能,它就给你什么功能;无论供电、显示甚至长时间不用自动关机节约电量等等,都用不着你操心。 Do not make me think——这是图形界面设计者对它的用户特征的总结。 当然,一旦认为用户需要“Do not make me think”,那么结果必然要走向“禁止用户思考”——除了按钮,你什么都不要知道。让你知道了就说明我“封装”没做好,又劳驾您动脑子了。 久而久之,哪怕你清清楚楚知道后台的一切,你也没办法控制它了——就好像win10饱受诟病的强制更新等机制一样:我笔记本网卡很奇葩,win10驱动下它就是上不了网,只有win7驱动可用;但为了使用win7驱动,我不得不和它那恶心人的“傻瓜机制”斗智斗勇一整天!因为从调查排错到替换驱动,它时时处处拿我这专业人员当傻逼,时时处处给我制造麻烦。最后,强制关闭完整性检查、建立win10版驱动同名目录并给这个目录设置极高访问权,这才阻止了win10做蠢事,使得它不再强制把正常的win7换成错误的win10驱动。 如果你确信自己不需要了解背后的原理,确信自己永不必处理软件作者没有想到的奇葩状况,那么傻瓜式的图形界面显然最为适合你。 而字符界面类似树莓派。它不仅给你现成的功能,还给你完成任何功能所必需的基础——你可以把任何现成的功能当成基础组件,用来搭建更酷更炫的东西。 最最极端的例子就是图灵机,或者各种编程语言——没错,这些玩意儿功能简单,简单到了丑陋的地步。以至于仨数字排个序都需要自己写程序才能搞定。 事实上,最最“简单”的机器语言,你得自己做二进制转换;汇编语言可以帮你把“助记符”转换到二进制;C/Java等高级语言可以让你用if/for/class等更为高级的概念直接编程;而更“高级”的脚本语言……你只需像胶水一样把它提供的半成品往一块一粘就好——要什么你就能“粘”出什么。 而命令行的设计思想,就是“搞一种比脚本更高、但比计算器更低的东西”——不,它实际上是把计算器本身都当成一种组件、一个工具,从而允许你自由组合它们。 比如,我可以这样: call 自动打蛋器 //打出鸡蛋液 call 自动面条机 //加入鸡蛋液做成鸡蛋面 call 电磁炉 //煮面 call iPhone //喊你家的小懒虫起来吃饭 添加细节,调试通过,存成“一键做鸡蛋面.sh”,然后在桌面建立个快捷方式——该吃饭了鼠标一点,一会儿电话打过来你就可以去吃面条了。 如何?酷吧? N年前,我有张光盘划伤了,数据怎么都读不出来。有个文件时多时少,总是读若干字节就出错。用了当时流行的很多数据恢复软件都读不出来。 再来个例子。 当然了,我们都知道,面条机是不可能这样组合的。 很简单,并没有一个标准的、为了得到这种自动化而做出的输入输出约定。 因此,哪怕你集齐了打蛋器、面条机、电磁炉、iPhone,你还是召唤不出神龙……哦不,服务不好你家的小懒虫。 图形界面有着同样的窘境:你可以一键做面条、一键煮面;但你必须自己把面粉+水倒入面条机,然后自己把面条放进电磁炉…… 这就是我在评论区提到的:你可以勉强用按键精灵去组合图形界面程序,但是你必须考虑界面卡死等等可能。浪费更多机器时间,功能还不稳定。 因为它们压根就没考虑过“程序之间的接口问题”。 而如果你玩的稍微深一些,就知道Windows下的rar、7z等压缩软件,都同时给你安装了个非GUI版本,允许你在命令行通过参数使用它们——允许你把它组合进你的处理流程,这本身就是个极为重要的功能(事实上,很多GUI软件都能接收命令行参数。越是偏工具性的软件就越是不敢忽视这点)。 而命令行(特指bash等真正有管道、作业控制等支持的命令行,并不是Windows上那个李莲英……哦不,cmd)从一开始,就考虑了这个协作问题。 学过C语言的,大概都知道main函数有一个返回值,这个值就是给命令行用的(其它编程语言都有类似支持)——0表示成功执行,非零是各种错误码(不同的返回码代表什么也有统一的标准)。 *nix的shell不仅能捕获这个返回值,它甚至还允许你捕获、分析其它软件在标准输出/标准错误上的输出内容,从而达到更深层次的配合。 尤其php、python之类脚本语言,它甚至允许你轻易的把“通过命令行调用其它程序”集成进你的代码(其实C也很容易做到这些,它们甚至有专门的库提供支持)——你完全不必操作字符串、也不必自己写代码完成http下载,丢给grep/wget即可:它们那么强大,你再自己一点点敲一遍,不累吗? 现在,当你买了面条机,你就可以轻易把它们组合起来,从“一键做面条”衍生出“一键做西红柿打卤面”、“一键做酸菜肉丝面”等无穷无尽的功能。 换句话说,命令行牺牲了工具的易用性,提高了入门门槛,以保证其泛用性;而图形界面通过牺牲泛用性,突出了其入门门槛低、易用程度高的优点。 当然,理想很丰满,现实很骨感。 命令行的确给“脑子里充满奇思妙想又喜欢捣鼓”的人带来了极大方便;但它本身却因此显得有些复杂了,入门门槛较高。这就使得它成了“专业人员”的玩物,缺乏计算机基础的普通用户只得敬而远之。 很多时候,你必须先是一名程序员,才可能解放命令行的威能;但更多时候,哪怕你就是一名程序员——我只是想做碗面条啊,为什么一定要我先看完这一千多页的鬼手册? 人,总是喜欢偷懒的。 这时候,“点开即用”的图形界面就显得更强大、更方便了。 ——我只需要把代码编译成APP,然后挂出去卖就行了;具体的编译步骤、参数什么的,随便选一个不好吗? ——什么破光盘要组合这个组合那个,真有那需求我敲段C/Java代码不就搞定了? ——更多更诡异的需求?买买买!都不掏钱买写程序的不得饿死? 你看,也有道理,对吧。 你呢,你会如何选择? 总之,不同人有不同的需求。单独的一个个图形界面程序足以解决80%以上的问题,而且还不断有新的程序被写出来,覆盖更多的“痛点”。 也许,命令行所致力于解决的那额外20%的问题并不是你的需求;或者你可以忍受一定的不完美、或者你可以等更完美的成品上市。 不过,总有人,总有公司,总有一些业务场景,会遇到“不得不解决20%问题”的时候。 如果你善于组合,那么很可能就能花一两天时间(也可能更长或更短)解决问题;否则,或许你就不得不花十倍百倍的时间从头写出那些基础功能、然后再组合出解决方案——再或者,你也可以提出需求,让软件公司给你定制软件:这个世界上,绝大多数的软件都是组合他人现成的库/程序完成的,不怕多这一个。 这也是为什么office为什么要支持VBA以及微软为何要从OLE到COM到COM+无限次推倒重来……从而把一些“可怕的细节”通过“可怕的编程语言”暴露给无助的非程序员们的根本原因——哪怕因此而导致宏病毒泛滥。 并且,现在Windows也搞power shell了。 没有免费的午餐。 要么牺牲易用性来保证泛用性,要么牺牲泛用性来保证易用性——有些困难是本质上的。钱再多,你也不可能两者兼顾。 如果你只需要解决“敲键盘时坐的舒服”的问题,那么千万别理什么椅子生产线什么制造生产线的工具,挑一把让自己感觉最舒服的椅子就行了。 反之,如果你打算自己开家木器厂和别人竞争……你猜如果你这辈子都没见过椅子是怎么生产出来的,几个“小目标”够你赔? 但是,又一个转折,你个做木器厂的,研究汽车发动机干嘛? 当然,这里讨论的是“合理利用手头一切资源”的问题。 也有人觉得敲命令便于装B,另一些人则选择怼这些装X犯。这就是另一回事了。 RECOMMEND - 点个在看你最好看 - |
|