重读《人月神话》(10)-削足适履(Ten Pounds in a Five-Pound Sack)

程序的大小,包括代码大小和内存占用的大小。

程序的空间开销,即其占用的内存大小,是衡量软件成本的重要因素之一。在早期的计算机系统中,内存资源非常宝贵,因此程序的大小直接影响到其运行效率及成本。

例如, IBM APL 交互式软件系统,它的租金为每月 400 美金,在使用时,它至少占用 160K 字节的内存。在 Model 165 上,内存租金大约是 12 美金/每月每千字节。如果程序在全部时间内都可用,他 需要支付 400 美元的软件使用费和 1920 美金的内存租用费。

规模控制

对于软件开发者而言,控制程序规模不仅是一项技术挑战,也是管理上的难题。设定软件规模,并将其分解为多个子模块,为每个模块设定规模目标。在控制规模的过程中,需要注意几个关键点:

  1. 不仅要设定核心程序的规模目标,还要考虑整体规模,包括后台存储访问等;

  2. 清晰定义模块功能边界,防止功能漂移导致规模膨胀;

  3. 保持全局视角,鼓励团队成员从用户角度出发,关注系统整体而非局部优化。

空间技能

空间预算的多少和控制并不能使程序规模减小,为实现这一目标,它还需要一些创造性和技能。

1、功能换尺寸:通过提供不同的功能组合选项,允许用户根据需要选择合适的软件配置;

当一系列特定选项被整合成一个功能包时,所需的程序空间会比各自独立存在的时候要少。这一理念与选购汽车配件相似:如果将照明灯、点烟器与时钟打包作为一个整体配件销售,其总价通常会低于分别购买这些配件的成本总和。因此,程序设计人员需要精心策划用户可选功能的颗粒度,以便既能满足个性化需求,又能有效控制软件的体积与成本。

2、空间-时间折衷:合理利用内存空间,以换取更好的运行性能;

首先,重视团队成员的专业技能培训,而不只是依靠他们现有的知识与过往经验。尤其是在引入新的编程语言或平台时,系统的培训计划尤为重要。

其次,认识到编程是一项累积性的活动,开发过程中需要构建大量的通用组件。构建一套完整的公共单元,标准例程或宏库。针对每一项具体功能,建议至少准备两种实现方案:一种注重执行效率,另一种则追求简洁性和易读性。

数据的表现形式是编程的根本

创造出自精湛的技艺,精炼、充分和快速的程序也是如此。技艺改进的结果往往是战略上的突破,而不仅仅是技巧上的提高。这种战略上突破有时是一种新的算法,如快速傅立叶变换,或者是将比较算法的复杂度从 n^2降低到 n log n。


战略上突破常来自数据或表的重新表达——这是程序的核心所在。如果
提供了程序流程图,而没有表数据,我仍然会很迷惑。而给我看表数据,往往就不再需要流程图,程序结构是非常清晰的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

和码说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值