首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“谁是你大爷”系列之Dijkstra

你大妈已经不是当年的你大妈了,你大爷永远是你大爷

——赵本山

- 1 -

为什么要有这个系列文章

在学校一股脑地学了不少计算机知识,但几乎没有什么课程会给我们介绍这些知识是怎么来的。工作中,好多东西更是拿来就用,无暇顾及这些程序员的小“情怀”。

比如“快速排序”,常用算法,如雷贯耳,可你知不知道,快排是谁发明的;goto是高级语言对jmp汇编指令非常自然的映射,是谁先知先觉,发现goto有害的;再比如,浮点计算是如何一步一步变成现在这个样子的;鼠标是如何被发明出来的;面向对象的思想是怎么产生的…

这一切,我们今天用起来是如此的自然而然,但在当时,却凝聚了一批行业先驱们辛勤的探索和绝妙的创造。这个系列文章,就是要向前辈们致敬,有他们的无私奉献,才有今天计算机领域的宏伟大厦。

- 2 -

英雄也问出处

说起荷兰计算机科学家狄克斯特拉(Dijkstra),科班出身的人首先想到的就是解决有向图最短路径问题的Dijkstra算法。没错,不过他本人还有很多科学成果,听我慢慢道来。

狄克斯特拉出生于1930,是标准的“30后”,我们不妨亲切地叫一声“狄大爷”。狄大爷家在大城市鹿特丹,家境非常好,父亲是化学家,母亲是数学家,他本人立志当物理学家。北京高考状元熊轩昂小朋友说过,“现在的状元都是像我这样的,家境又好,本人又厉害”。狄大爷就是这种情况

- 3 -

传奇经历

如果狄大爷真的成为了一个物理学家,那也就没有今天这篇文章了。在学习理论物理的过程中,狄大爷发现这个领域的研究过程需要大量复杂的演算,计算机编程就成为了一个绕不过去的坎儿。于是,他开始学习编程,走上了程序员的道路。

年轻时代的狄大爷如你我一样,也犹豫,也彷徨。他想的是,我应该一辈子从事计算机领域的研究呢,还是学会编程以后接着研究理论物理,毕竟计算机刚刚兴起,能有多大的研究空间,谁也说不好。此时,恩师也是贵人的Wijingaarden给狄克斯特拉以指点,“目前程序设计虽然还没有成为学科,不被重视,但既然计算机已经有了,正处于开创阶段,你未来就有可能使程序设计成为一个受人尊敬的学科”,这成为了他人生的转折点。狄大爷说,我一生都会感谢我的老师!

1972年狄大爷获得图灵奖,发表获奖演说时,他提到了上面的经历,并且打趣道“给年轻人提建议时,一定要慎重,因为有时候他们真的听话!

还有一件趣事,1957年,狄大爷结婚,这个时候他已经做了两年的程序员。阿姆斯特丹的“民政部门”要登记职业,他认真的写下了“程序员”,然而民政部门不接受,说没有这个职业。没办法,最后填了个“理论物理学家”。

- 4 -

个人成就

狄大爷一生成果颇丰,涉猎广泛,从程序设计理论到算法理论,从编译器到操作系统,在计算机领域的诸多方面都做出了杰出贡献。

狄大爷是结构化程序设计理论首创者,自顶向下,逐步求精,模块化设计,这些理念在今天已经深入人心;然而在当时,真的是在程序员界掀起了一股清新的风,用这种方法写出的程序让人眼前一亮。不仅易读易维护,而且可以把程序规模做得很大。据说这一理念的灵感源于人类的等级制度,狄大爷的洞察力可见一斑。也正是在结构化程序设计的理念下,狄大爷提出了“goto有害”,认为完全可以用顺序、选择、循环取而代之。经过激烈讨论和多年实践,大家基本达成一致,除了避免多处return,复杂逻辑后需要统一clean-up的情况以外,都应该避免使用goto。

算法方面,Dijkstra算法解决最短路径问题,大名鼎鼎,自不必说。

编译器更是狄大爷的拿手好菜,他和同事一起实现了世界上第一个ALGOL 60编译器,比后来者早了一年多,引起各国计算机学者惊叹,奠定了自己在编译器乃至计算机领域的地位。

狄大爷参与设计实现了THE操作系统,这个操作系统虽然不如今天的Windows、Linux、Mac这样应用广泛,但其中用到的一些思想和概念,奠定了现代操作系统的基础,例如进程的ready、running、blocking状态,同步与互斥机制,信号灯(Semaphore)等。信号灯的灵感来自于火车控制系统,防止火车抢用同一条火车轨道,狄大爷拿来主义,用同样的概念防止两个进程抢占同一个处理器,妙!

从狄大爷如此多的学术成果来看,他是一个洞察力很强、知识迁移能力很强、创造力很强的大神。

- 5 -

盛产金句的大师

大师的金句很多,我最欣赏这句“Beauty is our business”(美是我们的追求)。他的程序化设计方法真的做到了这一点,把一众程序员从混乱的泥沼中解救出来。今天,我们这些程序员也应该铭记这句话,不能仅仅实现功能就完事儿,要有更高的追求。

- 6 -

夜空中最亮的星

狄大爷已于2002年驾鹤西去,留下1300多篇学术论文,是给后人的宝贵财富。

程序员的生活有时像正午的阳光一样夺目,充满成就感;有时像黑夜里漫长的跋涉,让人战战兢兢。还好,计算机领域有非常多耀眼的明星,让我们在黑夜里依然可以安心前行。当你看到goto语句,当你调用信号灯的API,兴许会发自内心的微笑,因为它们对你来说不是冷冰冰的,而是鲜活的。

致敬前辈,致敬先驱。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180804G083KR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券