2007年我从学校毕业来到了我的第一家公司,我除了一些编码工作以外,我做得最多的就是晚上加班补各种文档:详细设计文档、单元测试文档,当然我也看到了比我早来一个月的同事也在做概要设计文档。在那个时候,我当然不知道为什么要做这些,以为这就是任务,和小学时候老师布置的作文一样,大部分都是凭空想象。后来我知道了,这些文档是用来过点的,当然不管你写的是什么,只要它的名字是xxx详细设计文档、yyy单元测试文档就可以了。
同一时期,我记得从clearcase里面拉出来的代码是没办法编译的,总有人覆盖了别人的代码,或者漏合了部分代码,当然这个时候我们会为了出版本给测试部测试而通宵加班,好不容易编译通过了,给了测试部版本,但是很多功能又不可用,当然也不可测,这时候一个版本的问题单可能好几百,每个人下面都挂了几十个问题单。当然这么多问题单即使都解决合入了代码,但可能还要加班把流程走完。
2012年我从第一家公司离职回到了老家一个公司。
编码还是我的主要工作,但是还有CI工作。当我第一次从公司的老员工听到这个缩写单词的时候,我以为我的敏捷经验终于能派上用场了,但是遗憾的是,这个CI并不是Continual Integration,而是Competitive Intelligence,竞争情报。 每天坐在办公室的程序员要去搜集竞争对手相同项目的情况,而且还不能是网上搜到的内容。OK,当然还得利用想象,我幻想着:我从以前同学那里了解到,XXX竞争对手的产品存在某某方面的缺陷,而我们的产品做得比他们好多了......我幻想着,当然我也这样写给了领导。就在2013年的年末,领导做的下一年的工作计划中,CI工作还是他的重点工作。
公司要求一二四六加班,然后统计工时,全部门排名,排名靠后的团队和个人会找你喝茶的。为了这个工时,我看到很多同事每天晚上没事也要在公司挣工时:晚上吃完饭,散个步,到办公室上会网,聊会天。
公司要求每个项目都要有可用性需求,必须自动化安装、升级。我花了两个月把这个东西做好了,任务完成了,领导也许满足了,当然代码就像我第一个公司写的文档一样,从来没有人用过。
公司要推行敏捷,要搞自动化测试。后来我问一个测试同事,你们的自动化测试呢?他说,没有用过,那是给领导看的。
我常常听到有人骂客户是sb,原因就是:客户提了一个问题要修改,然后我们的工程师觉得没有哪个sb会没事去点那个东西。
这个公司是以领导为中心的公司,当然在他的手册上写的是以员工为第一、以用户为中心。
我遇到了很多这样的事情,最近我心里越来越觉得痛苦,我觉得这是对自己的背叛,我想这些问题并不是我们看不到他,也不是不可解决的,只是大家都向他们低头了,默认了,习惯了。当然我也常常要在他们面前屈服,我也知道改变需要很大的勇气,但是这应该是每个程序员的目标:不仅仅是成为一个好的程序员,更应该是成为一个真诚的程序员。不但要写出好程序,还要真诚的面对自己的灵魂。
可能有些人觉得改变太难,但是真诚的东西最终一定是每个人都想要的东西,就像《rework》中所说的,nobody likes plastic flowers。