做最好的架构-范式和总结

武侠中的境界

《射雕英雄传》郭靖的父亲资质不高,曾说道,人一生精力是有限的,学的太多往往分心,哪样都学不好。郭靖遗传了父亲的资质和世界观,在洪七公教郭靖降龙十八掌时,也对洪七公说道,降龙十八掌很厉害,能把一样练好就行了,这句话还受到了洪七公的赞赏。不过资质平平的郭靖最终成为屈指可数的高手,真的是因为专心学习一样高深的武学么?

事实却恰恰相反,郭靖武功大进是在桃花岛山洞,周伯通教授九阴真经开始,九阴真经中的武功包罗万象,如九阴白骨抓,移魂大法,大伏魔拳法,易筋锻骨等等,每种武学实际都有很大差别。后周伯通又教授了空明拳,左右互博,在洪七公、欧阳锋和黄药师比拼音律的时候又学习攻守进退之法,又经常与裘千仞欧阳锋等过招比拼,后又受一灯大师指点,内外精修方才窥视武学至高境界,成为旷世高手。

不过郭靖资质平平,武学也就止于此,而杨过则更进一步,机缘下学习了林朝英和王重阳的武功,后学习了部分九阴真经,还有从小学习的蛤蟆功,后来又学了打狗棒法和东邪黄药师的武功,最后又在神雕帮助下学习了独孤求败的武学。基本上学全了当时最厉害的武学,集大成后创了黯然销魂掌,三拳五脚便干掉了老顽童等三人合力拿下的金轮法王。

金庸武学中,要想窥视武学的最高境界,必须在机缘下学习很多不同的武学,相互印证,至少也需要不断跟其他高手过招。反观天下第一的王重阳教出的徒弟,虽然不至于很弱,但难以成为高手,归根结底还是因为只学习重阳宫一种武学。再看少林寺,一直成为武林至尊,在于少林本身一派就有很强的七十二种绝技,所谓他山之石可以攻玉,虽然练成多种的人很少,却能做一些参考。但七十二种每一种都不是当时顶尖的武学,所以少林靠自身的武功一直没有绝顶的高手。

总结一下,要想成为一个高手,当然至少需要精通一门顶级的武学,另外还需要不断涉猎至少是需要了解其他顶级的武学,了解越多,才能相互印证自身的武学,眼界才能更上一层楼。

一专多长

放到编程领域,同样需要如此。从最基本的编程语言来讲,经常在一些人简历上看到各种语言学全了,其实往往哪个都没学好,就好比爬山,一个山头爬了一半,根本不知道山顶的样子,也不知道其他山有多高,再去爬其他的山,爬了一半也以为到顶了;另外,如果精通一门语言,可以说是一个好的程序员,但如果想更进一步,还需要了解其他语言的优缺点。有一门自身喜爱并精通的语言,又可以了然其他语言的设计原则,像 lisp,erlang 等很有特色的语言,虽然不一定会用,有所了解往往能开阔自身眼界,用自己熟悉的语言时,理解会更深。

又比如设计一个业务的存储系统,可能比较精通公司用的某一种很出色的存储,再去写新的存储时,当然不会写的太差,但未必会成为当时这种情况下最合适的存储。可能会有其他设计迥异但又很合适的方案,只因为自己没有见过,很难想出,即使想出来,也不如别人经过若干年的检验来的细致。

程序代码的设计更是如此,GOF 总结了 23 种设计模式,就是为了使我们更快速的了解前人不同场景下合理的设计,不过也就常说的那句话,没有写过或者维护过类似的系统,是无法很好的理解设计模式的,每种模式背后都有大量的故事,总结这 23 种模式的人是牛人,学习这 23 种模式的人未必会成为牛人,其实设计模式远远不止 23 种,何止成千上万种,大量的模式需要在实践中慢慢摸索学习,不过同样的,当对某一种或者几种模式有了深刻的理解和教训,再去看其他模式,多少也能理解更加深入。

所以,不论做哪方面设计,精通一种出色的设计是必须的,但同时需要尽可能了解更多更出色的设计,这样再遇到新的挑战时才能自然而然相处最合适的方案。

范式

引用 百度百科 解释:范式(paradigm)的概念和理论是美国著名科学哲学家托马斯·库恩 (Thomas,Kuhn) 提出并在《科学革命的结构》(The Structure of Scientific Revolutions)(1962)中系统阐述的,它指的是一个共同体成员所共享的信仰、价值、技术等等的集合。指常规科学所赖以运作的理论基础和实践规范,是从事某一科学的研究者群体所共同遵从的世界观和行为方式。

这个定义说的也很清楚,范式就是成熟的一些套路,遵循这些套路便能做出不错的设计,这也是走向好的架构必经的节点。比如存储设计,有如 MySQL 这种使用 B+ 树的模式,也有 leveldb 这种 LSM tree 的模式,还有 Redis 这种 Hash+dump 的方式。每种设计又有通用或者特有的一些防止数据丢失和修复的操作。精通其中之一可能会很好的完成一个新的存储设计,但同时了解其他范式,则能更加合理和全面的做出更符合需要的设计,而且通过相互之间的对比,会加深对设计的理解。

世界观和方法论

虽说,熟读唐诗三百首,不会作诗也会吟,当了解领域内的不同设计范式以后,还可以更进一步,归纳总结不同设计的特点,抽象自身的世界观和方法论,甚至设计更好的方案。其实世界观和方法论总体来讲比较虚,有点形而上学的意思。

学习的境界就好比佛家三境界,看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水。就拿设计模式举例,设计模式背后的世界观和方法论就是几种设计原则,初学者看这些原则的时候,往往觉得很容易理解,这就看山是山的境界;当深入的学习设计的模式和原理以后,会发现这几种原则不是那么简单,每个都蕴含着千万的道理在其中,这就是看山不是山的境界;再学到后来,各种设计模式融会贯通,建立自己的世界观和方法论,发现其实设计也就这几种原理,无需什么模式便能做出优秀的设计,这就是看山还是山的境界了。

学习的路径很漫长,但归根结底就是学习前人的范式,总结自己的方法论,先继承,再创新。

Built with Hugo
主题 StackJimmy 设计