好代码既要脚踏实地,又得凸显个人风格。代码要提供一切必要的信息,但又不存在多余的细节。低效、错误绝对不能容忍。总而言之,好的代码准确、简洁、不证自明,适合人类阅读和理解。
但到上世纪六十年代末,计算能力的发展已经超越了程序员的技术水平。当时不少计算机科学家在创建程序时,并没有关注设计问题。他们编写出的算法冗长且不够连贯,里头充斥着大量“goto”语句——简单来讲,如果满足特定条件,机器就会跳转至程序中的指定位置。早期编程人员大量使用这类语句以避免代码产生难以预料的结果,但同时也导致程序难以阅读、无法预测甚至引发风险。糟糕的软件最终令人们付出了生命的代价——Therac-25计算机控制下的放射机,向癌症患者释放出了过量辐射。
在这样的背景下,Barbara Liskov于1968年在斯坦福大学获得了计算机科学博士学位。当时她对电气工程师充满崇敬,因为他们能够用神奇的双手通过电线把硬件连接起来。这样的架构特征,自然培养起工程师们分解问题并将其归类为不同模块的思维方式。如此一来,他们将拥有更充分的控制权,从而有针对性地对个别组件进行功能推理。
但计算机科学家面对的是代码,Liskov面前没有任何可以操作的物理对象。她更像是小说家或者诗人,只有一片空白等着她去填满。
▲ Barbara Liskov率先采用现代方法编写代码。她认为,单凭良好的设计无法克服当今计算机科学面临的实际挑战。
Liskov曾在加州大学伯克利分校攻读数学专业,在她看来程序设计不能算是技术问题,而更像是数学问题——可以通过逻辑原理与自然的美感进行推断引导。她希望组织代码以便控制软件,同时借此理解软件的复杂性。
在麻省理工学院任教授的青葱岁月里,她领导的团队开发出第一种不依赖goto语句的编程语言。CLU语言(即集群cluster的缩写)利用她发明的数据抽象方法将代码组织成多个模块。从这层意义上讲,目前我们使用的每一种重要编程语言,包括Java、C++以及C#,都可以算是CLU的后继者。
Liskov表示:“入行早的一大优势,在于行业还存在着不少严重的问题。大问题就在那,你要做的就是着手解决。”2008年,Liskov凭借着“对编程语言及系统设计实践与理论基础做出的卓越贡献,特别是与数据抽象、容错以及分布式计算相关的贡献”获得了图灵奖(被称为计算机领域的诺贝尔奖)。
在海德堡获奖者论坛(由获得计算机领域内各大重量级奖项的计算机科学家与数学家参与的内部邀请会议)之后,《Quanta Magazine》采访了Liskov,以下是经过编辑梳理的采访内容:
问:您经历了整个人工智能技术的发展周期,而且一直以专业角色参与其中。在您的职业生涯中,对于AI与机器学习的思考是否出现过变化?
Liskov:我在读博期间的合作伙伴就是AI方向的John McCarthy。我编写过一个程序,用来解国际象棋残局。John之所以提出这个课题,是因为我本身并不会下国际象棋。我读了下棋教程,并把算法翻译成计算机能够理解的形式。那时候,人们总觉得最明智的作法是保证程序能够按人们的意愿行事。但现在情况完全不同了。
如今,机器学习程序在不少领域都拥有良好的表现,但有时候也会掉链子。而人们既解释不了它们为什么奏效,也解释不了它们为什么掉链子。如果我打算研究某个问题,而且需要确切了解算法的工作原理,那我肯定不会使用机器学习技术。另一方面,我的一位同事正在利用机器学习对胸部X光片进行分析,希望找到更早诊断出乳腺癌的方法。
AI是一种应用方式,而非核心学科。可以看到,人们总是要用AI解决某些问题。
问:您是否曾将AI视为一门核心学科并投身其中?
Liskov:坦率地讲,我当初搞科研的时候,AI能做的事情还不多,所以我对基础工作更感兴趣。“我们该如何组织软件?”这是个非常有趣的问题。在设计过程中,我们需要考虑怎样实现程序的既定功能。我们需要把代码分成几个部分并加以管理。数据抽象在这方面发挥着重要作用。这有点像在证明一个定理,我们不可能一口气完成;相反,我们得先把问题分解开来,然后找到能够证明这些子问题的辅助定理。
要说我个人对计算思维的理解,我构想出的是一台仅包含所需数据类型与运算功能的抽象机。如果存在这样一台机器,我就可以编写出需要的程序。但事实并非如此;相反,我们引入了大量子问题——例如数据类型与运算,而且需要弄清楚如何将它们逐一实现。我会一遍又一遍地重复这个过程,直到开发出真正的机器或者真正的编程语言。这就是所谓设计的艺术。
了解其中的方法论,并不代表我们就已经精通了设计。有些人能做设计工作,有些人不能。身为老师,我一直不相信自己能教会所有学生如何设计。我可以向他们展示设计、解释设计、讨论数据抽象,并告诉他们什么是好的、什么是坏的。如果因素太多,那么流程就变得太过复杂;但如果因素太少,效率则会受到影响。设计出足够强大的功能,就是这样一门艺术。
问:如果您获得了一种神奇的法力,能够指导计算机科学的发展,那您会选择怎么做?
Liskov:我最关注的是互联网这个方向。目前出现了很多问题,包括假新闻和安全问题。我也担心互联网上关于人文的部分,例如夫妻离婚之后一方对于另一方的无端指责甚至是诽谤,包括可能公开对方的住所信息等等。那时候,我们有15所大学和几处政府实验室率先一步接入了互联网,能够访问网络的成员都是合作伙伴。我们认为,网站不需要对内容负责,因为这会扼杀网站的发展空间。一直到现在,互联网领域仍然有这样的立场存在。
问:您觉得这种立场是对学术自由的延伸吗?
Liskov:不,我觉得这是一种实用主义,毕竟我们无法预料可能出现的结果。如果想要靠互联网来维持治安,相关人员就必须得考虑其中存在的棘手难题。但当时人们就是那样直接接入网络,没有增设任何保障机制。解决当前问题所需要的不仅仅是技术,我们更需要利用法律约束人们的不当行为,特别是与隐私以及安全性相关的问题。当然,其中一部分也有技术性元素。例如,Facebook就利用一种算法进行信息传播,包括通过这种算法来限制某些信息的传播速度,或者识别出哪些信息不应该传播。总之,社会对于新生事物的消化能力总是不够强。我们当然希望能够加快成熟的速度。如果我有这样一种法力,我会先把互联网带来的问题给解决掉。
问:作为女性,您能谈谈在计算机科学领域的个人经历吗?
Liskov:我在学校里倒是一直在得到积极的反馈。母亲没怎么鼓励我,但也没有表达“哦不,女孩子别学这个”这类强烈的反对意见。但我学完了全部数学和理科课程,社会上对于女生学数理学科还是不太鼓励的。在伯克利大学,班上的100名同学只有那么零星几个女生。没人过来问我,“嘿,你学得挺好,要不咱们一起弄个项目?”我不知道现在情况还是不是这样。后来我去了斯坦福大学的研究生院。在毕业的时候,也没有公司邀请我入职。我当时注意到,我的朋友Raj Reddy和其他不少男同学都被招进了学术项目组,但确实没人来问我。
那时候,会有专门的人才顾问与全国各个部门接洽,安排高校里的毕业生。
但没人帮我找工作。上世纪九十年代,我回到斯坦福大学参加院系庆典活动。一群老教授又聚在一起搞自己的人脉圈子,他们说“嘿,那边有个朋友告诉我,我这有个学生挺适合你们的项目。”事情就是这样,他们根本没觉得有什么问题。事实上,他们打算推荐的是一位女生,而她能得到推荐完全是因为她嫁给了其中一名教授。真的让人很无语……还有位同事在自己的办公室里贴了张美女海报,我问他,“那张海报上是谁?”但他并不知道。
我申请加入麻省理工学院,但他们也不打算让我担任教职。出了这种状况,我们总会觉得是因为自己不够优秀。不过我的想法是,计算机科学应该是个开放的学科。我在MITRE得到了一个不错的研究岗位,编程方法的研究也是从这里开始。研究结果很好,我的论文得了一等奖。后来在1971年,我做了一次演讲,接下来Corby(Fernando Corbató)邀请我加入麻省理工学院,同时在伯克利任教的申请也有了回信。看来情况正在慢慢变好。
问:即使如此,您当初加入麻省理工学院时,全校1000名教职员工中只有10位是女性。这是真的吗?
Liskov:我记得确实是这样。
女性当然不会被明确拒绝,但压力确实会更大。麻省理工学院院长Jerry Wiesner也在为此努力。可以感觉到,这种压力来自上层,而绝对不会是基层。麻省理工学院有很多杰出的女性一直拿不到正式职称。过了不久,突然有几位女性加入进来。但数学系一直没有好转,数学系真的无可救药了。
我的感觉是,当时各个科学领域都没有意识到,女性已经做出了不少重大的基础性贡献。
在我担任麻省理工学院计算机科学系主任的十年之前,整个系只发现了一名有资格加入的女性。但等到我出任系主任时(2001年至2004年),我先后雇用了七名女性。这跟性别无关,我选定的三位年轻女性都很出色。但在很长一段时间里,院系从来就没考虑到女性这个群体。
问:在您获得图灵奖之后,网上有一条评论提到,“她为什么能得这个奖?她做过的事我们都听说了。”当然,这条评论可能与您的性别有关,也可能无关。
Liskov:我敢打赌肯定有性别的因素。还有另一条我之前没说起过的评论,里面提到“这项工作不是她做的,而是某某(另一位男同事)做的。”我不怎么关注网上的评论,但我丈夫看见了,又说给我听。我有时候会在对女性抱有敌意的地区做演讲,所以必须为此做好准备。一方面是因为我的女性身份,另一方面也是因为人总有种表现自己的欲望,所以还是得考虑到种种尴尬的情况。
问:您是说,有人会当面质疑图灵奖得主?
Liskov:没错!而且到这时候,我才感受到院系里同事们对我的支持。在到处演讲的时候,我已经有了一点名气,那时候人们总爱提这样一个问题:为什么有些女人更有韧劲?
问:您对新生代女科学家怎么看?女性有什么办法能防止这种广泛的歧视吗?
Liskov:这一点确实非常重要。我在麻省理工学院工作了一段时间之后,才慢慢适应公开场合出现的这些刻薄问题。建立这种自信,确实要花上不短的时间。
问:有所转变真的太好了。您的故事,大概可以总结成“隐忍不发,直到有能力独立自主。”
Liskov:没错,这可能也正是我自己的策略。当然,好在我也没遇到很多常见的麻烦,比如要求女性参加应酬之类。
在这方面,我的建议是:用不着取悦他人。
要知道,现在的情况并不比那时候好多少。我可能比较幸运,如果我大学一毕业就结婚了,那接下来的生活恐怕会完全不同。
问:您真这么认为吗?毕竟您有能力做出改变整个计算机行业乃至社会的贡献。
Liskov:毕竟生活轨迹都不同了,那后面的事情谁又说得准呢?
好文章,需要你的鼓励