欢迎和我们一起穿越时间长河探索计算机软件改变世界的璀璨时刻冯诺依曼与第一台计算机 1945 年 IBM 的主机时代
1970 年代 We in the IBM company face the same challenge as you doThe development of real-time information systemson a corporate wide basis for the 1970s 桌面软件时代的微软 1990 年代 Windows 95 is so easyEven a talk show host can figure it out
互联网时代的谷歌 2000 年 iPhone 时刻 2007 年
阿里巴巴引领电子商务 2014 年 Chad GPT 2023 年
欢迎收听原创史诗故事广播节目超越代码软件史上的璀璨时刻第十九集数字排版软件的先驱高德纳与他的 Tex
刚才大家听到的音频是来自于 2017 年上映的电影《华盛顿邮报》这是一部由史蒂文·斯皮尔伯格指导梅利尔·斯特里普与汤姆·汉克斯主演的剧情片刚才那段剧情展示了 1960 年代报纸排版印刷的场景轰鸣的机器声一排排的字母模具拼装组合后再印刷成当时的报纸
在 1970 年代以前所有的报社和出版社还在使用一种叫做热金属的排版机也就是莱诺注牌机 Linode Ip 这种机器发明于 1884 年它利用键盘组合的方式来铸造文字一次铸造一整行主要是为当时报纸、杂志和海报的内容排版所使用
LenoType 的操作员需要在具有 90 个字母的键盘上输入文字机器将这些字母模具组装在一条直线上再通过热金属排版工艺将组装好的这行字母在熔融中铸造成单键与手动排版的方法相比它可以更快速地对内容进行排版在同一时期还有一种技术叫做蒙纳柱排机 MonoType 它与 LenoType 的整行输出不同
monotype 是按照单个字母来进行铸造的然后再通过手动或机械的方式将这些文字组合成整行文字 monotype 适合于要求质量高需频繁修改的那种排版工作例如学术出版物和小型印刷品等人类的发展得益于知识的传播而知识的传播又有赖于书籍和文字书籍和文字的形成就必须依赖于不断发展的文字排版和印刷技术
早在公元前三世纪中国就已经开始使用木刻印刷术了这种印刷方法是将文字和图像雕刻在木板上然后在木板上涂上油墨再压印在纸张或布料上到了公元 1040 年北宋的毕生采用粘土制成的活字进行排版发明了活字印刷术虽然这一技术在当时并未广泛应用但也为后来整个世界的排版印刷发展奠定了基础
直到 15 世纪中期德国的发明家和工匠约翰内斯·古腾堡发明了基于金属的活字印刷术他使用可移动的金属活字进行排版并开发了新的油墨配方和印刷机这种技术也被称为古腾堡印刷术古腾堡印刷术迅速传遍整个欧洲印刷速度大幅提高书籍、报纸和其他印刷品开始大量生产和传播成本也随之降低
这也是推动欧洲文艺复兴和宗教改革的主要原因后来伴随着工业革命的兴起蒸汽动力又再一次提高了印刷机的速度和效率这才发展到我们在节目最初提到的热金属排版时代但是随着计算机的出现
这种热金属排版技术虽然还能勉强应付简单文字和图像类的出版物但对于数学或其他一些自然科学也就是那些含有复杂的公式和格式要求的专业出版物来说这种技术就显得捉襟见肘了一种全新的更加精细化的基于计算机的数字排版软件技术急需出现
今天故事的主人公就是一位美国计算机科学家和数学家曾经在加州理工普林斯顿和斯坦福大学都做过教授的唐纳德克努特
唐纳德·克努特 1938 年出生在美国的威斯康星州的米尔沃基那里是一个人才辈出的地方我们在第六集节目中谈到的人工智能之父诺贝尔奖获得者赫伯特·西蒙也出生在那里唐纳德·克努特一生的计算机著作很多在早期的中文艺作中他的名字总是被翻译为高德纳据说高德纳这个中文艺名来自于姚楚峰教授
姚楚峰教授是香港成大计算机科学系主任也是华裔图灵奖得主姚七智的夫人把高作为姓氏是因为克努特他本人个头高大而且福音字母几何 K 的读音接近德纳则与他的名字唐纳德·达纳相近所以在今天的节目中我们就统一称他为高德纳高德纳的父亲是一个多才多艺的人有研究生学历
当过小学和中学教师星期天在教堂演奏风琴还在自家地下室办了一个小硬刷厂受到父亲的影响高德纳从小就喜欢学习和音乐并表现出了与众不同的才能我们要做一件事
当地的齐格勒糖果厂为了促销一种棒棒糖在他的学校中搞了一场比赛看看谁能用齐格勒巨型酒吧及 Zigger S-Gen8 中的字母排列组合出最多的单词高德纳假装胃疼
在家里待了两个星期利用一部大词典得出了 4500 个单词比裁判掌握的 2000 个单词还多出一倍多他所在的班也夺得了那场比赛的冠军赢得了一台电视机每人一块棒棒糖高德纳本人则赢得了一副雪橇 18 岁时高德纳以各科平均 97.5 的创纪录高分从高中毕业
进入了俄亥俄州克里夫兰的凯斯理工学院也就是现在的凯斯西楚大学攻读物理同年他就创作了一篇出色的科学幻想小说《普茨比度量衡体系》并在美国著名的《疯狂》杂志上发表于是高德纳得到了他人生中的第一笔稿费 25 美元他也同时获得了西乌科学天才的提名奖在大学一年级结束后的暑假中
高德纳在学校打工负责把统计数据画成图表碰巧他工作室的隔壁就是计算机机房学校刚刚新到了一台 IBM650 计算机当时的计算机体积庞大拥有复杂的输入和调试控制台上面排列着一大堆的开关和指示灯在计算机工作时这些指示灯快速闪烁变化出不同的图案这引起了高德纳极大的好奇与兴趣
于是他接连好几天彻夜不眠地待在机房里观察这台大机器是如何工作的努力钻研着他的使用手册当他读完这台计算机的操作手册后他决定为这台机器重写绘编和编译器代码因为他相信自己可以做得更好高德纳在暑假期间也受雇于巴勒斯公司负责编写编译器代码
以纪念那些愉快的夜晚
他的第一个计算机程序也是在这台 650 计算机上实现的他为学校篮球队设计了一个复杂的公式根据球员在每场比赛中的得分助攻、抢断、篮板球、盖帽等多项统计数据对球员进行综合评估球队教练根据高德纳的程序挑选和使用球员这也帮助了凯斯理工学院在 1960 年赢得了联赛冠军
当地报纸和广播也报道了高德纳的神奇公式和程序等到大学毕业时高德纳不但获得了学士学位同时还被破例授予了硕士学位之后他又转入到加州理工学院继续攻读数学博士故事直到这里高德纳还是个传统的数学研究者没有从事任何与文字处理或印刷排版的相关工作但此时高德纳却迎来了一个写书的契机
高德纳在学校攻读博士期间由于他具有编译器开发的经历当时还是初出茅庐而后鼎鼎大名的教科书和计算机文献出版社爱迪生维斯利就联系到了高德纳希望他能写一本关于编译器设计的计算机图书但高德纳却志向远大
他希望自己写的书可以覆盖更大范围于是在 1963 年 6 月 25 岁的他开始撰写这本书的手稿并在两年后完成了初稿那时他已经获得了加州理工学院的数学博士学位并留在学校担任助理教授他采用手写的方式完成了 3000 页的书稿他原以为大约 5 页手稿才可以转成一页印刷后的书稿但出版商经过计算却发现
大约 1.5 页的手稿就可以转成印刷品的一页所以 3000 页的手写稿就要转成 2000 页的印刷页这大概足够三卷书的内容此时高德纳也得到了出版社科学顾问瓦尔加的支持他们接受了高德纳的拓展要求计划将这本书分为七卷出版这本书就是著名的计算机程序设计艺术 The Art of Computer Programming
高德纳在书中引入了许多编程技术和理论成为计算机科学教育和研究的重要参考资料由于书中的内容丰富且深刻有人甚至称它是计算机界的圣经它也被译为俄日西普等多种文字在世界各国广泛流传它的发行量创造了计算机类图书的最高记录直至 20 世纪 80 年代中期它都一直保持着每卷月销售量 2000 册的势头
成为爱迪生维斯利出版社成立以来最畅销的图书 2002 年我国也由苏韵林教授完成了中文版的翻译和出版工作事实上高德纳的第一卷是在 1968 年首次出版的第一卷的主要内容包括基本概念信息结构随机数和算术运算 1969 年他又出版了第二卷《办数字化算法》1973 年出版了第三卷《排序与搜索》
而这本书的第四卷组合算法是在 35 年后的 2008 年才算出版中间为什么隔了这么久是因为高德纳花了整整 9 年的时间和精力去开发了一款引起印刷排版行业变革的革命性软件当高德纳出版第一卷《计算机编程艺术》时出版社仍在使用 Monazep 机器进行热金属排版
到 1976 年第二版出版时全书需要重新排版此时热金属排版技术以大部分被照牌技术取代照牌是一种使用照相技术在相纸卷轴上进行排版的方法第一批照牌机将光线投射到字体中的单个字符底片上通过镜头放大或缩小字符尺寸后再投射到相纸或胶片上再收集到防光罐中的线轴上随后
将纸张霍宝模送入处理器经过两三道化学育最终完成粘贴霍宝模制作的准备工作但照牌技术无法使用第一卷出版时的字体这让高德纳在收到新书的教样稿时大为失望由于其质量远远低于第二卷第一版这让他无法接受恰好这时市面上出现了一本采用数字方式排版的新书于是他决定开始设计一套
属于自己的数字排版系统作为这个领域的门外汉他必须从头开始学习这包括排版数学的传统规则优质排版的构成要素以及字体设计的各个方面他原本预计只需要 6 个月的时间但实际上他却花了近 10 年时间才最终完成
1977 年 5 月 13 日他给自己写了一份备忘录描述了这种新型数字排版系统的基本特征并将其命名为 Tex 大写 T 小写 E 大写 XTex 的发音类似于 Tek 源自希腊词含义是艺术或工艺这个命名不仅体现了其希腊文化渊源还在视觉和读音上与英文 Tek 技术产生呼应
这个命名反映了高德纳对追求高质量排版艺术的执着在 Tex 中以字母虽为小写但实际上代表大写的希腊字母 Epsilon 象征着精确和细腻的排版品质 Tex 是一种专门用于计算机排版的编程语言主要作为文档排版的合成引擎从技术角度讲它是一种解释器而不是编译器
Jaxx 通过分层的方式重新定义了排版格式采用一种标准的语言能够灵活设置字体页面布局和各类排版参数用户也可以自定义所需要的输入内容然后通过红处理器进行加工处理这使得几乎所有文本都能通过程序来精确控制它的排版效果
Jaxx 是独立于任何生成 DVI 格式设备的某种特定输出文件它可以根据用户的具体需求将其转换成不同的输出格式例如照排机、激光打印机或喷墨打印机等 DVI 文件转换器主要负责转换排版文件中的字体位图、拆皮字体或者像打印机中已安装的某种字体通常需要使用 XOE 软件来查看 DVI 文件
这是一个由数学家保罗·沃伊塔所开发的开源程序专门用于在 Runix 的 X-Window 系统中显示由 Zacks 所生成的 DMI 文件现如今 PostScript 和 PDF 已成为 Zacks 最常用的两种输出格式对于作者来说 Zacks 建立了文本内容和排版设计之间的直接联系这改变了作者与出版社之间的传统协作模式
在古腾宝印刷术发明之前都是需要作者自己来亲自构思和设计手稿的作者可以完全掌控最终的成果而到了现代出版时代作者通常只需要负责文字内容排版设计则由出版社完成有了 Tex 后作者不仅能创作文字还能设计独特的格式和表现方式
这样可以让作者更准确地来表达自己的知识内容使想法到传播的过程更加高效在计算机科学、数学、工程和物理等多个技术领域 Tex 已经成为事实上的标准包括 Edison Wesley、剑桥大学出版社 Elsevier、牛津大学出版社和 Hueninger 等各大出版社都使用 Tex 出版了大量的书籍和刊物
但 Jax 并没有为高德纳本人和斯坦福大学赚过一分钱高德纳将 Tike 作为自由软件无偿提供给用户使用他曾说过
我开发这个程序纯粹是出于对书籍的热爱也是想推动这个领域的发展那时我已经有了一定的声誉另外我的书也销售得不错所以我并不需要对此保留专利权这是我热爱的工作同样数学家也不会因为发现了某种数学定理而后续就获得那些使用定理的人的报酬高德纳的这种思想比开源软件这一专有名词的出现还早了五到六年
在 Tex 的官方文档中明确指出它的方法和算法可以自由应用到任何软件中无论个人还是企业都可以使用为了维护技术的完整性和一致性并避免混淆仅要求开发者更改新程序的名称这算是一种最为开放的开源协议了 2022 年高德纳在接受知名播客主持人莱克斯·弗里德曼采访时
也谈到了他开源这项技术的原因当时开源这个词还并不存在但我当时并不想要 Katz 的专利技术一方面因为我看到了不能让专利的限制阻碍科技的发展比如 1950 年代
IBM 创立了 Fortran 编程语言他们本可以保留这种语言的专有性只有 IBM 可以使用这种语言但他们并没有这样做他们允许任何人使用 Fortran 转换成他们自己的机器语言也允许其他人开发 Fortran 编译机另一方面在排版行业
有很多语言是为了编辑页面而开发的每个制造商都有自己的编辑语言而这恰恰阻碍了出版业的发展每个作者不得不与某个特定的出版商相绑定当他们购买了新的排版设备时这些成本还需要被摊销到未来的 20 或 30 年中我们与一个特别的製造商联系然后一个新的工具在一年后发行但是印刷机器他们必须
伴随着 Tex 的诞生高德纳还研发了两个副产品一个是原字体 MetaFund 另一个是文学编程高德纳在发明 Tex 的同时还创造了一种叫做原字体的独立的字体创建程序
它既是一种用于定义光山字体的描述性语言也是一种执行原字体代码的解释器可以生成基于轮廓的未图字体一种字体需要依赖 62 个不同的参数类型这些参数控制着字体的各种元素例如宽度和高度衬线和数字格式字母 I 上的点是方形还是圆形字母 G 和 O 中圆圈的大小和形状
这些字体还能逐步变形在文本显示过程中从一种字体平滑过渡到另一种字体 Computer Modern 字体系列就是由原字体程序创建的也是 Tex 使用的最原始的字体系列 1984 年在 Tex 更高的版本中高德纳还发明了一种新的编程范式它被称为 WEB 文学编程传统编程方法通常将文档视为代码的注释说明
而文学编程方法则是通过编写文章的方式来记录原代码的制作过程用自然语言描述程序是如何工作的它还支持红片段和传统原代码并能生成可编译的代码与传统编程方式不同的是文学编程让程序员能像写文章一样自由地表达逻辑在文章中融入红和原代码来处理抽象逻辑
虽然第一代文学编程工具仍受特定的编程语言所约束但后来的工具已经突破了这一限制让处理逻辑能够在更高层次上进行展现高德纳曾在其自传的开头里幽默地发问道高德纳真的只是一个人吗?
作为现代计算机科学的领航者他完成了编译程序属性文法和运算法则等多个领域的前沿研究出版了 17 部专著发表了 150 余篇论文还包括《巴比伦算法》《圣经》《字母 S 的历史》等诸多内容他顺手还开发出两个数字排版系统改变了出版行业同时他在纯计算数学领域也做出了独特的贡献
他一生获得无数荣誉包括 1974 年的图灵奖 1979 年的美国国家科学奖日本京都奖瑞典科学院的埃德斯科尔奖和冯诺伊曼奖但他从不在意这些荣誉据说那象征至高荣誉的图灵奖奖杯他常常只是用来盛放水果当高德纳在 1980 年代初发布 Jax 的早期版本时许多人也基于这套方法开始构建自己的排版系统
这其中就有数学家和计算机科学家来私立兰波特他后来因为对分布式计算系统的贡献而获得 2013 年的图灵奖兰波特在斯坦福研究所工作期间正好在写一本书也需要用到排版工具于是他基于 JAX 开发出了更简便的版本
它通过提供友好的用户接口、红包和预定义命令,大大简化了原来的文档创建过程。这些标准红包后来被命名为 Lutex,它为用户提供了更高层次的排版工具,让人们无需深入了解 Tex 的技术细节就能完成排版工作。在 Lutex 中,内容的编写和文档的格式是分开的,
用户通过在纯文本文件中添加特殊命令来设定格式然后运行了 Tex 将代码编译成最终文档这类似于程序员熟知的从代码到编译再到执行的处理过程这种设计的原因是 1970 年代的电脑还没有高分辨率的显示器大多数软件都是基于命令型的这种从内容和格式到预览的处理方式被称为所见即所想
当我们构建网页时使用的 HTMLCSS 和 JavaScript 也采用类似方式这与我们现在熟悉的基于视窗操作系统的所见即所得文档编辑风格完全不同不过一旦熟悉了所见即所想的操作方式编辑文档时就不需要像使用 Office 文字处理软件那样频繁地在键盘和鼠标之间来回切换
如今,许多支持 Latex 的编辑程序只需点击一下就能完成这个过程,还能在输入窗口旁实时显示预览结果。最终,所有用 Latex 编写的文档都会由 Tex 引擎处理并生成输出文件。这意味着所有 Latex 文档本质上都是 Tex 文档,但反过来并不成立,也就是并非所有 Tex 文档都是 Latex 文档。
综合以上我们对 Tex 和 Latex 的介绍你可能心中有个疑问为什么不用 Mult 或 WPS 这样的文字处理软件来直接编辑排版文件呢?大概的原因主要有以下几个方面首先是从审美角度看 Tex 或 Latex 产生的文档非常漂亮看起来具有较高的品质因为所有的字体和位置都是通过极其细节的参数和精度来控制的
其次 基于 JAX 的文档内容都是简单的文本而不必在乎电脑上有没有安装微软的 Office 软件第三 JAX 是专门为数学和科学领域的论文而生比在 Modern 当中点击公式编辑器要方便和容易得多而且因为都是纯文本用户可以轻松地复制和粘贴公式第四 TAX 都是免费开源的
如果你在网上找找几乎所有的论文报告剧本小说都提供了 Tex 的样式文件这也体现了更多样化的文件展示形式目前 Latex 的最新版本是 Latex 而已它是在 1994 年首次发布的从 2015 年后开始逐步更新今天故事的主人公都是因为写书而去尝试编写新软件的
他们也在不经意间推动了出版行业的变革 2014 年上映了一部美国动画奇幻冒险喜剧电影《生命之书》The Book of Life 电影讲述了一位斗牛士为了满足家人和朋友的愿望而踏上来是冒险的故事并获得了当年金球奖最佳动画长片的提名今天片尾给大家准备的
就是这部电影的原声音乐 No Matter Where You Are 无论你在哪里这首歌曲由美国民谣流行二人组阿斯的丢物演唱也希望您能喜欢 I will be the rock that holds you upand lift you high so you stand tallI won't let you no matter where you areSo turn back these dry hearts that beat inside usand give ourselves a promise of our own ending
i'll be there