前车之覆,后车之鉴

系统开发,表面上看起来好像没有任何一个单独的问题会导致困难,每个问题都能获得解决,但是当它们相互纠缠和累积在一起的时候,团队的行动就会变得越来越慢。

1. 编程系统产品

编程系统产品的演进

程序:本身是完整的,可以由作者在所开发的系统平台上运行。作为单个程序员生产率的评估标准。

编程产品:可以被任何人运行、测试、修复和扩展的程序。它可以在多种操作系统平台上运行,供多套数据使用。要成为通用的编程产品,程序必须按照普通认可的风格来编写,特别是输入的范围和形式必须广泛地适用于所有可以合理使用的基本算法。接着,对程序进行彻底测试,确保它的稳定和可靠性,使其值得信赖。必须准备、运行和记录详细的测试用例库,用来检查输入的边界和范围。此外,要将程序提升为程序产品,还需要有完备的文档,每个人都可以加以使用、修复和扩展。经验数据表明,相同功能的编程产品的成本,至少是已调试的程序的成本的3倍。

编程系统中的一个构件单元:在功能上能相互协作、具有规范的格式、可以进行交互的程序集合,并可以用来组装和搭建整个系统。要成为编程系统构件,程序必须按照一定的要求编制,使输入和输出在语法和语义上与精确定义的接口一致。同时程序还要符合预先定义的资源限制------内存空间、输入输出设备、计算机时间。最后,程序必须同其他系统构件单元一道,以任何能想象到的组合进行测试。由于测试用例会随着组合不断增加,所以测试的范围必须广泛。相同功能的编程系统构件的成本至少是独立程序的3倍。

编程系统产品的成本高达9倍,是真正有用的产品,是大多数系统开发的目标。

2. 编程的乐趣

这种快乐是一种创建事物的纯碎快乐。

这种快乐来自于开发对他人有用的东西。

快乐来自于整个过程体现出的一股强大的魅力------将相互啮合的零部件组装在一起,看到它们以精妙的方式运行着,并收到了预期的效果。

这种快乐是持续学习的快乐,它来自于这项工作的非重复特性。

这种快乐还来自于在易于驾驭的介质上工作。

编程的快乐在于它不仅满足了我们内心深处进行创造的渴望,而且还唤醒了每个人内心的情感。

3. 编程的苦恼

苦恼来自于追求完美。

苦恼来自由他人来设定目标、供给资源和提供信息。个人的权威和他所承担的责任是不相匹配的。不过,似乎在所有的领域中,对要完成的工作,很少能提供与责任相一致的正式权威。而现实情况中,实际(相对于形式)的权威来自于每次任务的完成。

对于系统编程人员而言,对其他人的依赖是一件非常痛苦的事情。

概念性设计是有趣的,但寻找琐碎的bug却是一项重复性的活动。

调试和查错往往是线性收敛的,或者更糟糕的是,具有二次方的复杂度。

当投入了大量辛苦的劳动,产品在即将完成或者终于完成的时候,却已显得陈旧过时。可能是同事和竞争对手已在追逐新的、更好的构思;也许替代方案不仅仅是在构思,而且已经在安排了。事实上,只有实际需要时,才会用到最新的设想,因为所实现的系统已经能满足要求,并体现了回报。

我们所面临的挑战和任务是在实际的进度和有效的资源范围内,寻找解决实际问题的切实可行方案。

发布了31 篇原创文章 · 获赞 3 · 访问量 2296

猜你喜欢

转载自blog.csdn.net/ccblogs/article/details/104689719