|
专家访谈:Donald Knuth访问实录 |
|
![]() |
|
|
|
您查看的文章来源于http://www.oklinux.cn
近日,Andrew Binstock和Donald Knuth对一些话题进行了交流,包括开源代码运动,极限编程,多核架构,可重用代码,以及Knuth自己编程时使用的工具等。
Andrew:无论你当初并是否意识到了,你其实都是开源代码运动的发起者之一。你以前就声明过将TeX作为开源代码项目发布,原因在于考虑到当时专有现实(proprietaryimplementations)的问题,并且希望邀请更多的人来修改代码中的错误——这些都是今天开源代码项目关键的驱动力。你为开源项目从那时起的成功惊讶过么?
Donald:或许开源代码的成功是过去几十年中计算机领域里唯一没有使我惊讶的事。但是开源运动还没有发挥出全部的潜力;我相信在整个产业经济越来越多地从产品转移到服务上的过程中,开源程序将完全占领支配地位,同时会有越来越多的志愿者会参与改进代码的质量。
例如,开源代码能带来数以千计的二进制包,可以完美地针对每个独立用户进行配置,但是商业软件通常只有几种版本。一个通用的二进制可执行文件必须包含很多指令来“抹平”不同运行环境间的差异,这对于很多安装环境来说并不合适;然而源代码是高度可配置的,因此这种浪费也就随之消失了。这是开源软件的巨大优势。
但是我认为有少数软件,比如Adobe公司的Photoshop,够能比它开源的竞争者更优秀(比如Gimp)——由于某些原因,我真的不知道为什么!我非常乐意花很多钱去买真正好的软件,前提是我确认它出自最佳的程序员之手。
不过请记住,我对于经济问题的观点非常不可靠,因为我只是个教育者和科学家。我对于市场几乎一无所知。
Andrew:我听说你曾经参加过一次在斯坦福举办的编程大赛,你最终提交的那个获奖的作品,只经过一次编译就能正确运行了。这件事是真的么?在软件领域里,当今的开发者需要频繁地构建程序,每次只增加很少量的代码,过程中要依赖即时编译技术,并且要创建并运行大量单元测试。你怎么看待这种软件开发方法?
Donald:你听说的这个故事是一个典型的传说,它只有一个很小的“内核”是真的。事情的实际经过是这样的:John McCarthy于1971年决定举办一场“纪念日编程大赛(Memorial Day Programming Race)”。当时除我以外的所有参赛者都工作于斯坦福后山的AI实验室中。他们共同使用WAITS分时系统;我对校本部很不满,因为我当时能够使用的唯一的计算机是一台大型主机,我必须为卡打孔,然后提交给主机,它会以批处理的模式进行处理。我使用Wirth的ALGOLW系统(Pascal语言的前身)。我的程序第一次并不能工作,但幸运的是我可以使用Ed Satterthwaite的那个出色的ALGOLW离线调试系统,因此我只是运行了两次程序。另一方面,使用WAITS的家伙们一直没有得到足够的处理器周期,因为他们的机器负载太大了(我想,第二个完成的那个人,尽管使用了“现代的”方法,还是比使用老式方法却最终取胜的我晚了一个小时)。这并不是一场公平的竞赛。
谈到你刚才的问题,即时编译和“单元测试”的想法对我的吸引力非常有限,尤其在我身处完全未知的环境中时,这时我需要反馈,以确定什么可以工作,什么不可以。否则,我会在不需要做的事情和不必思考的问题上浪费很多时间。没有什么是需要“伪装(mock up)”的。
Andrew:对于开发者,尤其是客户端开发者,正在面临一个日渐明显的问题,即改变他们的思考方式,从线程的角度去编写程序。这个问题是由廉价的多核PC的出现导致的。它一定需要很多算法进行多线程化的改造,至少也需要做到线程安全的。到目前为止,从你已经发布的《计算加程序设计的艺术》(TAOCP)第4卷的大部分内容来看,还没有涉及到这方面内容。你接下来的工作会和并发与并行程序设计有关么?尤其是这个问题天生就与你现在研究的组合算法非常适合。
Donald:组合算法的研究领域非常庞杂,而我将有幸在三或四卷书中介绍它串行方面的内容,我认为串行方法的重要性不会降低。相反,并行技术的 “半衰期”其实非常短,因为硬件总在快速地变化,每一个新的机器都需要一些不同的方法。所以,很久以前我就决定在书中保留我最了解的内容。有很多人比我更了解并行机器,他们可以指导你如何面对同时性的问题;程序员应该听听他们的建议,而不是我的。
Andrew:很多多核处理器的供应商都在帮助开发者转移到多核模型的过程中,表现得力不从心。做为一名著名的教授,你对于这种转变有什么看法?什么因素才能促使这种转变?如果有更好的工具可以解决问题么,比如在语言中加入对并发更好的本地支持,或者使用框架?或者还有其他的方案么?
Donald:我不想回避你的问题。也许我个人的一些观点会为当前流行的多核架构趋势泼一盆冷水。在我看来,这种现象或多或少是由于硬件设计者已经无计可施了导致的,他们将Moore定律失效的责任推脱给软件开发者,而他们给我们的机器只是在某些指标上运行得更快了而已。如果多线程的想法被证明是失败的,我一点都不会感到惊讶,也许这比当年的Itanium还要糟糕——人们基本上无法开发出它所需要的编译器。
这么说吧:在过去的50年间,我编写过一千多个程序,其中有很多规模都很可观。但是如果说哪些程序的性能可以在并行或多核环境下有明显的改进,我恐怕连五个都说不来。比如,多核处理器对TeX肯定没有什么帮助。
你听说过有多少程序员对这种未来一片光明的机器抱有强烈的兴趣?我几乎没有听说过,除了他们的诉苦。尽管我们学院那些搞硬件的家伙一直想让我相信我是错的。
我知道有很多重要的应用依赖于并行——图形渲染、密码破解、图像扫描、物理与生物过程模拟等等。但是这些应用需要非常专业的代码以及特定用途的技术,而这些技术无疑每隔若干年都要变化。即使我对那些方法非常了解,可以把它们写入TAOCP中,这对于我的时间也是巨大的浪费,因为过不了多久,这部分内容就没有什么价值值得别人去读它了。(类似地,当我在准备第3卷的第三版时,也打算删除掉关于如何在磁带上排序的内容。这些内容曾经是软件领域里最热门的主题,现在再把它印在书中就是巨大的浪费了。)
我今天所用的机器有两个处理器。而我只有在同时运行两个独立的作业时,才会用到这两个处理器;这样很好,不过每周这种情况只会发生几分钟而已。如果我有四个、八个甚至更多的处理器,我同样得不到任何好处,想一想我是做什么的——我几乎每天每时每刻都在使用计算机。所以,我为什么要为硬件供应商承诺的未来而高兴?他们认为多核的到来可以为我的工作提速,我认为这是“白日梦”(pipe dream)。(不——这个比喻不准确!我是会用“Pipeline”的,但是不会用线程。也许我应该说这是个“泡影(bubble)”)
共3页: 上一页 1 [2] [3] 下一页 |
上一篇:操作系统大战:Linux VS Vista VS XP 下一篇:法国在开源软件应用领域处于世界领先地位
![](/images/xg.gif) |
相关文档 |
|
![](/images/xg.gif) |
发表评论 |
|
|
|
|