《系统架构》读后感摘抄( 三 )


实际复杂度:实际实现功能时的复杂度;
表面复杂度:看上去的复杂程度 。
比如 , 我们为汽车选择动力系统的时候 , 可以是纯内燃机(自然吸气 , 涡轮增压等)、纯电动和混动 , 如果只是为了能让车动起来 , 那么是存在一个最小复杂度的动力系统 , 这就是必要复杂度;而我们实际开发和设计动力系统 , 因为存在一些不够优化的设计 , 导致实际复杂度高于必要复杂度 , 表面复杂度和前两种常常是相反的 , 因为表面复杂度是人们常常接触到的复杂度 , 为了提高人们的使用界面的简洁 , 常常背后是异常复杂的 , 比如苹果手机 , 我们使用时很简单 , 小孩不用教都能学会 , 但是背后需要复杂的系统支撑 。
还有一个工作中常见的现象 , 就是在沟通中 , 呈现同样的问题和信息 , 有的人只需要用1页PPT就能把问题讲的清晰明了 , 而有的人可能用了几十页 , 还是让人一头雾水 。为什么?我的观察是 , 1页纸看上去很简洁清晰 , 但是背后可能进行大量的整理和思考 , 将复杂化留给了自己;而后面的几十页 , 看似做了很多工作 , 但只是大量信息的堆砌 , 将复杂的处理留给了听众 。
复杂是难以避免的 , 但我们的认知有限 , 所以 , 需要在复杂和难懂之间做平衡 。正如《系统架构》中提到:好的系统架构就是具备必要复杂度 , 同时又不难懂的系统 。有什么好用的工具?分解 。
3 如何分解?
3.1分解方向
分解的时候通常有两个不同的方向:上下和内外 。上下分解有可以分为自顶向向下和自底向上 , 最典型的就是产品开发中的V字型开发 , 从整体分解到部件 , 再从部件组装为整体 。
内外 , 就是从内到外 , 或者从外到内 , 最典型的就是中国人的关系——由亲到疏 , 以及我们常说的“修齐治平” , 当然这两种分解分解方向也可以交替使用 。
3.2二下一上
这是《系统架构》中提到的一种重要的分解原则:
如果要判断Level1分解是否合适 , 必须深入到Level2中 。
这里把Level0看成是将要被分解的整体 , Level1是分解后的第一级 , Level1是分解后的第二级 。为什么这个原则重要?因为分解后 , 如果能够让组内的元素耦合度比较高 , 而组之间的耦合度低 , 有利于模块化 , 并减低沟通成本 , 而Level1分组所需要的信息 , 包含在Level2的互动中 。