软件设计原则与实践指南
1. 从驯服问题看软件设计
排序数据列表是一个典型的驯服问题,它具有以下特点:
- 问题陈述清晰:使用特定函数将列表按升序排序。
- 有明确的终止点:列表排序完成。
- 结果可客观评估:列表是否正确排序。
- 属于同类问题:整数排序、字符串排序、数据库记录排序等方法类似。
- 解决方案易尝试和放弃。
- 替代解决方案有限:基于比较的排序有已知算法和理论下限。
认识到软件问题大多具有一定的“棘手性”,会影响我们对设计问题的思考方式、解决大型模糊问题的设计方法,也让我们能坦然摒弃瀑布模型,去寻找适用于设计问题的统一启发式方法。
2. 软件设计过程的特点
2.1 混乱性
即便完全理解问题需求(即面对驯服问题),设计软件解决方案时通常也有诸多替代方案要考虑,而且在找到可行方案前往往会犯很多错误。随着对问题理解的加深,设计会不断变化,这看似混乱无序,但实则是在取得进展。
2.2 权衡与优先级
多数软件项目有时间限制,通常无法实现客户想要的所有功能。因此,需要确定在可用时间内为客户提供最多高优先级功能的子集,即对需求进行优先级排序,并在不同子集间进行权衡。
2.3 启发式
绝大多数项目没有一套一成不变的规则,如“先用技术 Y 设计组件 X,再用技术 W 设计组件 Z”。软件设计依靠设计师在职业生涯中积累的不断变化的启发式方法(经验法则)。优秀的设计师会随着时间积累更多启发式方法和模式,从而快速处理设计中的简单部分,直击问题的核心。最好的学习方式是向资深设计师学习这些启发式方法
超级会员免费看
订阅专栏 解锁全文
176万+

被折叠的 条评论
为什么被折叠?



