乐观主义

来源:互联网 发布:量子编程 编辑:程序博客网 时间:2024/06/06 20:39
 
乐观主义
所有的编程人员都是乐观主义者。可能是这种现代魔术特别吸引那些相信美满结局的
人;也可能是成百上千琐碎的挫折赶走了大多数人,只剩下了那些习惯上只关注结果的人;
还可能仅仅因为计算机还很年轻,程序员更加年轻,而年轻人总是些乐观主义者——无论是
什么样的程序,结果是勿庸置疑的:“这次它肯定会运行。”或者“我刚刚找出了最后一个错
误。”
所以系统编程的进度安排背后的第一个假设是:一切都将运作良好,每一项任务仅花
费它所“应该”花费的时间。
对这种弥漫在编程人员中的乐观主义,理应受到慎重的分析。Dorothy Sayers 在她的
“The Mind of the Maker”一书中,将创造性活动分为三个阶段:构思、实现和交流。书
籍、计算机、或者程序的出现,首先是作为一个构思或模型出现在作者的脑海中,它与时间
和空间无关。接着,借助钢笔、墨水和纸,或者电线、硅片和铁氧体,在现实的时间和空间
中实现它们。然后,当某人阅读书本、使用计算机和运行程序的时候,他与作者的思想相互
沟通,从而创作过程得以结束。
以上 Sayers 的阐述不仅仅可以描绘人类的创造性活动,而且类似于“基督的教义”,
能指导我们的日常工作。对于创造者,只有在实现的过程中,才能发现我们构思的不完整性
和不一致性。因此,对于理论家而言,书写、试验以及“工作实现”是非常基本和必要的。
在许多创造性活动中,往往很难掌握活动实施的介质,例如木头切割、油漆、电器安
装等。这些介质的物理约束限制了思路的表达,它们同样对实现造成了许多预料之外的困难。
由于物理介质和思路中隐含的不完善性,实际实现起来需要花费大量的时间和汗水。
对遇到的大部分实现上的困难,我们总是倾向于去责怪那些物理介质,因为它们不顺应“我
们”设定的思路。其实,这只不过是我们的骄傲使判断带上了主观主义色彩。
然而,计算机编程基于十分容易掌握的介质,编程人员通过非常纯粹的思维活动——
概念以及灵活的表现形式来开发程序。正由于介质的易于驾驭,我们期待在实现过程中不会
碰到困难,因此造成了乐观主义的弥漫。而我们的构思是有缺陷的,因此总会有 bug。也就
是说,我们的乐观主义并不应该是理所应当的。
在单个的任务中,“一切都将运转正常”的假设在时间进度上具有可实现性。因为所遇
的延迟是一个概率分布曲线,“不会延迟”仅具有有限的概率,所以现实情况可能会像计划
安排的那样顺利。然而大型的编程工作,或多或少包含了很多任务,某些任务间还具有前后
的次序,从而一切正常的概率变得非常小,甚至接近于无。
完美,所以人类对它本来就不习惯。)实际上,我认为学习编程的最困难部分,是将做事的
方式往追求完美的方向调整。
其次,是由他人来设定目标,供给资源,提供信息。编程人员很少能控制工作环境和
工作目标。用管理的术语来说,个人的权威和他所承担的责任是不相配的。不过,似乎在所
有的领域中,对要完成的工作,很少能提供与责任相一致的正式权威。而现实情况中,实际
(相对于正式)的权威来自于每次任务的完成。
对于系统编程人员而言,对其他人的依赖是一件非常痛苦的事情。他依靠其他人的程
序,而往往这些程序设计得并不合理,实现拙劣,发布不完整(没有源代码或测试用例),
或者文档记录得很糟。所以,系统编程人员不得不花费时间去研究和修改,而它们在理想情
况下本应该是可靠完整的。
下一个烦恼——概念性设计是有趣的,但寻找琐碎的 bug 却只是一项重复性的活动。
伴随着创造性活动的,往往是枯燥沉闷的时间和艰苦的劳动。程序编制工作也不例外。
另外,人们发现调试和查错往往是线性收敛的,或者更糟糕的是,具有二次方的复杂
度。结果,测试一拖再拖,寻找最后一个错误比第一个错误将花费更多的时间。
最后一个苦恼,有时也是一种无奈——当投入了大量辛苦的劳动,产品在即将完成或
者终于完成的时候,却已显得陈旧过时。可能是同事和竞争对手已在追逐新的、更好的构思;
也许替代方案不仅仅是在构思,而且已经在安排了。
现实情况比上面所说的通常要好一些。当产品开发完成时,更优秀的新产品通常还不
能投入使用,而仅仅是为大家谈论而已。另外,它同样需要数月的开发时间。事实上,只有
实际需要时,才会用到最新的设想,因为所实现的系统已经能满足要求,体现了回报。
诚然,产品开发所基于的技术在不断地进步。一旦设计被冻结,在概念上就已经开始
陈旧了。不过,实际产品需要一步一步按阶段实现。实现落后与否的判断应根据其它已有的
系统,而不是未实现的概念。因此,我们所面临的挑战和任务是在现有的时间和有效的资源
范围内,寻找解决实际问题的切实可行方案。
这,就是编程。一个许多人痛苦挣扎的焦油坑以及一种乐趣和苦恼共存的创造性活动。
对于许多人而言,其中的乐趣远大于苦恼。
原创粉丝点击