若是你上过编程课,必定被老师提醒过:不要使用goto语句!程序员
由于goto语句不只让代码的可读性不好,随意的跳出还会给程序带来安全隐患。算法
可是这种几乎被现代编程明令禁止的语句,在计算机诞生之初却司空见惯。编程
早期的程序员用goto来解决代码没法预料的后果,遇到什么问题就用一句goto,让程序跳转到某个指定语句。安全
直到一位MIT的女教授,才让咱们完全摆脱了goto语句的支配,她就是Barbara Liskov。架构
刚满80岁,荣誉等身,她是全美首批得到计算机博士学位的女性之一,集冯诺依曼奖、图灵奖于一身。机器学习
甚至能够说她发明了构成现代程序基础的体系结构。编程语言
但在此以前,她是一位曾经由于性别申请普林斯顿数学研究生被拒的人。学习
因此Barbara Liskov到底是怎样的传奇计算机科学家?网站
在其80岁寿诞之际,咱们一块儿看看她改变了编程的故事。人工智能
上世纪40年代,美国发明了第一台电子计算机ENIAC。虽然早期的计算机体积很大,但提供的功能简单,那时候的编程也没必要考虑太复杂的结构。
goto语句是最简单的方法,只需把程序的执行引导到对应的某一句便可。
普遍使用的goto语句虽然简单,可是却没有逻辑章法。用这种方式编写的程序既难以阅读,又容易形成危险,甚至还闹出过人命。
曾经有一种名为Therac-25的软件控制的放射治疗机,就由于使用了过期程序设计方法,致使6名患者接受严重超剂量的辐射,形成了死亡事故。
若是没有一个程序设计的基本架构,计算机硬件的发展已经超出了程序员能力所能承受之重。
终于在60年代,计算机程序设计迎来了新的理论,当时Böhm和Jacopini两位计算机学家提出,能够用结构化的程序彻底代替goto语句,只需使用顺序、选择和循环三种结构便可。
这种结构一直被使用至今。
1974年,彼时仅35岁的MIT女教授和她的学生将这种思想付诸实践,他们发明了一种新的编程语言CLU。
CLU彻底抛弃了goto语句,虽然这种编程语言没有被普遍采用,可是它在面向编程语言的发展过程当中起过很是重要的做用。
CLU中的一些概念在许多方面影响了后来的编程语言,对后来出现的一些面向对象编程(OOP)语言作出了许多贡献。
后来出现的Java、C++、C#、Python都是CLU的后代。
CLU的关键贡献包括抽象数据类型、共享调用、迭代器、多个返回值、类型安全的参数化类型和变量类型。
Liskov对程序设计的贡献不只于此,现代面向对象程序设计的5大原则“SOLID”中的L就是以她名字命名的里氏替换原则(Liskov Substitution principle)。
1987年,Liskov在一次大会的主题演讲中最先提出了这一原则,即继承必须确保超类所拥有的性质在子类中仍然成立。
遵循里氏替换原则编写的程序,克服了继承中重写父类形成的可复用性变差的缺点。
并且这一原则还保证了程序的正确性,扩展的子类不会给已有的系统引入新的错误,下降了代码出错的可能性。
直至今日,全部面向对象编程的程序员还在遵照着Liskov提出的这项原则。
现在Liskov的学术成就已经得到的普遍的认可。
但在那个年代,做为一个科学家,仍是个女性,真的挺不容易,曾由于性别申请普林斯顿数学研究生遭拒。
Liskov在伯克利读本科期间,100人的班里,只有一两名女性同窗,她就是其中之一。
她修完了全部和数学、科学相关的课程,而学校当时却不鼓励女性同窗这样的作法。
也历来没有人对她说:“嘿,你这样作很好,不考虑跟咱们一块儿合做吗?”之类的话。
好在Liskov的母亲没有当面反对过她(虽然只是鼓励她要在学校好好表现)。
但她对此不觉得然,直到在斯坦福读研毕业时,才意识到“性别”问题的存在。
由于在她毕业的时候,没有任何人找她谈工做的事情。
而像她的男性同窗(Raj Reddy)就能被招聘到学术方向的岗位。
要知道,在那个年代,就业有点像“包分配”——顾问会经过与全国各地部门的合做来安排毕业生的工做。
但对于Liskov,可谓是“无人问津”。
在这以前,Liskov已经向MIT求职过,但获得的反馈倒是“不考虑担任教授”。
发生这种状况时,你会认为“是我本身还不够优秀”。
“但同时我也认为,计算机科学是开放的。”
幸亏Liskov在Mitre公司的第一份工做还算不错,她在这家公司期间,深刻的研究了编程方法。
△Barbara Liskov正在设计抽象数据类型(ADT)
这项研究让她得到了一个一等奖论文。
1971年,她针对这项研究发表了一次演讲,然后便受到了MIT和伯克利的邀请。
事情至此才发生了改变。
刚刚进入MIT时,大约1000名员工中只有约10名左右的女性教员。但其实,MIT有不少杰出的女性并不在教职人员之列。
在科学领域,不多有人可以意识到女性作出的一些基础性贡献。
90年代,她回到斯坦福参加了一个部门庆典。一群老教授们谈论着“校园关系网(old-boy network)”的八卦,他们说:
有个年轻女人表现得确实很是不错,但那是由于她嫁给了一个教授。
Liskov以为这件事情真是愚昧至极。
在Liskov担任计算机科学系主任以前的10年里,部门只发现了一位值得聘用的女性。
2001-2004年,在她担任部门领导期间,Liskov共聘用了7名女性,她并无滥竽充数,其中的3名初级教员都很是优秀。
再后来,Liskov得到了图灵奖,即使拥有了如此殊荣,仍是免不了质疑的声音。
△2008年度美国计算机学会(ACM)图灵奖(Turing Award)
她作的工做,没有我不知道的。为何她会得到图灵奖?
哦,那个工做不是她作的,是一个男同事替她作的。
“简直一派胡言”,Liskov说道。
即使到了足够开放的今天,她也认为如今的状况并不比那时好:
也许我是幸运的。若是我大学一毕业就结婚了,我可能会有一个彻底不同的结果。
那么,Liskov对人工智能和机器学习发展有什么见解呢?
我博士学位的工做是与John McCarthy合做研究人工智能。
John提出了「国际象棋残局」这个主题,因为我没有玩过国际象棋,因此我读了相关书籍,并将国际象棋的一些算法翻译成了计算机算法。
那时候,人们认为,一个明智的作法是让程序按照人类的意愿来行事,但如今已然不是这样了。
如今的机器学习程序在多数状况下效果仍是不错的。但有些状况下效果却并非理想,人们不知道问题出在了哪里。
若是我在研究一个问题的时候,须要知道它的工做原理,那我不会用机器学习方法。
人工智能是一种应用,而不是一门核心科学。
而对于计算机科学的发展,Liskov比较担忧的是互联网,包括假新闻和安全问题。
如果一对离婚的夫妇,丈夫在发表一些对妻子诽谤的内容,包括她的住址之类的私人信息,那就极可能引起一些很是可怕的事情。
这要回溯到80年代。那时候,15所大学和几个政府单位实验室经过互联网连在一块儿。咱们都是好朋友。他们当时的态度是,网站不该该对内容负责,这将扼杀他们的发展。
而现现在,这种态度还在继续。
咱们如今解决当下问题的时候,须要的不只仅是技术,还须要法律来解决人们的不良行为,解决隐私与安全的问题。
分享Liskov对女性在事业发展过程当中的一点建议:
在你能真正站起来以前,保持低调。然后再去拥抱成功。