最近将会对今年所做的一些项目进行总结,里面基本都包含了一个项目所有的过程。一来为自己今年的年终总结提供些材料,其次也是希望在总结过程中能给自己带来些更多的启发和经验教训,同时也非常期望各位大牛能给些建议以及批评,让我获得更多的进步。谢谢。
这篇文章总结的是我今年开始的的第二个项目:某研究所某国某XX系统(严格保密项目)。这个项目开始的时候,客户方没有提任何具体需求,只说了一句,秘密级项目,不能说,能说的只是这是个c++项目,并带批人进试验场再说。上篇文章我也提到过,虽然我们公司号称有1000个程序员,但是950个都是做java的。于是我们领导十分智慧的找了几个小公司,从其他公司借了7个C++程序员。然后我就入场了。
进入试验场后,签了一系列的各种保密协议、去派出所办了无犯罪证明,并且证明绝无成分问题后,开始与客户沟通需求,同时我得迅速的熟悉我的新”同事“。新”同事“来源与两个不同的公司,姑且称为L公司、X公司吧。L公司有3个人,其中L1(女)两年C++开发经验,L2(男)一年开发经验,L3(男)刚毕业,X公司4人,其中X1(男,46岁),X2(男)一年开发经验,X3,X4都是一年开发经验,还有我,共8人。客户方:L主任,项目负责人之一;W主任,项目负责人之一;M主任,项目负责人之一;Z总工,项目总体设计;Z高工,项目直接负责人,项目组长,99年南大博士;C高工,项目第二负责人,博士;客户方还有几个就不提了,基本全是博士。
我们需要同时开展两个项目:项目一是某设备监控系统;项目二是某绘图项目,从一开始我了解到我们方人员基本情况下,自然是按照各自公司为基础,然后我将X1(46岁那人)分配到L公司,他们负责某设备监控项目,而我和X公司剩下三人参与绘图项目,同时我负责两个项目所有基础框架搭建和客户沟通以及需求了解。
罗嗦了这么多,以上是这个项目的背景,下面开始表述项目的开发过程。
因为这两个项目都是比较保密项目,所以客户方基本没有办法完全表达出他们真实的想法,甚至连一条报文里面的哪个字节代表什么意思都不能详述,这个极大的加大了我们的理解难度,同时对方基本都是博士,可能或多或少的将我们的理解能力提高到他们的高度,所以在前期磨合过程中还是遇到不少的麻烦。同时我不熟悉我们的开发人员的能力和水平,自然而然的想当然的认为X1肯定代表着我们的最高水平,后来才发现让他负责一个项目简直是我做过最愚蠢的一个决定。现在吐槽下X1吧。当我们领导将X1放置给我的时候,他说,X1是91年上海交大数学系的高材生,然后去新加坡留学读研和读博,水平相当高。我听到后非常高兴,我觉得我又多了一个老师,可以多学习东西。结果有句话叫做书读多了的时候,有可能人也读傻了,X1的沟通能力基本为0,或者说情商几乎为0,并且代码写的也很一般,优点是他的理论知识相当扎实,参加X公司的C++笔试,考了满分。
因为项目需求的不明确,所以我加强了两个方面的准备工作。第一:底层框架写的尽可能简单并且容易扩展,同时必须符合多人同步开发,也就是说要做到业务分离。第二:尽可能多的和客户沟通,并且找对需要沟通的人。
1)写底层框架的开发过程
因为需求不明确,同时对开发人员开发能力不确定,写这个底层框架还是花费了我不少功夫的。我们都知道,一个系统无论怎么复杂,数据流通都是这个系统的核心。同时因为数据的多样性,所以数据的处理也尽可能多的分模块开发。为此,我和客户中的项目组长Z高工花了不少时间在讨论这个数据处理问题。最终我将数据模块彻底分成几个独立模块,所有显示模块向数据模块进行数据注册,然后数据管理模块主动推送数据进入显示模块。另外做了一个数据存储模块,可以按照配置文件信息存储大量已有的数据,又做了一个数据解析模块。数据解析模块的意义就是我们无法得知报文的具体含义,但是他们知道,所以数据解析模块的目的就是通过自定义的xml文件,解析出报文中某位置的某数值,同时也支持几个数据之间的特殊规则运算。
通过上面的数据相关模块,至少我们的开发人员不在需要关注数据的来源和走向,只要在项目工程中包含这个4个dll文件就行,需要用到数据的时候,在各自的接口中注册下就行,简化了他们的逻辑,也简化了程序的复杂性。即使发生需求变更,也不需要查更多的代码。
另外我也给我们的开发人员封装了一些基本的控件和显示样式,比如图表类,对话框等等。
虽然上面描述的东西java可能到处都是,但是c++方面还是稍微有些少,尤其在我们所面对的项目情况,用途还是很大的。这样能使开发人员更多的关注自己的业务逻辑,而脱离了其他方面的干扰。
PS:现在这个数据处理的几个模块已经成为客户新软件的标配了,据说他们主任已经将这几个dll申报成他们所的三化产品,并且写了Z高工今年的论文内容就是这套逻辑。哎年底至少5W+的贡献奖金。跟我半毛钱关系都没有。
2)与客户沟通的过程
前面也说了,客户方领导多,博士多,沟通起来还是有些困难的,如果都和我一样都是屌丝,那可能还会好些。不过有句说的好,千万不招惹白痴,否则他们会将你的智商拉倒他们的高度,然后用丰富的经验战胜你。我只是个小本科,而且还是三流的,在这个项目中,我无法提高我的认识到他们的高度,只好想尽办法降低他们的高度。在和客户沟通过程中,最有效的方式就是认同客户。他们即使不了解项目本身,但是他们却是最了解自己的。于是我想尽各种方法客户多沟通,比如看到客户带羽毛球拍,于是厚着脸皮和他们一起打羽毛球,看到他们在吹牛,厚着脸皮加入吹嘘等等。举两个例子,一次C博士下班回去,我之前还从没有和他说过话(刚去),不小心听到了他说今晚是广州恒大和天津的比赛。然后我晚上回去后还是认真的看了这场比赛,第二天一早,我看到他就和他聊起这场球,结果两人还是有些共通语言,比如都支持恒大等。以至于后来每次有中超,都会一起分析下预测以及心得。后来在这个项目中,他真是帮了不少忙。另外个例子,D博士(南理工的)。他和我们的项目一点关系都没有,有一次我出去打水,经过他的办公室后,看到他在看一本hadoop的入门书。我很惊讶他尽然会看这本书,于是就问他,并且随便说说我参与过的一个hadoop项目。于是慢慢两人就比较熟悉起来。后来他也是在他们主任面前给我们说了不少比较好的话,比如工作认真态度端正等等。作为一个外人,发表一些看法对于领导来说还是有些参考性的。前天D博士打电话给我说他们几个朋友做了个产品,估计能申报成国家项目,他尽然把我的名字给加到他们的课程组了。如果申报顺利的话,估计我还什么都不知情的情况下,能分点RMD吧。激动
PS:和客户沟通顺畅是一个项目是否成功决定性要素。同时在和客户沟通过程中,不能忽略其他非相关的人,虽然他们可能帮不上忙,但是不捣乱也行,是吧。
这个项目估计至少还持续到明年,郁闷的是我已经被撤出来了。现在这个项目进展还是很顺利的,我在和他们的组长沟通中,他们对于这个底层框架还是非常满意,也提高了他们自己的开发效率。和我们公司新的项目负责人联系时,他的工作也还是很顺利的。这点还是蛮开心的。
这个项目现在看起来还是很顺利和成功的,但是我下面会说一个比较失败的项目,希望大家能关注下。更希望的是大家能提出意见,指出不足,让我在今后的工作中有所提高。谢谢。
PS:我一直很迷惑我的定位,程序员?好像不完全是,在一个项目中我参与还是很多的。项目经理?好像更不是,我还在一直不停的写代码。