代码规范的作用


项目代码要有编码规范,目的是为了在一个项目中,更好的促进不同类型的开发人员之间的合作,中后期的代码优化,以及运维阶段的维护工作。

语言提供的能力是丰富的,低维度的,可供多重组合的。对于Java语言来说,Java的语言设计者最初将一些特性舍弃掉,比如典型的运算符重载,多继承,函数指针(现在有了一个保守的lambda),typedef,默认参数等,其目的之一就是为了的避免开发人员在开发过程中乱用语言提供的能力,避免造成更多问题,某种程度上说也在从语言层面制定编码规范。但是即使是这样,项目中多个开发人员编写的代码风格也是差别巨大的,因为每个开发人员的思维方式,看待问题的习惯,看待系统的视角,以及解决问题的手法都是不尽相同的,所以即使语言能力再弱,语言特性再少,还是会出现多种“符合语法规则”的语句组合。另外,开发一个应用程序,不仅是使用语言本身,而是一个整套的技术栈,辐射的范围是整个系统,所以如果没有一个约束来规范开发过程,诸如规范使用Java、SQL、缓存、以及其他框架,那么不同的开发人员之间的合作是困难的。对于架构设计合理,模块和任务拆分清晰的系统开发过程,开发的前期,问题体现的不明显,但对于一个组织而言,人员调动是不可避免的,当新加入的开发人员接手代码,或现有项目开发人员接手另一个模块,有代码规范,将产生很大的积极影响,对于后期的代码优化和代码维护,也是同样道理,这里要强调的是,个人或小规模学习类型的项目和一个商业化的工程性质的项目,在高效性、结构性、管理性等维度上,是完全不同的。

雷军有一篇文章,说程序员既像石匠又像艺术家,但是文章没有完全说明程序员和这两种职业的共同属性。石匠是一个按照一定的技术规范,按照预定设计完成作品的过程,越是大型的石刻,越要严谨的按照标准执行工作,最终达成整体的石刻艺术效果,说程序员像艺术家也是有道理的,因为艺术家的本质工作,是创造,比如画家,音乐家,根据客观条件,创造一幅画或一首乐曲,而程序员的工作,本质上也是创造,只不过产品不同,项目不同,创造的背景是不一样的。

那么什么时候是艺术家,什么时候是石匠呢。在一个大型项目中,会遇到若干问题,每一个问题的解决过程,都是创造的过程,我们需要将问题抽象或建模,设计和分解,在图灵机世界中编码实现,这时体现出来的,是程序员最像一个艺术家,因为这个过程的本质,是把一个抽象思维的虚拟事物,变成了现实事物的过程,而艺术水平的高低,是取决于抽象思维水平。如果把画家作画看成阐述艺术思想和意境的话,那么程序员编码的过程,就是在阐述问题域解决方案的抽象思维,以此为目的,那么说明编码越清晰,越简洁,越能表达抽象思维的,就越成功,这时,程序员就是石匠。工匠水平的高低,取决于写出的代码的表达力。

如果熟悉Lisp就会知道,Lisp是表达抽象能力最出色的,除去它作为一门函数式语言和动态语言之外的因素,它简洁和简单的语法规则是一个重要原因,Lisp的语法比Java简单得多了,Lisp语言的重点是抽象思维,递归和函数式,与Java舍弃语言特性,而产生的约束效果不同,Lisp语言语法简洁,能力却异常强大,可能连最初的语言设计者都没有想到,关键词,简洁而强大。还有一门值得说的语言是Scala,它是开发Spark的语言,混合范式,这是堪称复杂度‘媲美’C++的语言,特性很多,非常强大,类型系统的复杂度被证明本身就是图灵完备的,使用Scala可以作为Better Java,也可以作为高级的混合范式编程语言,语言能力强,所以使用场景跨度很大,虽然可以用它写出简洁的代码,接近Lisp那样的效果,但是同样可以写出外星人代码,因为语言本身的特性很多,如果一个团队使用Scala开发项目,而没有一定的代码约束和规范,可能产生陡峭的代码复杂度,关键词,控制项目复杂度。所以,编码作为表达抽象思维的过程,越简洁和简单,越贴近思维方式越好,编码规范不会干扰程序员做正确的事情,不会阻碍开发优秀的代码,它反而是一种明智的指导手册,让开发人员聚焦问题,而非过多关注语言、框架、或合作性问题,严谨的按照编码规范编程,以达到整体的项目开发目标,这时要发挥的就是工匠精神。一般情况下,编码规范都是倾向于把代码和设计简单化的,所以,按照一定的编码约束编程,写出清晰的,优雅的代码,让其他人很容易看清你的思维方式,能更好的体现一个编程人员的编程能力和创造力,也能体现出对代码的驾驭能力。