模式修练的第一个阶段:死记硬套,总有把新学的模式硬塞到实际的设计和代码中的冲动,尽管实际场景可能并不太适合用这个模式,甚至根本就不需要用。这个阶段有点类似“少年不识愁滋味,爱上层楼。爱上层楼,为赋新词强说愁”。
第二个阶段:从背景出发,针对特定的上下文,从几个备选的模式中选择最合适的一个或多个。这个阶段,模式的利弊取舍已经有所了悟,但依然纠结于模式间的微妙差别,有时会举棋不定,甚至悔棋不倦。有点”江阔云低,断雁叫西风”般的茫然。纵然江阔,却独见断雁,颇有“一叶蔽目,不见泰山”。
第三个阶段:模式已经化于无形,不再执着于模式,而是着眼于设计原则和方法,如CVA,自然而然推导出模式。这个阶段更多是“而今识尽愁滋味,欲语还休”般的领悟与超然。
金庸大侠笔下《神雕侠侣》中关于独孤求败的剑法四境界的描述可与此互相启发:
独孤求败剑冢里藏有四把剑,每把代表一境界:
1.青剑凌厉刚猛,无坚不摧,弱冠前以之与河朔群雄争锋。
2.紫薇软剑三十岁前所用,误伤义士不祥,乃弃之深谷。
3.重剑无锋,大巧不工。四十岁前恃之横行天下。
4.四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。
说了这么多,如何学习呢?我把我的学习经验贴出来,抛砖引玉,大家说说自己的学习方法或者感悟。
我的学习之路一开始犹如社甫诗云:“读书破万卷,下笔如有神”。通俗点的就像我师傅说的“像看小说一样看各种软件书籍,多看多想,终有融会贯通的一天”。当我乐此不疲的通过书跟多位大师神侃一番后,发现也不尽然。我时常记住了最近Bob大叔的身教,却掉了上周Martin Fowler的言传。总觉得学得不太牢靠。
原来读万卷书,还得行万里路。于是我更进一步,开始学以致用。如今回头一看,我原来站在一个极不对称的转换式的左边,以大量的阅读和实践为代价,期许得到右边的一点点灵光乍现。偶尔闪耀的星光不一会儿便淹没在不舍昼夜的涛涛江水中。
深陷于第二阶段沼泽的我,总以子曾经曰过自勉:“质胜文则野,文胜质则史”。第三阶段嘛,并不比第二阶段强多少。你觉得呢?