Skip to content

计算机科学入门

我们之前讨论过输入输出,但都是 计算机组件 互相输入输出,比如 RAM 输出数据,或输指令进 CPU ,我们还没讲来自 人类 的输入,也没讲怎么从电脑中拿出信息,除了用 打孔纸卡

当然,有很多种 输入输出设备 让我们和计算机 交互 ,它们在人类和机器间提供了界面,如今有整个学科专门研究这个,叫 人机交互 (Human-Computer Interaction)。

早期输入方式

界面对用户体验非常重要,早期机械计算设备用 齿轮旋钮开关机械结构 来输入输出,这些就是交互界面。

image-20231022192334366

甚至早期电子计算机 比如 ColossusENIAC 也是用一大堆 机械面板线 来操作。

输入一个程序可能要 几星期 ,还没提运行时间,运行完毕后想拿出数据,一般是打印到纸上。

image-20231022192405227

打印机超有用,甚至 查尔斯·巴贝奇 都给 差分机 专门设计了一个,那可是 1820 年代!

然而,到 1950 年代,机械输入完全消失,因为出现了 打孔纸卡磁带 ,但输出仍然是打印到纸上,还有大量指示灯,在运行中提供 * 实时反馈* 。

image-20231022192525742
image-20231022192611929

那个时代的特点是 尽可能迁就机器 ,对人类好不好用是其次,打孔纸带就是个好例子,就是为了方便计算机读取,纸带是 连续 的,方便机器处理;纸孔可以方便地,用机械或光学手段识别;纸孔可以编码程序和数据。

image-20231022192640935

当然,人类不是以纸孔方式思考的,所以负担放到了程序员身上,他们要花额外时间和精力转成计算机能理解的格式,一般需要额外人员和设备帮忙。

要注意的是,基本上 1950 年前的早期计算机 "输入" 的概念很原始。是的,的确是人类负责输入程序和数据,但计算机不会 交互式 回应。程序开始运行后会一直运行,直到结束。

因为机器太贵了,不能等人类慢慢敲命令和给数据,要 同时 放入程序和数据。

键盘

这在 1950 年代晚期开始发生变化,一方面,小型计算机变得 足够便宜 ,让人类来回和计算机交互变得可以接受,交互式就是人和计算机之间来回沟通。而另一方面,大型计算机 变得更快 ,能同时支持多个程序和多个用户,这叫 多任务分时系统

但交互式操作时,计算机需要某种方法来获得用户输入,所以借用了当时已经存在的数据录入机制:键盘 (keyboards)。

当时,打字机已经存在几个世纪了,但现代打字机是 克里斯托弗·莱瑟姆·肖尔斯 在 1868 年发明的,虽然到 1874 年才完成设计和制造,但之后取得了商业成功。

肖尔斯的打字机用了 不寻常 的布局,QWERTY 。名字来自键盘左上角按键。

image-20231022192829834

为什么这么设计有很多猜测,最流行的理论是这样设计是为了把常见字母放得远一些,避免按键卡住。

这个解释虽然省事,但可能是错的,或至少不够全面。

事实上,QWERTY 把很多 常见 字母放在了一起,比如 TH 和 ER 。

image-20231022193014348

我们知道,肖尔斯和他的团队设计了很多版才进化到这个布局,总之,肖尔斯 的打字机取得了成功,所以其它公司很快开始抄他的设计。

过去一个世纪有不少新的键盘布局被发明,宣称各种好处,但人们已经熟悉了 QWERTY 布局,根本不想学新布局,这是经济学家所说的 转换成本 (switching barrier)。

所以现在都快 1 个半世纪了,我们还在用 QWERTY 键盘布局。

QWERTY 不是通用的 ,有很多变体,比如法国 AZERTY 布局,以及中欧常见的 QWERTZ 布局。

image-20231022193049118
image-20231022193104479

有趣的是,肖尔斯根本没想到打字会比手写快,手写速度大约是每分钟 20 个,打字机主要为了 易读性标准化 ,而不是速度。

然而随着打字机成为办公室标配,对快速打字的渴望越来越大,有两个重大进步,解放了打字的潜力。

1880年左右,辛辛那提速记学院,一名叫 伊丽莎白·朗利 的老师,开始推广 十指打字 (ten-finger typing)。

比一个手指打字要移动的距离短得多,所以速度更快。

几年后,弗兰克·爱德华·麦克格林,盐湖城的一位联邦法庭书记学会了 盲打 ,打字时不用看键盘。

1888年,麦格高林赢了备受关注的打字速度比赛,之后十指盲打开始流行。

专业打字员每分钟 100 字以上,比手写快多了!而且清晰又整洁!

