虚拟机设计与实现(Virtual Machine Design and Implementation in C/C++)

https://book.douban.com/subject/1231974/

这种因计算机平台的推陈出新而让我遇到的尴尬局面让我耿耿于怀,我希望能够在一种相对比较稳定的目标平台上面进行软件的开发,好让我设计出来的软件能够有一个更长的生命周期。计算机科学是一个充满着变化的海洋,新技术随时都会涌现,而每涌现一种新技术,就会掀起一连串的惊涛骇浪,我想要得是一个能够让我躲避这种风浪的小岛。经过这么多年的闯荡,我终于发现一个可以让我信赖和依靠的东西:每一种新推出的计算机平台上都有一个ANSI C或者是C++编译器。与其使用那些针对特定硬件平台的开发工具来编写软件,为什么不打自己的程序建立在一种稳定的技术标准之上呢?随手可得的ANSI C来构造一套技术标准并不困难,那我为什么不这么做呢?与以来某种特殊平台来执行应用软件的情况相比,采用虚拟机的解决方案无疑更好。这样我能够简单地以移植虚拟机的办法来缓解因硬件方面的进步而给软件开发带来的压力。

在读研究生的时候,我知道了一些能够确保研究生论文得到发表的小招数。例如,即使某位教授发现的东西用很简单的话就能够解释清楚,他也经常会写出一篇很长的论文,里面还会提到很多很深奥的基础,是她的发现看起来要比实际情况复杂得多。这是一种比较普通的社会现象,因为人们往往会有这样一种思维定势:如果某个想法能够用很简单的道理解释清楚,它的重要性或者是独创性就会大打折扣。想要给订阅科技刊物的人们留下深刻印象,就必须把问题描述的很复杂,就必须把问题的解释隐藏在重重迷雾当中。对于像抱住自己的饭碗的教授来说,这无可厚非,但是软件工程是千万不能这样。想要避免项目的失败,就必须坚持简洁的设计理念。

更糟糕的是,在1980年代,该公司有位主管认为源代码里面的程序注视会拖延编译时间(其实只是从一天延长到两天而已),于是决定把程序中的注释全部删除掉。到现在,这家公司手里有16,000,000行用K&R C语言编写的源代码,里面一点儿注视都没有。这可能会是很少部分人暗自窃喜–因为他们现在可以垄断有价值的信息了,新招聘来的工程师却不得不面对一条90度的学习曲线。

我想告诉大家,软件质量必须从头抓起,为了抢先推出产品而粗糙编写的程序代码等到临出门时再来改进就来不及了,根本无可救药。程序员赶工期而让质检(quality assurance,QA)人员收拾残局的做法无异于饮鸩止渴。记住,慢功出细活。想要编写出无懈可击的高水平软件,就必须在深思熟虑的基础上循序渐进。这条路可能很难走,但是他却是唯一的正确的道路。那些持其他观点的人不时有自己的小算盘,就是想看你的笑话。

作为软件开发人员,必须了解一件事情:你参加开发的每个软件项目都可能是“紧急情况”,至少是那些项目经理们都喜欢这么讲。这不过是软件开发行业里的“狼来了”的故事,经理们之所以喜欢这么讲,目的就是为了催促你更快些出程序。销售人员的另一桩“罪行”是在软件的功能方面夸大其词。为了让自己的产品能够从竞争者当中脱颖而出,销售人员经常会在顾客介绍软件功能的时候信口开河。然后他们会跑到你的办公室中宣部这个消息,可六个拟开发这些新功能的时间仅仅只有三天。作为软件开发人员,想要在这种情况下保护自己,可以在项目开始之处把各项需求罗列出来并且让公司销售部门的领导签字认可。这样当某个销售人员跑到你的办公室并试图迫使你就范的时候,就可以把这份由他们头儿签字的文件摔在他脸上,让他滚蛋。