在每个项目的起点,我都会以项目组长的身份,旗帜鲜明地、不容置疑地,把我的代码完美主义倾向告知我的组员们。这意味着日后,当各组员把他们自己完成的代码块汇总到我身上时,我会用相当挑剔的眼光去检验这些代码的质量。只有那些达到我心目中的优雅标准的代码,才算合格,可被接纳。其余的一概打回头,没有商量的余地。
究竟什么是优雅的代码呢?这得先由历史说起。我大概是在四、五年前接触到这种说法的(具体出自谁人之口,就没法考究了),当时不以为然,认为不过是骨灰级coder或者职业撰书人的玩物而已。后来随着自己的代码积累量呈几何级数上升,渐渐也悟出了一些代码质量与可持续发展方面的大道理。我有了一种模糊的认识,觉得好看的代码能带来好心情,好心情反过来又会产生好看的代码,两者相辅相成。到后来,当我再次看到优雅一词时,我便确信,这其实就是我要追求的境界,这就是我的“好看”的定义。
怎样才算优雅——最感性的定义是,如果一段代码能让人越看越喜欢,那么它就能称得上优雅。相反,那些让人一看就讨厌,一看就着急,一看就沉不住气的代码,就谈不上优雅。再具体一点说,优雅的代码必须符合一些公认的业界通用标准(包括但不限于):
1、没有硬编码
2、同级对齐,下级缩进
3、以逗号加空格分隔参数列表
4、以空行分隔不同的逻辑块,同时杜绝无意义的空行
5、对象命名符合一定规则
6、类成员分类编排格式
8、所有资源可配置
9、绝不使用goto
10、……
上面这些是浅层次的优雅,深层次的优雅有(包括但不限于):
1、逻辑的实现不得冗余
2、接口有多于一个的具体实现
3、继承关系不多于8代(这一点估计有人不同意,呵呵)
4、方法的重载(overload)不得多于8个(这一点估计也有人不同意,哈哈)
5、所有可能的例外都被显式处理
6、不允许存在跨层的直接通路
7、常用业务对象可序列化
8、……
总结到这里,可能有资深coder会觉得不以为然,认为我说的这些未免肤浅。的确,我了解到在某些团队、某些圈子里有更深层次的优雅标准,在那些标准的约束下,优雅隐藏在一些一眼看上去看不出什么,但细细研读之下却会令人心悦诚服的代码里。我自认尚未达到那个境界,但我会努力接近。
按照我目前的这种优雅定义,我的组员们刚开始是不太理解的,有人认为在紧张的项目进度要求下,不应该过分追去完美。我也明白必须协调好完美主义与工期的矛盾,因此在可掌控的范围内,我只坚持在小组内推行适度的优雅标准。我会对有抵触情绪的组员开玩笑说,我们现在优雅地编码,是为了不让后人咒骂。我说的其实是实话,是经验之谈。身为coder,骂人骂得多了,难道不应该想想如何避免被人骂?
究竟什么是优雅的代码呢?这得先由历史说起。我大概是在四、五年前接触到这种说法的(具体出自谁人之口,就没法考究了),当时不以为然,认为不过是骨灰级coder或者职业撰书人的玩物而已。后来随着自己的代码积累量呈几何级数上升,渐渐也悟出了一些代码质量与可持续发展方面的大道理。我有了一种模糊的认识,觉得好看的代码能带来好心情,好心情反过来又会产生好看的代码,两者相辅相成。到后来,当我再次看到优雅一词时,我便确信,这其实就是我要追求的境界,这就是我的“好看”的定义。
怎样才算优雅——最感性的定义是,如果一段代码能让人越看越喜欢,那么它就能称得上优雅。相反,那些让人一看就讨厌,一看就着急,一看就沉不住气的代码,就谈不上优雅。再具体一点说,优雅的代码必须符合一些公认的业界通用标准(包括但不限于):
1、没有硬编码
2、同级对齐,下级缩进
3、以逗号加空格分隔参数列表
4、以空行分隔不同的逻辑块,同时杜绝无意义的空行
5、对象命名符合一定规则
6、类成员分类编排格式
8、所有资源可配置
9、绝不使用goto
10、……
上面这些是浅层次的优雅,深层次的优雅有(包括但不限于):
1、逻辑的实现不得冗余
2、接口有多于一个的具体实现
3、继承关系不多于8代(这一点估计有人不同意,呵呵)
4、方法的重载(overload)不得多于8个(这一点估计也有人不同意,哈哈)
5、所有可能的例外都被显式处理
6、不允许存在跨层的直接通路
7、常用业务对象可序列化
8、……
总结到这里,可能有资深coder会觉得不以为然,认为我说的这些未免肤浅。的确,我了解到在某些团队、某些圈子里有更深层次的优雅标准,在那些标准的约束下,优雅隐藏在一些一眼看上去看不出什么,但细细研读之下却会令人心悦诚服的代码里。我自认尚未达到那个境界,但我会努力接近。
按照我目前的这种优雅定义,我的组员们刚开始是不太理解的,有人认为在紧张的项目进度要求下,不应该过分追去完美。我也明白必须协调好完美主义与工期的矛盾,因此在可掌控的范围内,我只坚持在小组内推行适度的优雅标准。我会对有抵触情绪的组员开玩笑说,我们现在优雅地编码,是为了不让后人咒骂。我说的其实是实话,是经验之谈。身为coder,骂人骂得多了,难道不应该想想如何避免被人骂?


