一个对 Dijkstra 的采访视频

(也可以访问 YouTube 或者从源地址下载 MPEG1,300M)

之前在微博上推荐了一个对 Dijkstra 的采访视频,看了两遍之后觉得实在很好,所以再正式推荐一下。大部分人可能都知道他对图论算法和操作系统的贡献,而其实 Dijkstra 在程序语言上的造诣也很深厚。我们常用的程序语言里面司通见惯的“递归函数”,其实当年就是 Dijsktra 和另一个人不顾委员会里众人的反对和怀疑,坚持要放进 Algol 60,所以后来才进入了 Pascal,C,Java 这样的语言的。那个时候 John McCarthy 缺席,不然的话就会有三个人支持了。

现在看来,任何一个语言里面没有递归函数都是不可思议的事情,然而在1950-60年代的时候,居然很少有人知道它有什么用!所以你就发现,所谓的“主流”和“大多数人”一直都是比较愚蠢的。现在,同样的故事发生在 lambda 身上。多年以后,没有 lambda 的语言将是不可接受的。

在这里只摘录他提到的几个要点。某些观点也许不是最好的办法,但我确信其中有非常值得学习的地方。

  1. 软件的版本号 2.6, 2.7, … 都是胡扯。本来第1版就应该是最终的产品,可是软件公司总是先弄出来一个不完整的版本,骗大家买了,以后再慢慢“升级”。每次升级都要用户再次付钱。
  2. 编程有多种流派,我喜欢把它们归类成“莫扎特 vs 贝多芬”。当莫扎特开始写乐谱时,作品就已经完成了。他的手稿一气呵成,书法也很好。贝多芬不一样,他总是在怀疑和挣扎。他的作品一般是还没有想好就开始写,然后就往上面贴纸条修改。有一次贝多芬改了9遍才把手稿完成,后来有人把这手稿一层层的撕开,发现第一版和最后一版是一摸一样的。这种改来改去的做法是 Anglo-Saxon 民族的传统,它贯穿了英国式的教育。
  3. 作曲家的工作不是写乐谱,而是构思音乐。最早的时候人们编程都是用汇编语言的,就跟写乐谱差不多。后来他们发明了高级语言,就以为这些语言把编程的问题解决了。但是你仔细一瞧,发现它们只是把编程最微不足道的问题解决了,但是困难的问题仍然困难。这些高级语言与越来越大的野心加在一起,反而让程序员头脑的负担更重了。
  4. 称职的程序员都知道自己头颅的尺寸是有限的,所以他们以谦逊的态度来对待工作,像回避瘟疫一样地回避小聪明。
  5. 当我1970年在法国巴黎讲学如何编程的时候很成功,听众都非常积极。回家的路上我又在比利时布鲁塞尔的一个大软件公司进行了同样的演讲,结果非常失败。那恐怕是我一生中最失败的演讲。后来我发现了为什么:他们的管理层不喜欢无懈可击的程序,因为这公司是靠“维护软件”的合同来维持生存的。程序员对此也不感兴趣,因为最让他们兴奋的事情在于不知道自己在干什么。他们觉得如果清楚地知道自己在干什么,那就没有挑战性了,就是无聊的工作。
  6. 研究物理的人如果遇到不理解的事情,总是可以责怪上帝,世界这么复杂不是你的错。但是如果你的程序有问题,那就找不到替罪羊了。0就是0,1就是1,就是你把它搞砸了。
  7. 1969年,在阿波罗号登月之后不久,我在罗马的北约软件工程会议遇到了 Joel Aron,阿波罗计划的软件负责人。我知道每个阿波罗飞船上面的代码都会比前一个多4万行。我不知道“行”对于代码是个什么单位,但4万行肯定是很多了。我很惊讶他们能把这么多代码做对,所以我问 Joel:你们是怎么做到的?他说:做什么?我说:把那么多代码写正确。Joel 说:“正确?!其实在发射前仅仅五天,我从登月器计算轨道的代码里发现一个错误,这代码把月球的重力方向算反了。本来该吸引的,结果写成了排斥。是一个偶然的机会让我发现了这个错误。”我的脸都白了,说:这些家伙运气真好?Joel 说:“是的。”
  8. 软件测试可以确定软件里有 bug,但却不可能用来确定它们没有 bug。
  9. 程序的优雅性不是可以或缺的奢侈品,而是决定成功还是失败的一个要素。优雅并不是一个美学的问题,也不是一个时尚品味的问题,优雅能够被翻译成可行的技术。牛津字典对 elegant 的解释是:pleasingly ingenious and simple。如果你的程序真的优雅,那么它就会容易管理。第一是因为它比其它的方案都要短,第二是因为它的组件都可以被换成另外的方案而不会影响其它的部分。很奇怪的是,最优雅的程序往往也是最高效的。
  10. 当没有计算机的时候,编程不是问题。当有了比较弱的计算机时,编程成了中等程度的问题。现在我们有了巨大的计算机,编程就成了巨大的问题。
  11. 我最开头编程的日子跟现在很不一样,因为我是给一个还没有造出来的计算机写程序。造那台机器的人还没有完工,我在同样的时间给它做程序,所以没有办法测试我的代码。于是我发现自己做的东西必须要能放进自己的脑子里。
  12. 我的母亲是一个优秀的数学家。有一次我问她几何难不难,她说一点也不难,只要你用“心”来理解所有的公式。如果你需要超过5行公式,那么你就走错路了。
  13. 为什么这么少的人追求优雅?这就是现实。如果说优雅也有缺点的话,那就是你需要艰巨的工作才能得到它,需要良好的教育才能欣赏它。

