时间: 2021-07-17 15:27:59 | 作者:whitebob | 来源: 喜蛋文章网 | 编辑: admin | 阅读: 96次
读过《代码整洁之道》(Clean Code)的人对于 Uncle Bob 必定印象深刻。好的书来自于好的作者,往往影响深远,甚至会引领一系列书的起名(大雾),比如 Mayers 的Effective XXX 系列,Pietrek的 Undocumented XXX 系列等等。今天这本书是Bob大叔一系列著作中又一本硬核作品,值得反复研读。
我读书喜欢先读序和前言。很多人喜欢单刀直入,直接读正文,觉得序言前言都是废话。我原来也是如此,后来才发现不读是个大损失,甚至有的序言本身的价值高过很多章节(有多少读过滕王阁集中的诗,又有多少人知道滕王阁序呢)。
“软件架构学最关注的一个重点是组织结构(structure)。。。现实世界中的软件项目却。。像个大泥巴球(the big ball of mud)。。。所以我们必须特别注意,软件项目具有递归特性(recursive)和分形特征(fractal)。。。无论PPT中的参色方块多么好看、简单、有条理,它也无法代表一个软件的全部。然而,每个视图都是对的,它们往往并没有优劣之分。”
真理总是简单粗暴直接,每每在设计评审中看到PPT上的层级图,总是有一种似曾相识的乏味感。然而,常常这就是leader们眼中最有意义的部分。
“在设计软件架构的过程中,我们必须理解和遵守现实的约束条件。CPU性能、network 带宽很大程度上决定了系统的性能,Memory 大小、 Storage 空间也会大幅影响代码的设计野心。好的架构不仅要在某一特定时刻满足用户、开发者和所有者的需求,更要在一段时间内持续满足他们的后续需求。 ”
一个好的设计师像个称职的家庭主妇,应该不仅有做满汉全席的能力,也能在食材匮乏时煲出一锅美味的腊八粥,还得会量入为出,规划好一个星期乃至一个月的家庭食谱,当然,更重要的是得照顾到全家所有人的口味。
“系统的常规变更不应该成本高昂,不应该有难以决策的大型设计调整,更不应该单独立项推进,应该融入日常系统维护中完成。然而。。。我们怎么能未卜先知,降低未来变更成本呢?了解历史已经够难了,我们对现实的认知也不够可靠,预言未来就更难了。”
谁不想要这样的代码呢?它足够简洁,足够强大,易于理解,易于修改,易于拓展,同时有很好的鲁棒性。然而,计划赶不上变化,鲁棒性和灵活性天然存在矛盾。
“。。。一种观点,只有权威和刚性才能带来稳定。。。变更背后的需求应该被抑制。。。另一条路线则充满了大量投机性的通用设计。。。无穷无尽的参数。。。成篇累牍的无效代码。。。”
历史总是惊人的相似,人们总是在重复相同的错误。前者类似权威主义和一刀切,少量不合理的刚性规定导致难易适应新的变动,以及为了实现特定目的,不得不存在而且逐渐增多的越权特性。后者则是计划经济,大量的预设和无用的规定导致了体系冗繁,流程复杂,但是真正工作的时候,又难免发现意外情形。
“本书试图探索的是一条清洁路线。。。拥护软件的灵活多变性,将其作为系统的一级设计目标,同时也必须承认人类并不能全知全晓,但在信息不全的情况下,人类仍然能够做出优良的决策。。。需要用心,全神贯注,不停观察和思考,在原则知道下不断实践,虽然可能听起来很麻烦、很慢,但只要坚持走下去一定能够成功。”
Bob 大叔在前言中讲的更加简洁直白:
“我已经编程超过50年。。。我最意外的领悟是:软件架构的规则是相同的!计算机代码没有变化,软件架构的规则也就一直保持一致。”
全站搜索