简单原理,就是字面的意思,系统越简单越好。复杂问题简单化,很难;简单问题复杂化,很容易。
简化问题至少有如下方法:借用、取舍、拆分、分类、分工、模式与学习、规范 。
借用是站在巨人的肩上。“欲穷千里目,更上一层楼”。遇到问题,先不急着动手,先思考、查阅记录,看以前是否遇到相同或接近的问题,直接复用或借鉴。以前,我和500年接到一个流程图的小项目,500年奋战几天没能解决,半年后发现BCG有现成的功能。如果没有可复用或借鉴,查阅团队文档和第三方文档。
取舍。抓住主要矛盾,忽略次要矛盾。常见反例:某程序员鏖战几周,让某个模块性能提升200%,但此模块不是瓶颈模块,所以整个系统的性能没有提升。
拆分。好处有二:部分拆分后的子任务,可以直接借鉴,这将大幅降低成本。二,复杂度大幅降低。忽略模块间的通信,1个500行的模块比5个100行的模块复杂得多。
分工。让每位员工遇到同类问题的几率大幅升高,多次遇到的问题简单得多。
模式和学习。通过学习可以降低问题的难度。有效学习的四个要素:一,明确的目标。“看1小时的书“不是明确的目标。“用C#完成最简单的同步事件”是明确的目标。二,专注与发散相结合。专注高效,但没有发散性。发散容易产生灵感、顿悟。三,有效、及时的反馈。比如:老师阅卷、AI阅卷、同行切磋。四,在拉伸区练习。如果感觉枯燥,提升难度;如果感觉焦虑,降低难度。
如果有合适的规范,可以避免许多前人踩过的坑。
不同阶段,主要目标不同:需求分析阶段重点在拆分需求,设计阶段重点在模块划分,编码阶段重点在可理解性。