对于编码,有些人把它看的太简单.或者有些人根本就没意识到编码还应该有一定的章法.不少人在编码实现自己的逻辑算法的时候,率意而为,以为自己能够掌控代码的全局,写出既简洁又优雅,完美表达自己思想的代码.这样想的人,往往最终都被编码实现折腾的死气沉沉,心中充满了挫败感.这样的现象,有时候表现在不知道自己思想的重心,去写辅助性的代码,结果在后面才发现自己思想的实现根本就用不到自己花了大力气写好的边角料代码.另外一些,表现在代码在最终组合实现自己思想的时候,发现要完成这样的任务简直就是不可能!为什么?因为为了组合这些零碎,飘忽的代码,自己不得不写大量的glue来组合所有的功能.当然有毅力的coder不在少数,最终终于完成了所有的粘合编码.结果,自己再一次审视自己代码的结构,发现自己写的代码是那么的丑陋!自己却在百思不得其解的自问:组合之前单个代码片段看起来没那么丑陋啊,怎么现在看起来古里古怪的?这样写出来的代码系统,的确是表达了自己的思想,但是看起来就像是一栋房子全部是用胶水粘出来那么奇怪,摇摇欲坠.
我想,大量的难看的代码就是这么来的.我想肯定的是,每个人,每个团队在一开始编码之前都是知道自己要实现什么样的逻辑算法思想的.这是最重要的最核心的部分.然而,在编码实现的时候不少人就又会晕头晕脑的不知道自己在写什么了.我清楚的知道这样迷糊着去写的人都是太关注于现实了,太急切于要实现具体的功能.然后,他就会在脑袋里面想:要实现这个功能,我需要拆成a,b,c三个子功能,要实现a子功能,我还要拆成e,d,f几个子功能...如此下去,直到不能再拆为止.然后,他就开始写最后不能拆了的原子功能.这样做的人对自己的分析能力是绝对的自信,结果自信过头了.自己根本没把握到思想的核心,反而像无头苍蝇一般挑一个原子功能就写.最后写出来的代码还能用还真是奇迹了.
我看来思想的编码实现,必须逐步求精,分层细化.一开始是绝对不能写最原子化的代码片段的.不这样做的后果前面已经提到了,如果你不介意,那请自便.现在就归结到如何逐步求精,分层细化.其实说白了就是自顶而下的编码.把编码想象成一棵树.根节点就是最核心的最抽象的逻辑算法思想.它应该是在你大脑里面已经有了的.从根节点往下细分,第一层会有分支节点也可能会有叶子节点.这个时候叶子节点是可以开始编码实现的,而对于分支节点,则需要进行抽象.对这一层完成抽象和叶子节点的编码后,对这一层的分支节点的抽象和叶子节点的具体实现来进行组合,完成对父节点(对于第一层是根节点)的逻辑实现.当然这个时候肯定不能实际运行的.每一层都这样对分支节点抽象和对叶子节点实现,再进行组合,完成对父节点的逻辑实现.最终,到最后一层完成对父节点的逻辑实现后,整个代码系统就完成了对核心的思想算法(根节点)进行了实现.这样子讲,估计很多人会不明白我说的什么.
这棵树根节点A就是你想实现的逻辑算法.那么在第一次自顶向下的分层细化时候,只有两个抽象的B,C逻辑算法.这个时候再对B细化求精,得到另一个抽象D和一个具体实现.在这个时候就可以编码具体实现了.可能还会有人不明白怎么算是抽象.只写声明不写实现就算是抽象了.每一层都不要忘了把抽象和实现进行组装来完成对父节点的抽象实现.如此编码,得到的最终结果,必定是设计优良,牢固可靠的对逻辑思想算法完整表达的软件系统.比之随意妄为的编码,好了不少.