现在的位置: 首页 > 综合 > 正文

项目那点儿事(九) —上上下下的享受[项目标准]之标准化的意义

2012年12月01日 ⁄ 综合 ⁄ 共 2826字 ⁄ 字号 评论关闭

       记得央视曾经播过一个记录片《复活的军团》,描写战国时期秦朝的军队的。我记得里面有一集说秦国的装备。秦国规定所有武器统一由兵工厂制造,所有武器都有统一标准。这估计是全球最早的标准化作战军队吧。

       如果你是战国非秦国的将军,要打仗了,军队集结完毕,你得到一张军队情况表:
       剑      长度:3.1-3.7尺
       长矛    长度:5-6.8尺
       弓箭    射程:50-200步。
       这个军队看你怎么指挥。你连有效攻击距离都把握不住。

       鬼子们(不仅仅是日本人)对标准化的认识很深。各种标准化组织如淋过狗尿的树根长小白蘑菇般遍地开花,像CMMI,PMI,ISO等等。

       标准化在老外的菜谱都能体现,肉400克、盐2克、油10克,放入烤箱20分钟后即可。看看中国的菜谱,肉300-1000(视吃饭人数)、盐少许、油适量,放入锅内,等肉炒至变色放盐,再翻炒数下出锅。这就是标准化的差距。不过现在中国也在往这方向努力,听说馒头的标准化早就出台了。

       离开餐饮行业,回来我们IT业吧,我们接手一个项目,一般会先建立规范,这个规范一般是代码规范、注释规范、命名规范等。
       除了这些规范,我们还应该规定使用工具规范。
 
      我对于项目组的使用工具有了明确的规范,包括开发所用的IDE工具,操作系统和补丁、防毒软件、文本编辑器、EMAIL工具、电子词典、源代码管理工具、BUG管理工具、开发的环境配置。
      有人用ie6,有人用ie7,输出的效果存在不同,所以浏览器也统一规定。

      估计有网友不以为然,我们公司都用WINDOWS不用规定操作系统。如果是这样的话,我亲爱的朋友,你肯定没有做过虚拟团队的项目。所说虚拟团队,就是指团队成员不在一个办公地点。有可能这位仁兄正在夏威夷海滩,而同时一群企鹅正从另一位同组战友身边经过。如果在这种团队下,你没有指定统一标准就很麻烦,更麻烦的是团队成员的文化差异。这个有点远了。总之规定不是坏事,养成习惯,以后会有用得到的地主。
      这些规范的标准制定,只是为了工作和沟通。我在下面要讲的标准,是为了自动化。

      我们都知道这个世界上最快的生产工艺是流水线。一个完整的流水线要大家互相配合,配合就要有配合的规则,这个规则就是标准。每个在流水线上工作的或机器都要适应这个规则。前面我们定了很多规范,这些规范是给机器,但是开发系统主要的是人,现在我们要给人制定规则了。
      一般最守规矩的是最笨最呆的人,像日本人,不守规矩的往往是聪明人,像中国人,但这种人也只能算是小聪明,最聪明的是定规矩给别人执行的人,像美国人。

      所以给一群中国人定规则不是什么容易事。看看文革就知道了,领导本意是好的,一执行变味了。明明说辱骂领导人是犯罪的,结果到了地方连穿黑领黑袖的都抓起来了(黑领袖)。但是“没有标准就没有自动化”。标准再难也要定。只有标准化的流水线作业才是一条快速发展之路。

      首先我统一界面风格。我们知道,我们伟大的祖国就同一种证书就有多种格式,有的格式多到可以开个展览馆。这个对于艺术界可能是好事,对于IT业无异于灾难。做电子政府的战友们深有体会吧。我们知道如果界面比较相似,操作方法相同,那使用继承后我们可以减少很多工作量(包括开发、培训的),因此在设计界面时,就要尽可能的通用。我这个项目总共200多个模块,但我仅定议了六种标准操作界面,换句话说,就是我只要开发出六个界面就基本可以实现200个模块的操作需求。在后来,我们充份领略到当初做的这种标准化界面的好处。

      后来为了追求没有最好只有更好的目标,我们将实体类通过工具自动生成。这个网上有很多现成的工具,但我们组开发的工具不同,不光生成实体类,还有要注释,还要能生成界面、赋值语句等。这要感谢我们“赖惰”的队员,因为嫌写实体类太麻烦,就干脆开发个工具一劳永逸了。我想微波炉的发明者一定很懒(我不知道微波炉是谁发明的,有了解的请告知我)

      为了实现这些赖人的目标,就要求在设计时实现标准化,如生成界面时label的字符,控件类型,赋值语句间的关系,这些都会在数据库建模时建立的。在后继的文章里,我会详细说明标准化的数据库建模是如何实现的。

      当然我也建立了代码规范,以往的经验告诉我代码规范在执行时会遇到困难,因为这些规范文档基本没什么人去遵守,结果文档变成考试后的复习资料了——束之高阁。

      如何避免这类问题的发生。我们先看一下这种问题是怎么产生的?

      首先,遵守规则和不遵守规则同样能实现系统的要求,就是说你一定要我把变量命名成sBillNo,我命名成a1也一样能通过。大家可以说这是一个不负责的程序员所为,但是管理不能靠自觉,要有硬性的规定。
      其次,遵守规则比不遵守规则所花费的时间要多,就是说你遵守规则可能要用2个小时完成,而不遵守规则只要1个小时就能做完。当然以后读代码困难那是以后的事,现在加班都忙不完,还会想以后。

      针对上面的问题,很多公司或项目组都会出台不遵守规范的惩罚措施(没见过对遵守规范进行奖励的)。但惩罚的前提是你要抓到他不遵守的证据。像我现在手下有五个程序员,这五位大侠最快时可以每天产出5个左右的功能,这些功能包括界面、中间层、数据层还有JS代码等。要我每天都彻查一遍,是不可能的。那就抽查,那你抽到A,A不服,因为B和C也有不合规矩的代码,这样不利团队和谐。所以这次我不采取惩罚机制了。

      标准不应是程序员的负担,而应变成程序员的帮手。快速开发、协调工作、通俗易懂这才是标准化的意义。
      我可以告诉大家在我的项目中规范遵守的很好,原因是我的开发模式。要说这个开发模式,就要涉及到分工和团队合作。超出我本次说的话题。

      其实标准化的建立必须依靠,文档、团队、分工、模式等等因素,所以本次仅是说明,建立标准化的意义。

      有一点我强调一下,没有标准化也能做项目。标准化不是项目的硬性规定,但是否使用标准化,就要看你项目的大小和复杂度了。如果盖个狗窝谁在乎它标准不标准呢!

篇后话:

      标准化不同于设计。标准化是设计之前做事的,设计也必须依赖标准来做。设计者的交付物必须符合标准规定。因此标准在项目初始建立的,一般建立在需求调研之前或需求调研中。其实建立标准化并不费力,大家做了这么多年项目,这类规范文档没有10个,也有8个。但标准的问题是执行。怎么做才能执行好。关于这个问题,可以写一本书了。不过我将在以后的文章里说我是怎么执行的。放心还是你们能看懂的这种文法。包学包会!

  个人觉得这一章是比较难写的,因为标准的效果和使用方法必须在开发和分工时才体现,但开发和分工又要单列一章来讲,所以本文就算为标准化开个头,大家有个认识,后面我们会看看这些标准化起到了什么作用。

抱歉!评论已关闭.