尽管如此,我在我所有的计算机上——办公室一台windows、家里一台windows、一台linux、一台mac上——都安装了一套shell工具,办公室用的是cygwin,家里的windows只安了gnuwin32我需要的工具,而linux和mac就更简单了,可以不用自己上网去下载。从个人来说,shell工具还是我离开不了的拐杖。
下面的朋友说,还在用CLI而不用ide的是怀旧,过去写程序多的时候ide还没有现在这么好用,所以后来ide好用了,却懒得学习新东西,有点这个原因。确实,我刚接触计算机的时候连GUI这种东西都见不到呢,当时写程序是在DEC VAX 780的终端前面,对着黑色屏幕上闪烁的绿色字符发呆,而那段岁月是我个人最好的岁月,没错,确实是有些怀旧。还有朋友说,用cli是写东西时候比用键盘+鼠标更方便,双手可以不离开键盘,也有点这个原因。举个例子,用vi编辑东西的时候,用hjkl移动光标比手指离开字母区去按方向键省力很多,没错,对于懒人来说,这确实是个不错的设计呢。但GUI下也有很多便利之处啊,而且单纯的怀旧也不足以让一个实用主义至上的工程师抱残守缺,对新东西的好处视而不见。所以,这些原因都对,但不足以解释为什么很多人和我一样还喜欢使用CLI。
过去我也曾经想过这个问题,我不知道别人怎么样,但对我来说,CLI对我仍有很高价值的根本原因在于CLI更符合人类工作时的习惯。等等,有朋友会说,现实世界是丰富多彩的,而GUI比CLI更接近于真实世界的情况,怎么能说CLI更适合于人呢?这个我不否认,GUI是计算机科学和工程的一个伟大进步,所以我最常用的接口也是GUI。但是。。。(用葛优在某部王朔电影里面的对白:你就别说“但是”前面的东西了,直接说吧),想想看,如果你不是在网上浏览新闻或者是有一搭没一搭的看电影,而是在写一篇文档、写一段代码时,精力高度集中的时候,你的眼睛在“看”什么?发生什么事情的时候你会感觉“分神”了?为了详细的解释这个,可以来看看在写一段代码的时候我们通常的思维活动和行为,假设我们已经想好了这段代码要怎么写,(1)首先把它敲到计算机里去,(2)接下来运行一下编译/或者解释器,(3)如果通过,我们看看结果是不是我们想象的那样,(4)如果没通过或者结果错误,我们会看警告和出错信息,然后回头去看源代码。
仔细观察一下,我们的注意力移动其实是一个线性的过程,首先注意力集中在“看”着敲出的代码是不是自己脑子里所想的。然后我们的注意力移动到运行编译/解释器上的操作。接下来,我们会“看”结果,根据结果不同会返回到源代码或者报错信息。在这个过程里面,我们倾向于按照次序一次只做一件事情,这在人机工程学里面有个专门的名词叫做“心流(flow)”,大意是指我们的注意力流动方向。人类的心流是在长期进化中形成的,符合我们心流的模式的东西会让我们感到舒服自然,不符合的会让我们迷惑或者恼火。
OK,到这里我想你大致明白我的意思了,CLI界面将整个计算机屏幕作为一个工作窗口,强迫我们把注意力集中在当前的东西上,“先把代码写好”“然后不用管代码的事情,去运行编译器”“这个有错误,应该回头重新看源代码文件了”,每次只做/只能做一件事,一方面增加了我们对自己工作流程记忆的负担(但这个属于比较容易记住的东西),另一方面,在流程中的任何一个环节,都不太容易分神去想前面或者后者后面的工作步骤(因为没有能够让你分神的东西)。
除此之外,在使用CLI时,我们的眼睛基本上都在“看”屏幕光标的位置,正常的光标移动是连续的上下左右、一个一个字符位置的移动,这样我们的眼睛只要“跟着”光标,就知道自己在“那里”。另外,虽然光标虽然可以跳行,但跳行的时候,我们通常已经“想好了”让它跳“几行”,也就是我们已经做好了准备“看”那里了。在这方面GUI有时候未见的要优于CLI。比如一个经典的IDE窗口布局是上方是菜单条、窗口左边是代码树结构、中间是代码编辑窗口,下方是编译信息提示窗口。注意我们的视线移动,首先我们在中间左侧“看”代码树,然后移动到中间右边,看代码,然后跳到上面去运行编译工具,接下来跳到下面看出错信息。视线移动的距离比较大而且有跳跃性,这样就会让人感觉容易疲劳,而且更重要的是,因为屏幕上显示了更多的内容,我们的注意力就更容易被分散。
说这些并不意味着我是CLI或者VI的死忠,而是说多种工具都可以解决问题,但一些工具会让你用起来很舒服,另外一些就不是那么舒服。对于某些情况,一些土得掉渣的工具可能会让你更容易得心应手。为了表示我不算是gnu工具链和CLI的死忠,在这里顺便赞扬一下好像是VB最早出现的、现在很多ide都有的功能,就是函数提示,在你引用一个函数的时候,在你编辑的位置为你提供函数的正确写法和参数提示。这是一个特别优秀的设计,只是我不能肯定是不是MS最早发明的
