更多技术文章,全网首发公众号 “摸鱼IT” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!
计算机速成课Crash Course - 22. 命令行界面 (qq.com)
今天继续计算机速成课Crash Course的系列讲解。
22. 命令行界面
我们之前讨论过 输入输出,但都是计算机组件互相输入输出,比如 RAM 输出数据,或输指令进 CPU。
我们还没讲 来自人类的输入,也没讲怎么从电脑中拿出信息,除了用打孔纸卡。
当然,有很多种 "输入输出设备"。让我们和计算机交互,它们在人类和机器间提供了界面,如今有整个学科专门研究这个,叫 "人机交互"。
界面对用户体验非常重要,所以是我们接下来几集的重点。
在系列开头的几集,我们提过,早期机械计算设备用齿轮,旋钮和开关等机械结构来输入输出,这些就是交互界面。
甚至早期电子计算机 比如 Colossus 和 ENIAC,也是用一大堆机械面板和线来操作,输入一个程序可能要几星期,还没提运行时间。
运行完毕后想拿出数据,一般是打印到纸上,打印机超有用。
甚至 查尔斯·巴贝奇 都给差分机专门设计了一个,那可是 1820 年代!
然而,到 1950 年代,机械输入完全消失,因为出现了打孔纸卡和磁带,但输出仍然是打印到纸上,还有大量指示灯,在运行中提供实时反馈,那个时代的特点是尽可能迁就机器,对人类好不好用是其次,打孔纸带就是个好例子,就是为了方便计算机读取。
纸带是连续的,方便机器处理,纸孔可以方便地用机械或光学手段识别,纸孔可以编码程序和数据,当然, 人类不是以纸孔方式思考的。
所以负担放到了程序员身上,他们要花额外时间和精力,转成计算机能理解的格式,一般需要额外人员和设备帮忙。
要注意的是,基本上 1950 年前的早期计算机"输入"的概念很原始,是的,的确是人类负责输入程序和数据,但计算机不会交互式回应,程序开始运行后会一直运行,直到结束。
因为机器太贵了,不能等人类慢慢敲命令和给数据,要同时放入程序和数据,这在 1950 年代晚期开始发生变化。
一方面,小型计算机变得足够便宜,让人类来回和计算机交互,变得可以接受,交互式就是人和计算机之间来回沟通。
而另一方面,大型计算机变得更快,能同时支持多个程序和多个用户,这叫"多任务"和"分时系统",但交互式操作时,计算机需要某种方法来获得用户输入。
所以借用了当时已经存在的数据录入机制:键盘。当时,打字机已经存在几个世纪了。
但现代打字机是 克里斯托弗·莱瑟姆·肖尔斯 在 1868 年发明的,虽然到 1874 年才完成设计和制造,但之后取得了商业成功,肖尔斯的打字机用了不寻常的布局 - QWERTY,名字来自键盘左上角按键。
为什么这么设计有很多猜测,最流行的理论是这样设计是为了把常见字母放得远一些,避免按键卡住,这个解释虽然省事,但可能是错的,或至少不够全面。
事实上,QWERTY 把很多常见字母放在了一起,比如 TH 和 ER,我们知道肖尔斯和他的团队设计了很多版,才进化到这个布局。
总之,肖尔斯的打字机取得了成功,所以其它公司很快开始抄他的设计,过去一个世纪有不少新的键盘布局被发明,宣称各种好处,但人们已经熟悉了 QWERTY 布局,根本不想学新布局,这是经济学家所说的 转换成本。
所以现在都快1个半世纪了,我们还在用 QWERTY 键盘布局,我应该提一下,QWERTY 不是通用的,有很多变体,比如法国 AZERTY 布局,以及中欧常见的 QWERTZ 布局。
有趣的是,肖尔斯 根本没想到打字会比手写快,手写速度大约是每分钟 20 个,打字机主要为了易读性和标准化,而不是速度。然而随着打字机成为办公室标配,对快速打字的渴望越来越大。
有两个重大进步,解放了打字的潜力,1880年左右,辛辛那提速记学院,一名叫 伊丽莎白·朗利 的老师,开始推广十指打字,比一个手指打字要移动的距离短得多,所以速度更快。
几年后,弗兰克·爱德华·麦克格林,盐湖城的一位联邦法庭书记,学会了盲打,打字时不用看键盘,1888年,麦格高林 赢了备受关注的打字速度比赛,之后"十指盲打"开始流行。
专业打字员每分钟 100 字以上,比手写快多了!而且清晰又整洁!
虽然人类擅长用打字机,但我们没法把打字机塞到计算机面前,让它打字,计算机又没有手指。
所以早期计算机用了一种特殊打字机,是专门用来发电报的,叫电传打字机。
这些打字机是强化过的,可以用电报线发送和接收文本,按一个字母,信号会通过电报线,发到另一端,另一端的电传打字机会打出来,使得两人可以长距离沟通,基本是个蒸汽朋克版聊天室。
因为电传打字机有电子接口,稍作修改就能用于计算机,电传交互界面在 1960~1970 很常见,用起来很简单,输入一个命令,按回车,然后计算机会输回来,用户和计算机来回"对话",这叫"命令行界面"。
它是最主要的人机交互方式,一直到 1980 年代,用电传打字机的命令行交互,类似这样:
用户可以输入各种命令,我们来看几个命令,先看当前目录有什么文件,输入命令 ls,名字来自 list 的缩写。
然后计算机会列出,当前目录里的所有文件,如果想看 secretStarTrekDiscoveryCast.txt 有什么,要用另一个命令显示文件内容。
unix 用 cat 命令显示文件内容,cat 是连接(concatenate)的缩写,然后指定文件名,指定的方法是写在 cat 命令后面,传给命令的值叫 参数。
如果同一个网络里有其他人,你可以用 finger 命令找朋友,就像是个很原始的"找朋友" App,电传打字机直到1970年代左右都是主流交互方式。
尽管屏幕最早出现在 1950 年代,但对日常使用太贵,而且分辨率低,然而因为针对普通消费者的电视机开始量产,同时处理器与内存也在发展,到1970年代,屏幕代替电传打字机变得可行。
但与其为屏幕专门做全新的标准,工程师直接用现有的电传打字机协议,屏幕就像无限长度的纸,除了输入和输出字,没有其它东西,协议是一样的,所以计算机分不出是纸还是屏幕,这些"虚拟电传打字机"或"玻璃电传打字机",叫 终端。
到1971年,美国大约有 7 万台电传打字机以及 7 万个终端,屏幕又好又快又灵活,如果删一个错别字会立刻消失,所以到 1970 年代末,屏幕成了标配。
你也许会想,命令行界面太原始了,做不了什么有意思的事,即便只有文字,程序员也找到了一些方法,让它变得有趣一些。
早期的著名交互式文字游戏 Zork,出现于 1977 年,早期游戏玩家需要丰富的想象力,想像自己身在虚构世界,比如"四周漆黑一片,附近可能有怪物会吃掉你",我们用命令行玩玩看。
就像之前,我们可以用 ls 命令,看当前目录有什么,然后用 cd 命令,进入游戏文件夹 cd 的意思是 "改变文件夹",再用 ls 看有哪些游戏,超棒!我们有"冒险旅程"!(adventure)
想运行这个程序,只需要输入它的名字,在程序自行停止或我们主动退出前,它会接管命令行,你现在看到的,是"巨大洞穴冒险"这款游戏的真实输出,由 Will Crowther 在 1976 年开发。
游戏中,玩家可以输入1个词或2个词的命令,来移动人物,和其他东西交互,捡物品等,然后游戏会像旁白一样,输出你的当前位置,告诉你能做什么动作,以及你的动作造成的结果,有些动作会导致死亡!
原始版本只有 66 个地方可供探索,但它被广泛认为是最早的互动式小说,游戏后来从纯文字进化成多人游戏,简称 MUD,或多人地牢游戏,是如今 MMORPG 的前辈(大型多人在线角色扮演游戏)。
命令行界面虽然简单,但十分强大,编程大部分依然是打字活,所以用命令行比较自然。因此,即使是现在大多数程序员工作中依然用命令行界面,而且用命令行访问远程计算机是最常见的方式,比如服务器在另一个国家。
如果你用 Windows, macOS, Linux,你的计算机有命令行界面,但你可能从来没用过,你可以在 Windows 搜索栏中输入 cmd,或在 Mac 上搜 Terminal,然后你可以装 Zork 玩!
现在你知道了,早期计算机的发展是如何影响到现在的,想想要是手机没有 QWERTY 键盘,在 Instagram 给图片配标题可就麻烦了。
但我们还有一个重要话题没讲,美妙的图形界面!这是下节课的主题。
以上内容就是?22. 命令行界面?的内容,感兴趣的同学记得点赞、关注、转发、收藏哦!
我会不定期发布课程的讲解!
更多技术文章,全网首发公众号 “摸鱼IT” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!