【转】一个对 Dijkstra 的采访视频的更多相关文章

  1. 一个对 Dijkstra 的采访视频

    之前在微博上推荐了一个对 Dijkstra 的采访视频,看了两遍之后觉得实在很好,所以再正式推荐一下.大部分人可能都知道他对图论算法和操作系统的贡献,而其实 Dijkstra 在程序语言上的造诣也很深 ...

  2. 侣行APP

    本次要做的是团队共同完成一个项目.由队长组织,全体队员一起讨论分析并完成一款APP的需求调研,分析等工作. 1.团队介绍 队长:杨晓帅 队员                               ...

  3. For Your Dream

    队名:Braveheart 队员介绍: 队长:李洋洋 队员:姚欢,杨仁波,张波,乔闯 项目名称:数据沈航 总体任务: 收集整理学校的数据,为每个想要了解沈航的人展现一份我们收集来的信息 项目分组: ( ...

  4. cglib源码主流程源码-我们到底能走多远系列48

    扯淡 祝各位在园里的朋友新年快乐! 辛苦一年,为更好的自己也为更好的世界,很多人要感谢你们,你们也应该有很多人要感谢吧. 看了马斯克的采访视频,又想起兰迪·鲍许的最后一课,时光迁移,唯有梦想可坚持. ...

  5. Java暑期作业

    一.假期观影笔记--<熔炉> 影片<熔炉>是根据发生在韩国光州聋哑学校里的真实事件而改编.影片讲述的是在一所聋哑儿童学校里,校长.教务以及老师披着慈善的华丽外衣对学校中的多名未 ...

  6. 17秋 SDN课程 第一次作业

    SDN第一次作业 你会选择作 网络编程 方向的程序员吗?为什么? 有可能.原因如下: 1.我的研究与网络密切相关: 2.SDN侧重软件实现,自然涉及socket等网络编程知识,属于基本功: 3.市场. ...

  7. Internet History, Technology and Security (Week⑨)

    Week ⑨ We are now on the second to last week of the class and finishing up our look at Internet Secu ...

  8. 资料收集:学习 Linux/*BSD/Unix 的 30 个最佳在线文档

    文章转自:https://linux.cn/article-10311-1.html 手册页(man)是由系统管理员和 IT 技术开发人员写的,更多的是为了作为参考而不是教你如何使用.手册页对于已经熟 ...

  9. DOIS2019大会,腾讯 DevOps 测试中台探秘

    WeTest 导读 腾讯WeTest受邀参加2019年DevOps 国际峰会,由WeTest产品负责人-殷柱伟老师分享了腾讯DevOps测试中台的实践经验与心得, 议题受到了现场听众及行业媒体的关注与 ...

随机推荐

  1. windows server 2008 远程桌面(授权、普通用户登录)~ .

    大家好,因公司上ERP系统,用户端需要远程到服务器,但大家都知道微软默认只有2个,所以没有办法达到我公司的要求. 在网上找了很久也没有找到合适的文章,要不就这里说一点,那里说一点,没有一个全的,还有很 ...

  2. Socket.IO介绍:支持WebSocket、用于WEB端的即时通讯的框架

    一.基本介绍 WebSocket是HTML5的一种新通信协议,它实现了浏览器与服务器之间的双向通讯.而Socket.IO是一个完全由JavaScript实现.基于Node.js.支持WebSocket ...

  3. spark streaming的理解和应用

    1.Spark Streaming简介 官方网站解释:http://spark.apache.org/docs/latest/streaming-programming-guide.html 该博客转 ...

  4. Cognos第三方用户认证(CustomJavaProvider)

    关于Cognos第三方用户认证(CustomJavaProvider)的demo网上的例子很多,当然最权威的你可以从Cognos安装的SDK中去探索,本文不详细的说明代码,主要说一下认证的处理过程,以 ...

  5. [Node.js]28. Level 5: Express Server

    Now let's create an express server which queries out for this search term and just returns the json. ...

  6. Jmeter-Maven-Plugin高级应用:Remote Server Configuration

    Remote Server Configuration Pages 12 Home Adding additional libraries to the classpath Advanced Conf ...

  7. 整理两个PetaPoco连接SQLite数据库的方法

    从https://github.com/qingask/PetaPoco.NetCore下载源文件压缩包 解压出文件PetaPoco.Multiple.cs.PetaPoco.NetCore.cs 放 ...

  8. java编程思想 第四版 第六章 个人练习

    欢迎加群:239063848 进群须知:本群仅用于技术分享与交流.问题公布与解答 禁止闲聊.非诚勿扰 练习1:(1)在某个包中创建一个类,在这个类所处的包的外部创建该类的一个实例. import mi ...

  9. swift学习之元组

    元组在oc中是没有的.在swift中是新加的,学oc数组概念时还在想既然能够存储同样类型的元素,那不同类型的元素有没有东西存储呢,答案非常悲伤,oc没有元组这个概念.只是swift中加入了这个东西,也 ...

  10. STL - 容器 - vector简单应用

    VectorTest.cpp #include <vector> #include <iostream> #include <string> #include &l ...