电传打字机

虽然人类擅长用打字机,但我们没法把打字机塞到计算机面前,让它打字,计算机又没有手指。

所以早期计算机用了一种 特殊 打字机,是专门用来发电报的,叫 电传打字机 (teletype machine)。

这些打字机是强化过的,可以用电报线发送和接收文本,按一个字母,信号会通过电报线,发到另一端,另一端的电传打字机会打出来,使得两人可以长距离沟通,基本是个蒸汽朋克版聊天室。

image-20231022193256745

命令行界面

因为电传打字机有电子接口,稍作修改就能用于计算机,电传交互界面在 1960~1970 很常见,用起来很简单,输入一个命令,按回车,然后计算机会输回来,用户和计算机来回 "对话" ,这叫 命令行界面 (command line interfaces)。

它是最主要的人机交互方式,一直到 1980 年代。用电传打字机的命令行交互类似这样,用户可以输入各种命令。

我们来看几个命令,先看当前目录有什么文件,输入命令 ls ,名字来自 list 的缩写。然后计算机会列出当前目录里的 所有 文件。

image-20231022193433405

如果想看 secretStarTrekDiscoveryCast.txt 有什么,要用另一个命令显示文件内容。

Unix 用 cat 命令显示文件内容, cat 是 连接 (concatenate)的缩写,然后指定文件名,指定的方法是写在 cat 命令后面,传给命令的值叫 参数 (argument)。

image-20231022193504591

如果同一个网络里有其他人,你可以用 finger 命令找朋友,就像是个很原始的 "找朋友" App。

image-20231022193522285

屏幕

电传打字机直到 1970 年代左右都是主流交互方式,尽管屏幕最早出现在 1950 年代,但对日常使用太贵,而且分辨率低。

然而因为针对普通消费者的电视机开始量产,同时处理器与内存也在发展,到 1970 年代,屏幕代替电传打字机变得可行。

但与其为屏幕专门重新制定全新的标准,工程师直接用现有的电传打字机协议。

终端

屏幕就像无限长度的纸,除了输入和输出字,没有其它东西,协议是一样的,所以计算机分不出是纸还是屏幕,这些 "虚拟电传打字机" 或 " 玻璃电传打字机" 叫 终端 (terminals)。

image-20231022193639609

到 1971 年,美国大约有 7 万台电传打字机,以及 7 万个终端,屏幕又好又快又灵活,如果删一个错别字会立刻消失,所以到 1970 年代末,屏幕成了标配。

早期文字游戏

你也许会想,命令行界面太原始了,做不了什么有意思的事。

即便只有文字,程序员也找到了一些方法,让它变得有趣一些,早期的著名交互式文字游戏 Zork 出现于 1977 年。

早期游戏玩家需要丰富的想象力, 想像 自己身在虚构世界,比如 四周漆黑一片,附近可能有怪物会吃掉你

就像之前,我们可以用 ls 命令,看当前目录有什么,然后用 cd 命令,进入游戏文件夹, cd 的意思是 改变当前文件夹

image-20231022193729052

再用 ls 看有哪些游戏,超棒!我们有 冒险旅程 !(adventure) 。

image-20231022193741244

想运行这个程序,只需要输入它的名字,在程序自行停止或我们主动退出前它会接管命令行。

你现在看到的,是 巨大洞穴冒险 (Colossal Cave Adventure) 这款游戏的真实输出,由 Will Crowther 在 1976 年开发。

image-20231022193800135

游戏中,玩家可以输入 1 个词或 2 个词的命令,来 移动人物 ,和其他东西 交互 ,捡物品等。

image-20231022193829670

然后游戏会像旁白一样,输出你的当前位置, 告诉你能做什么动作,以及你的动作造成的结果,有些动作会导致死亡!

image-20231022193840317

原始版本只有 66 个地方可供探索,但它被广泛认为是最早的 互动式小说

游戏后来从纯文字进化成 多人游戏 简称 MUD ,或 多人地牢游戏 ,是如今 MMORPG 的前辈(大型多人在线角色扮演游戏)

命令行界面虽然简单,但十分强大,编程大部分依然是打字活,所以用命令行比较自然。

因此,即使是现在,大多数程序员工作中依然用命令行界面。

而且用命令行 访问远程计算机 是最常见的方式,比如服务器在另一个国家。

如果你用 Windows, macOS, Linux ,你的计算机有命令行界面,但你可能从来没用过,你可以在 Windows 搜索栏中输入 cmd ,或在 Mac 上搜 Terminal ,然后你可以装 Zork 玩!

用心去做高质量的编程学习内容网站,欢迎star ⭐让更多人发现!