她改变了编程

公众号关注 “GitHubDaily”

设为 “星标”,带你了解圈内新鲜事!


转自量子位,作者十三、边策

如果你上过编程课,一定被老师提醒过:不要使用 goto 语句!

因为 goto 语句不仅让代码的可读性很差,随意的跳出还会给程序带来安全隐患。

但是这种几乎被现代编程明令禁止的语句,在计算机诞生之初却司空见惯。

早期的程序员用 goto 来解决代码无法预料的后果,遇到什么问题就用一句 goto,让程序跳转到某个指定语句。

直到一位 MIT 的女教授,才让我们彻底摆脱了 goto 语句的支配,她就是 Barbara Liskov。

芭芭拉・利斯科夫 (Barbara Liskov),图源:QuantaMagazine

刚满 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 提出的这项原则。

传奇的女性,Barbara 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 说道。

即便到了足够开放的今天,她也认为现在的情况并不比那时好:

也许我是幸运的。如果我大学一毕业就结婚了,我可能会有一个完全不一样的结果。

如何看待 AI 的未来

那么,Liskov 对人工智能和机器学习发展有什么看法呢?

我博士学位的工作是与 John McCarthy 合作研究人工智能。

John 提出了「国际象棋残局」这个主题,由于我没有玩过国际象棋,所以我读了相关书籍,并将国际象棋的一些算法翻译成了计算机算法。

那时候,人们认为,一个明智的做法是让程序按照人类的意愿来行事,但现在已然不是这样了。

现在的机器学习程序在多数情况下效果还是不错的。但有些情况下效果却并不是理想,人们不知道问题出在了哪里。

如果我在研究一个问题的时候,需要知道它的工作原理,那我不会用机器学习方法。

人工智能是一种应用,而不是一门核心科学

而对于计算机科学的发展,Liskov 比较担心的是互联网,包括假新闻和安全问题。

若是一对离婚的夫妇,丈夫在发表一些对妻子诽谤的内容,包括她的住址之类的私人信息,那就很可能引发一些非常可怕的事情。

这要回溯到 80 年代。那时候,15 所大学和几个政府单位实验室通过互联网连在一起。我们都是好朋友。他们当时的态度是,网站不应该对内容负责,这将扼杀他们的发展

而现如今,这种态度还在继续。

我们现在解决当下问题的时候,需要的不仅仅是技术,还需要法律来解决人们的不良行为,解决隐私与安全的问题。

One More Thing

分享 Liskov 对女性在事业发展过程中的一点建议:

在你能真正站起来之前,保持低调。而后再去拥抱成功。

传送门

博客:
https://www.quantamagazine.org/barbara-liskov-is-the-architect-of-modern-algorithms-20191120/

维基百科:
https://en.wikipedia.org/wiki/Barbara_Liskov

个人主页:
https://www.csail.mit.edu/person/barbara-liskov

推荐阅读:

牛逼!这家 AI 公司用面具破解了中国的人脸识别系统!

微软花 2 个亿做出来的软件免费用!网友:太良心了!

P 站 2019 年度报告里都说了什么?

Nginx 之父被抓了?!

2019 年最全 IT 吃瓜指南

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值