|
|
|
|
公众号矩阵

图灵奖得主Barbara Liskov:为什么编程仍然很重要

近日,英国科技网站The Register对麻省理工学院教授Barbara Liskov进行了采访。

作者:吴彤编译来源:雷锋网|2021-09-23 09:35

 

本文转自雷锋网,如需转载请至雷锋网官网申请授权。

编者按:近日,英国科技网站The Register对麻省理工学院教授Barbara Liskov进行了采访。Barbara于2009年因其对编程语言和系统设计的贡献而获得图灵奖,在本次采访中,Barbara总结回顾了其在70年代创建CLU编程语言早期工作,并发表了一些关于CLU编程语言的最新见解。

在即将开幕的CNCC2021(中国计算机大会)上,Barbara也将作为特邀嘉宾发表演讲,为帮助参会者更好了解Barbara的最新研究及对编程理念的思考,AI科技评论特此对The Register的文章进行了编译。

自从Barbara Liskov因其对编程语言和系统设计的贡献而获得图灵奖已经有12年了,最近,她又发表了一些关于CLU编程语言的最新见解:为什么编程仍然很酷?

现年80多岁的Liskov, 正领导着麻省理工学院的编程方法论小组。最近,她一直在研究并行计算。

在90年代时她曾与一名学生一起开发了拜占庭容错系统(Byzantine Fault Tolerance),如今她表示,这对充满区块链的世界来说意义重大。

近年来,随着CLU在GitHub上的出现,人们的注意力转向了Liskov师徒在20世纪70年代初创造的这门语言时的早期工作。今天,我们详细谈谈为什么直到今天,编程仍然很重要。

1. 传统的编程并不溯源 error,也没有泛型

当初CLU起步时,整个编程语言的状态太差,许多东西需要创新。

例如,我们不得不正视泛型的问题。在抽象数据类型的概念出现之前,实际上已经需要泛型了。如果你写一个排序例程,并不希望更替不同类型的数组时都要重写。

然后是异常处理。Liskov回忆起关于恢复模型与替代方案的争论:“问题是,在引发异常之后,控制权是否随后恢复到引发异常的代码,还是只是结束了该代码?"

如果没有一种方法从主流中分离单个异常情况,那么经常出现在远离错误源的bug就越难追踪。不幸的是,今天这种情况仍然会发生,还需要你一个一个debug。

数据抽象是一件大事,所有其他东西也都是随之而来的。Liskov说到。“如果你回顾一下 90 年代 Java 发生的事情,他们想使用采用参数多态的方式,但他们没有做,也从来想过优化异常处理”。

2. 发明新的计算机语言

Liskov 感知现代编程语言的缺乏基础,无法支撑起整个现代应用软件行业,因此将目光放在了CLU的研究上,并带领学生一起投入其中。 

然而,到了20世纪70年代末,科研道路出现了岔路口: 要么尝试将这门语言商业化,要么坚持研究。Liskov选择了研究,“在我的小组里,没有一个学生想要创业。"

直到现在,Liskov 还一直赞扬她的学生 Russ Atkinson、Alan Snyder 和 Craig Schaffert 以及Stephen Zilles。后者也在麻省理工学院,并于 1973 年与她一起改进 CLU 基础概念。Bob Scheifler, Eliot Moss和Toby Bloom也出现在1979年10月的CLU参考手册上。

她指出,现在发生的事情别无二致。现如今把东西放到网上,并建立一个智囊社区是一个相对简单的过程。但是在70年代,你必须挂靠一家公司,但即便如此,也很难获得启动资金。直到90年代初,情况才有好转。

话说回来,CLU的本质是它没有全盘接受多年来困扰其他语言的糟粕。Liskov说 ,“一门语言一旦运行,它就开始衍生遗留问题,致使你必须继续支持所有已经编写的代码。这就产生了负担。"

在过去的20年里,Liskov参与的大部分开发工作都与c++有关。她说,“程序开发不再是用机器语言完成的。这是一个很大的进步。只是提高了抽象的层次,模块化的原则就已经被很好地理解了。"

然而,直到今天,Liskov一直希望改变的事情是:语言被强制执行封装。但是当大家在构建一些低级平台时,又必须违反封装。Liskov认为封装是编程方法的关键工作--模块化,即将数据和处理数据的方法捆绑到单个单元中,并将对数据内部的访问限制在这些方法中。这与让编译器强制执行是两码事。

不过,其他方面也有所改善。与 1970 年代可用的存储能力相比,今天的巨大存储能力意味着在设计模块时,“紧凑性”可以让“优雅”退居二线。我们总是希望它可用,但尽可能简单。

3. 结语

Liskov现在仍对编程和技术充满热情,她说:“编程和软件工程仍然是一个令人兴奋的职业。我认为要牢记接口和实现之间的区别,让行为与实现分开定义。

“如果你没有使用强制封装的语言(不幸的是,大多数语言都强制封装),那么你就必须自己强制封装,这有助于维持区块链系统完整性,广义地说,超类的对象应该可以被子类的对象替换而不破坏应用程序。”

【编辑推荐】

  1. uniapp视频教程IOS安卓APP微信小程序H5在线教育项目实战开发源码
  2. 结合求解器,清华大学校友、MIT中国博士生开发出第一套提高自动驾驶安全性的感知算法
  3. 网工教你思科华为系列(4)-网络工程师的软技能(拓扑图、架构图、IP地址分配、规范配置脚本)
  4. Shell编程一篇足矣
  5. 移动端web开发-移动端响应式
【责任编辑:张燕妮 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

带你轻松入门 RabbitMQ

带你轻松入门 RabbitMQ

轻松入门RabbitMQ
共4章 | loong576

44人订阅学习

数据湖与数据仓库的分析实践攻略

数据湖与数据仓库的分析实践攻略

助力现代化数据管理:数据湖与数据仓库的分析实践攻略
共3章 | 创世达人

14人订阅学习

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

42人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微