程序的大小,包括代码大小和内存占用的大小。
程序的空间开销,即其占用的内存大小,是衡量软件成本的重要因素之一。在早期的计算机系统中,内存资源非常宝贵,因此程序的大小直接影响到其运行效率及成本。
例如, IBM APL 交互式软件系统,它的租金为每月 400 美金,在使用时,它至少占用 160K 字节的内存。在 Model 165 上,内存租金大约是 12 美金/每月每千字节。如果程序在全部时间内都可用,他 需要支付 400 美元的软件使用费和 1920 美金的内存租用费。
规模控制
对于软件开发者而言,控制程序规模不仅是一项技术挑战,也是管理上的难题。设定软件规模,并将其分解为多个子模块,为每个模块设定规模目标。在控制规模的过程中,需要注意几个关键点:
-
不仅要设定核心程序的规模目标,还要考虑整体规模,包括后台存储访问等;
-
清晰定义模块功能边界,防止功能漂移导致规模膨胀;
-
保持全局视角,鼓励团队成员从用户角度出发,关注系统整体而非局部优化。
空间技能
空间预算的多少和控制并不能使程序规模减小,为实现这一目标,它还需要一些创造性和技能。
1、功能换尺寸:通过提供不同的功能组合选项,允许用户根据需要选择合适的软件配置;
当一系列特定选项被整合成一个功能包时,所需的程序空间会比各自独立存在的时候要少。这一理念与选购汽车配件相似:如果将照明灯、点烟器与时钟打包作为一个整体配件销售,其总价通常会低于分别购买这些配件的成本总和。因此,程序设计人员需要精心策划用户可选功能的颗粒度,以便既能满足个性化需求,又能有效控制软件的体积与成本。
2、空间-时间折衷:合理利用内存空间,以换取更好的运行性能;
首先,重视团队成员的专业技能培训,而不只是依靠他们现有的知识与过往经验。尤其是在引入新的编程语言或平台时,系统的培训计划尤为重要。
其次,认识到编程是一项累积性的活动,开发过程中需要构建大量的通用组件。构建一套完整的公共单元,标准例程或宏库。针对每一项具体功能,建议至少准备两种实现方案:一种注重执行效率,另一种则追求简洁性和易读性。
数据的表现形式是编程的根本
创造出自精湛的技艺,精炼、充分和快速的程序也是如此。技艺改进的结果往往是战略上的突破,而不仅仅是技巧上的提高。这种战略上突破有时是一种新的算法,如快速傅立叶变换,或者是将比较算法的复杂度从 n^2降低到 n log n。
战略上突破常来自数据或表的重新表达——这是程序的核心所在。如果
提供了程序流程图,而没有表数据,我仍然会很迷惑。而给我看表数据,往往就不再需要流程图,程序结构是非常清晰的。