你大妈已经不是当年的你大妈了,你大爷永远是你大爷
——赵本山
- 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,兴许会发自内心的微笑,因为它们对你来说不是冷冰冰的,而是鲜活的。
致敬前辈,致敬先驱。
领取专属 10元无门槛券
私享最新 技术干货