主要观点:讨论了三种软件复杂性的概念,包括 Hickey、Ousterhout 和 Tellman 的观点,并对它们进行了比较和分析。
关键信息:
- Hickey 认为简单具有单一性,如“one fold/braid, one role, one task, one concept, one dimension”,将“easy”与“simple”区分,强调简单的好处如易于理解、更改、调试和灵活,反对复杂性的观点包括“只能理解可理解的事物”“一次只能考虑少数事物”“相互交织的事物必须一起考虑”“复杂性破坏理解”等,通过表格展示了简单与复杂的对比。
- Ousterhout 认为复杂性是与软件系统结构相关的使系统难以理解和修改的东西,明显性是系统设计的重要目标,复杂性由依赖和模糊引起,有三种表现形式:变化放大、认知负荷和未知未知,依赖是基本的但应减少,模糊包括通用变量名、不明显的依赖等。
- Tellman 定义复杂性为“每个解释的总和,重点在于未来的解释,以比特为单位,但仅相对于受众的期望”,“解释”在具体和抽象意义上使用,还引入了“surprisal”“耦合”等概念,认为耦合有成本和收益。
重要细节: - Hickey 的定义被提出是客观的,Ousterhout 和 Tellman 的定义更具主观性,Tellman 的定义与 Ousterhout 的有相似之处但也有不同。
- Hickey 认为“组合”好,“交织”坏,但对其区分的阐述不够具体,Ousterhout 认为明显的依赖比不明显的好,Tellman 不赋予耦合内在的价值判断,而是将其视为工具。
- 在面对新工程师因代码复杂性而难以完成任务的情况时,Hickey 的观点提供的帮助有限,Ousterhout 的描述更清晰,Tellman 的观点提供了保留或放弃新员工的两种选择,并促使更好地明确能力底线。
总结:Tellman 关于复杂性的定义在与现实的契合度、人们对定义的共识以及对示例的测试性等方面表现较好,有助于更好地理解和讨论软件复杂性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。