自知篇第六
夫智者见于未萌,愚者暗于成事。故知己之害而图彼之利者,胜。知
可以战不可以战者,胜。识众寡之用者,胜。以虞待不虞者,胜。以逸待
劳者,胜。不战而屈人者,胜。《老子》曰﹕“自知者明。”
夫智者见于未萌,愚者暗于成事。
富于智慧的人,在事物发生前就能看出动向,愚昧的人,即使事情已经完成也不明白其中的道理。设计是为了未来做提前的预备,所以有效地设计离不开准确的预测。智慧和愚昧的区别在哪里?不在天分,不在于智商,只是日常点滴工作的心态和习惯,日积月累下来,所导致的差距是非常巨大的。
故知己之害而图彼之利者,胜。
任何项目都有方方面面的困难,不可尽数,了解当前的急所,需要决断力。如果一眼望去,满目尽是困难,却找不到最关键的问题,那么何从下手?
是不是所有的东西都要在架构上加以考虑呢?那些过于长远的需求变化,那些过于超出团队理解能力的酷炫的设计工具、设计理念,那些现在设计的成本高于未来再修改成本的方案,与其战不如不战。好的架构师不仅懂技术,更要懂产品、懂团队、懂成本。
识众寡之用者,胜。
同样的问题,放在不同规模的代码下,放在不同大小的团队中,放在不同性质的项目里,架构是否一样?
以虞待不虞者,胜。
其实做任何事情都一样,事前做好充分的准备,并随时做合理的调整,对于结果不要太有得失心。充分的准备并不一定保证你获得好的结果,但我们依然要做。看重过程,而不是看重单次的结果——因为再好的过程也可能会偶尔失利,但从长远来统计,好的过程总体上必然导致更好的结果。
以逸待劳者,胜。
到底做出一个好的设计辛不辛苦?累不累?一个常见的现象,追求进度,不仔细考虑设计,直奔代码,那么后期测试、修复问题非常痛苦,让人精疲力尽。另一个现象,追求完美的设计,前期花费大量时间,导致进度落后,只能加班,而一旦需求变化,却发现原先完美的设计不能适应,天翻地覆地一通大改,结果原先完美的设计也烂了。这两个看起来殊途同归,其实喻示着对于设计能力不足的人来说,无论是进行设计还是不进行设计,做软件都是一个痛苦并且没有成就的过程。世上本没有完美的设计,所谓完美的设计是根据当前人员、时间、问题,做出的最佳平衡,它可能远称不上完美。对于实际项目来说,设计方案好不好,也只有一个评判标准,那就是能否使得项目的整体工作量最小化。显而易见,仅仅考虑技术无法做出最佳平衡,也无法实现整体最小化。当然,要做一个优秀的方案,累也是很难避免的,但这个累是最佳平衡下的累,是保障项目成功的最小工作量,并且累过了之后有成就感。
不战而屈人者,胜。
不战而屈人,是最高境界。软件设计也要追求这个境界。比如说,指针灵活强大,但容易出错,与其投入巨大精力去确保指针正确使用,不如在设计上就尽量避免指针的使用,如果一个方案能同样满足需求,又不使用指针,那么这个方案就非常有价值。