文/小加
2017年12月17日,第二架C919大型客机在上海浦东国际机场完成首次飞行,这意味着C919大型客机逐步拉开全面试验试飞的新征程。
不管从什么角度出发,这都是一件喜大普奔值得庆祝的事情。不过这种事情自然也少不了那些键盘侠的质疑:“发动机是我们制造的么,到底有多少核心设备算是我们国产的......”在他们眼里,制造大飞机就像拼积木那样,把别人的零件配齐了,谁都能自己攒一个,算不上什么真本事。
这种逻辑错的有多么离谱?触摸屏、蓝牙、指纹识别......这些没有一样是属于苹果公司的专利或者是核心技术,但却是iphone必不可少的核心配件,不过只有乔帮主把它们都结合在一起才出现了改变世界的iphone以及后续的各种各样的智能手机。那些键盘侠一定不会说:“iphone只是把这些产品组装起来而已!”
有的人其实还生活在老庄那种小国寡民的时代,什么东西都能自给自足,倒是可以有点自豪感了。而现在早已经是资源全球配置、产品全球协作的时代,没有哪个国家哪个公司敢说自己可以搞定一切,就连一支简单的铅笔生产,中间都有可能是几十万人参与了写作。
最终的产品交付能力才是最重要的。我们经常会听到这样一句话:“我不看过程,只看结果。”再完美的过程,如果没有好的结果,那也是枉然。而再完美的配件,如果不能拼搭成一件产品,也没有什么实际的用处。所以我们可以很自豪的说,大飞机就是我们制造的。对于大部分国家而言,你就算把所有的材料都给他准备齐了,他们照样造不出大飞机来。
那大飞机和我们程序员又有什么关系呢?
去年的时候,我团队中一位兄弟去参与职级的晋升,我们建议他拿着一个做的不错的软件项目去介绍。当然整个过程是很精彩的,评审官们对这项成果也很满意,不过在最后一个环节一位评审官问了一句:“这个软件好像是XX公司开发的吧,跟你们有什么关系呢?”这位兄弟解释了半天,最后才以基本垫底的水平晋级成功。
这种情况并不在少数,我也是经常听到有别的部门的领导和同事在问我们:“代码都是别人写的,你们究竟做了什么。”有熟悉一点的,还会很直爽的问我:“你们不就是组织开个会,做个会议纪要么?对人员有那么高的要求么?”
之所以出现这种情况,主要是因为我们是程序员中比较特别的一个群体,属于企业中的甲方程序员。简单的说就是请乙方来做项目,然后我们来对过程进行管理。
其实我们也是从写代码一步步走过来的。当公司规模不够大的时候,很多软件开发的需求并没有那么复杂,几个软件我们几个人分一下,从服务器的安装,数据库的建设,需求的调研,软件的设计,系统的测试,以及上线部署等一条龙服务,基本上一个人可以全部搞定,然后交付给用户进行使用。那时候在用户眼里我们还有几分神秘感,简直就是无所不能的程序员。
公司规模壮大了,信息化成熟了,大的软件平台代替了原来的一个个小软件,复杂度越来越大,集成性越来预高,一个人想从头到尾的搞定一切已经完全不可能,第三方公司的介入不可避免。刚开始的时候我们还是习惯像之前那样,天天忙着和乙方一起在那里写代码,后来慢慢发现软件复杂了、项目大了,再这么做已经不行了。整个项目完全失控,失败率越来越高。
没有办法,只能逼着自己从一名专业的软件开发人员向项目管理人员去转变。于是去研究项目管理的知识,沟通的技巧,平台的应用等和开发没有关系的事情,慢慢的也就不怎么写代码了。而在用户眼里,只有写代码的那个人才是做事情的那个。其他的都是虚的假把式。
于是出现了刚才提到的那一幕:“软件是你们做的么?”
前几天和一位其他部门的领导谈起了软件开发人员分工的事情。在他眼里,我们团队能干活水平高的也就那几个,然后说出了几个名字,我很遗憾的告诉他,那几个是属于运维团队的,总体业务水平在我的团队中属于第二梯队。我们那边业务水平高的几个都是项目团队的,每个人都要负责做一两个项目的项目经理。
领导有点不解的问:“那几个不就是把大家召集起来开开会,软件开发好之前再组织大家做做测试么?干活的都是人家软件公司的人。”于是我便给领导历数了一下甲方项目经理都要做哪些事情。
我们这边的大部分软件项目,从软件公司的人员驻场之后,到软件能够使用,至少半年时间,涉及各类技术人员和关键用户数十人。这么多人如何有效组织起来,什么时候开什么样的会,调研什么样的内容,都要有一个计划。项目经理必须具有全盘统筹能力。
在需求调研阶段,软件公司的业务顾问和我们单位的用户谈起业务来,基本上处于鸡对鸭讲的状态,互相听不懂。项目经理必须对业务流程比较了解,还要知道实现类似业务流程涉及到的技术,才能建立起两边的共同语言。
在详细设计阶段,我们公司现有的各类软件后台关系错综复杂,必须有人能够讲清楚,乙方的系统架构师才有可能结合现有情况做出正确的设计。项目经理需要对公司的整体技术平台比较熟悉,我们公司已有近百个各种软件,多个大型平台,想都搞清楚非常不容易。
在代码编写阶段,如果稍不留神,软件开发公司的程序员就会写出各种各样奇葩的代码出来,代码写的不规范会给后期的维护带来麻烦,代码注释做的不合格会让后面修改代码的人看不懂......总之你一定要让软件公司的人觉得你能看懂,才会让他们写起来更加认真一些。
后面的软件测试、软件部署、软件试运行等环节莫不如此,项目经理都要把这些事情搞定。而对于软件开发公司来说,每一个环节都会有不同的专业技术人员进行开展,而对于我们来说,从头到尾就一个。软件做的怎么样,什么时候能够交付出来,公司上下盯得其实就是项目经理。做好了不一定有什么实质性的表彰,做砸了责任必须要一个人扛。
听完介绍后,领导说:“那对他们的要求是非常高啊!大家水平都能达到这个程度么?”
“能达到什么程度要看各自的水平,做的好坏也的确各有差别,但每一个环节的能力必须都要具备,这是一定要有的。实际上这两年互联网高速发展,团队中有几个呆了两三年的同事跳到一些知名的互联网公司,依然做的非常不错!说明从我们这边出去的人,都是经得起考验的。”我回答说。
从一架大飞机,想起了这么多年程序员的生活。其实除了偶尔会被误解以外,我们更多的也收到了很多肯定,那是一个个软件成功交付之后的收获。
其实程序员也有很多好玩的故事,可以慢慢去诉说。