做这一切都是为了我们自己,从某种意义上来说,我们就是自大的独裁者。
——肯•汤姆逊
从Multics项目退出以后,肯·汤姆逊和丹尼斯·里奇试图在贝尔实验室内部重启分时操作系统的想法,又被管理层否决。
汤姆逊在Multics项目组的时候,开发了一款叫做“太空旅行”的电脑游戏。这款游戏大受欢迎,为了玩到这款游戏,贝尔实验室不得不付出每小时几百美金的代价,因为当时计算机的时间太昂贵了,而这些出色的研究人员又如此沉迷这个游戏。
在否决了里奇和汤姆逊购买一台新机器的申请以后,他们两个找到了一台已经淘汰的PDP7电脑。这款电脑各方面都已经落后了,但是,其显示器还算比较优秀,用来玩游戏刚好。于是,这两人重写了太空旅行这款游戏的代码,把这台PDP7当成了一台专门玩游戏的机器。
这也算是个两全齐美的方法,一方面,贝尔实验室终于不用担心研究人员用昂贵的GE635大型机用来玩游戏了。另一方面,里奇和汤姆逊也可以借此机会和其它人员深入的讨论分时操作系统。
很长的一段时间,这台梦想中的分时操作系统的文件系统只出现在贝尔实验室的黑板上,被里奇称为“粉笔”文件系统。这个操作系统,长期以来,只能在纸上运行,在里奇和汤姆逊的脑子里运行。里奇和汤姆逊讨论的结果,就是他们把这个操作系统简单的分成了四部分,分别是:操作系统核心,外壳,编辑器以及汇编程序。
做项目总是要师出有名的,国内外都是如此。于是,这哥俩以创建下一代文本编辑器的课题,申请了一个项目,当时贝尔实验室非常的开放,科研人员可以尽情的发挥。里奇和汤姆逊也不算撒谎,只是他们申请的这个文本编辑器项目,需要先做一个操作系统出来。
恰好,在1969年夏天,汤姆逊的妻子邦尼要带着他们年幼的孩子回老家,一个月之后才回来。在离开的一个月里,汤姆逊给自己计划每周解决一个问题,四周过去了,他和里奇规划的操作系统,被实现了出来。四部分,四周,分别是操作系统核心,外壳,编辑器以及汇编程序。
这个简陋的操作系统是分时共享操作系统的简化版,事后,他们接受采访说:很多人误以为Unix是Multics的对立面,其实,这两个操作系统之间有深厚的文化渊源。
由于这台操作系统是在简陋的PDP7上实现的,而PDP7的硬件性能又非常的落后,因此,Unix第一就要保持非常的紧凑,非常的简单,任何多余的功能都会让PDP7这台老旧的机器无法运转。
汤姆逊多年后回忆说:Unix不是最终目标,只是一个副产品,为了我们做其它的项目而造出来的副产品。多年以后,再来看这句话,也许Unix当初真的是为了运行一个文本编辑器而造出来的操作系统。
Unix没有任何商业计划,他不为了满足客户需求,所做的一切都是里奇和汤姆逊的个人爱好。有好的想法就添加进去试试,任何大修大改都不需要提出申请,也不需要看客户的脸色。在没有行政压力,没有市场压力,甚至没有任何目标的情况下,Unix这颗小树苗,飞速的进化着。
当然他还非常简陋,只能运行在PDP7上,甚至,他还没有自己的名字。当时,和丹尼斯·里奇,肯·汤姆逊一同参加Multics项目的还有一个叫布莱恩·科尼汉的人。他创造了Unix这个词。一方面是用来戏虐Multics,另一方面是用来戏虐这个只能让一个人使用的操作系统——Unix。Multics是很多的意思, Unix则则只是一个的意思。谁又能想到,日后,这个叫Unix,原意为只能一个人使用的操作系统,将几乎会被每个人使用。
在1972年,Unix迎来了一个全新的概念。这个概念,让Unix大放异彩。汤姆逊和里奇为了这个概念,花费了三个晚上。对Unix进行了自出生以来,最大的一次修补。这个概念,就是如今在Unix上已经习以为常的——管道——的概念。汤姆逊后来回忆这件事儿的时候说:那是我一生最棒的三个晚上。
管道的概念并非汤姆逊和里奇的突发奇想,而是贝尔实验室的管理者道格·麦克罗伊提出的概念。他提出,数据应该像水流一样,在不同的软件中流动。作为汤姆逊的老板,道格·麦克罗伊不停的给汤姆逊讲他的思路,但是汤姆逊一直不以为然,后来他说:我觉得他的想法不切实际,我从一开始就认为他是错的。
作为老板的好处之一就是:可以不断的催促下属实现他的想法。作为下属的汤姆逊也没办法。在老板的不停催促下,汤姆逊简化了老板提出的模型。一个程序的输出就是另一个程序的输入,这就是管道的概念。汤姆逊由原来反对老板的思路,变成了支持老板的思路,对此,汤姆逊的解释是:一夜之间,也不知道怎么回事儿,我想到了一个好办法。
他的老板得知汤姆逊已经将他的思想加入到了Unix中,而且仅用了三个晚上就实现了他好几年一直以来的设想,对此,他高度评价了汤姆逊,说他:有洞悉项目全局的神奇能力。如果换成其他程序员,至少得分配几周的时间来实现这个功能。
接下来,我要开始讲我的感想了。关于Unix引入管道的感想。当Unix引入管道以后,Unix系统就一下子蜕变成了一个工具箱。只要使用管道,你可以借助其他的程序与你的程序相交互,这是另外的一种新的软件哲学。
Windows用户遵从的则是另外一种软件哲学,windows的软件都是将所有相关的功能,集合在一起,比如微软的office,office很难和其它的软件交互,office提供的功能就是这么多,比如说是100的话,你用的再厉害,也只能用到100的功能,可能普通人就用个2-3成的功能。
但是Unix这里是另外的一个软件哲学。Unix里面的软件只做好一个功能,但是这些软件通过管道组合起来,就会形成千百种你未曾预料到的使用方法。Unix操作系统本身就是一个工具箱,里面有各种各样的小工具。将这些小工具组合起来,就形成了一个强大的瑞士军刀。
但是,我们普通的用户,都会觉得Unix更难用,这是为什么呢?我尝试解释一下,大家看看我说的有没有道理。
不知道有人学过Photoshop和AutoCAD,或者Maya这种软件么?是不是很难?我相信大部分人都觉得很难。首先菜单很多,其次,不知道菜单里都有啥用法,对着书,也只能学个皮毛。
为什么呢?因为学Photoshop, 学AutoCAD, 学Maya软件,实际上不是学习软件本身,而是学习软件背后的领域知识。比如学习Photoshop,实质上就是学习你对照片的审美,如果你本身对美的感觉就不怎么样,处理出来的图片肯定不好看,技术再好也不好看。
比如建筑行业需要AutoCAD来画图,如果本身不是学建筑的,只学习AutoCAD,没啥用处,因为你对建筑本身不了解,能建出好模型来么?用AutoCAD的高手,给他一张纸,一支笔,一把尺子,他也能画出一个好模型。使用AutoCAD只是换了一种工具而已,所以,即使他连电脑开机都不会,如果他本身就是个优秀的建筑师,学起AutoCAD来,肯定比一个程序员快的多。因为更重要的是AutoCAD背后所涉及的领域知识。
再回来对普通用户来说,Unix为啥难呢?一样的道理,普通用户本来就用不上Unix,就和普通用户用不上AutoCAD一样。普通用户本来就想上个网,聊个天,看个新闻。Unix解决的目标是什么?他要解决的是Google背后的数据库,银行里的结账系统,豆瓣网用户存储所有用户发的帖子。这种问题当然不简单,Unix就是为了解决这种问题而来的,你让他看个电影,玩个游戏,就是用错工具了么!
就好像,windows里自带了一个画图板,非常简单,而且还容易使用。为什么专业一点的公司,都会去买一套Photoshop来处理图片呢?又难学,又不简单!难道是自找苦吃么?
当然不是了,术业有专攻,如果我们觉得很难,可能我们解决的问题不对,或者,这个工具设计出来,压根就不是为了解决我们说的那个问题。
因为我在Bilibili网站上录了一些教编程的视频,刚开始的时候,主要是教iOS编程,后来经反馈,说iOS太难了,其实,我讲的iOS那些,也是最简单的。然后我又挖了一个坑,教Python编程。这个编程难不难,也和Unix难不难一个道理,看你要解决的是什么问题。如果只是解决打印出一行Hello World来,都不难。如果是解决几十万人信息实时同步的问题,这个,哪个编程语言都是大难题!
我的感想说完了,这一期的时间也差不多到了,到目前为止,Unix仍然是实用汇编语言写的,下一期,将会介绍C语言,这个影响千万人的编程语言,至今仍然排名第一的编程语言,就要出生了。
C语言值得用很多的篇幅来大书特书。下一期,开始讲C语言的故事。
欢迎关注微信公众号:软件那些事儿 或者网易云音乐搜索软件那些事儿(语音版)B站上也可以搜索软件那些事儿