大学一毕业我就进入百度做程序员工作,到现在在家上班做一名远程办公的程序员,这些年的经历值得记录一下。我刚开始去的百度部门是负责在网页上贴牛皮癣,这个比较惹人讨厌的。不过自然会有人发明出一些理论证明牛皮癣的意义,比如长尾理论。还会发展出相应的学科,比如计算广告学。
说远了,其实这些都跟我没关系。偶是个码农,就负责没日没夜的写代码。公司说要向硅谷学习,实行弹性工作制,可这是中国特色的弹性工作制,只可延长,不可缩短。九点下班那算早的,十点下班才算正常。事实上就没有下班的时候,经常会凌晨的时候一个电话打过来,然后回公司去处理线上事故。为什么老在凌晨的时候出事故呢?这跟线上服务有关系,晚上上网的人少,所以很多复杂的操作都留在晚上做,比如更新数据。这些操作往往会导致事故。凌晨不睡觉起来处理事故,有啥好处呢?加班费肯定是没有的。就没有加班的概念,因为是弹性工作制。第二天首先要追究事故责任。如果是我们自己的代码导致线上事故,然后扣钱,通报批评,自我检讨。如果是别人的代码导致线上事故呢?然后老大们会说你们响应太慢了,从事故发生到解决,居然花了一个小时,导致公司损失了多少多少钱,好好检讨一下应急机制,然后还是扣奖金。
没日没夜的加班,周末、加节也加班,加上出了点小事故就没完没了,导致的是,面黄肌瘦,早生华发,同时伴有强迫症,写代码的时候小心翼翼,反复测试,线上操作的时候,反复校对操作单、配置项。
每次做项目的时候就说,大家好好干,辛苦几天,做完这个项目就休息。事实上一个项目没做完,另一个项目已经在排期了。为什么会这么忙呢?主要是因为码农的需求来源有几个,一是PM,主要是提一些产品层面的需求,一是策略,主要是提些按什么规则贴牛皮癣的需求,一是公司上层,涉及到商业模式的变更,比如按什么规则收费。用IT的行话说,码农就是这些人的共享资源,都在争夺的,根本就不会有闲下来的时候。哪天运气好,真的闲下来了,直接经理也会没事找事,让码农干点事情,以体现他的管理水平,比如整 理下文档,整理一下统计报表。
在这种情况下写代码,会造成代码能力下降。记得小时候,字写得本来不丑,后来语文老师老逼着抄课文,结果字写得很丑。有时候看前人写的代码,有些写得很恶心,就不像学过编程,基本就是这种情况下写出来的。当然了,经理会忽悠码农,做啥事情都是能提高能力的,扫天下者先要扫厕所。
顺便说一下分工吧,主要有几个工种,PM,RD,QA,OP。这几种工种都会强调自己很重要,说自己是产品开发的中心。具体来说,PM主要是面向用户,偏好是人工干预,自以为了解用户,主要问题是逻辑能力一般,头疼医头,脚疼医脚,都按他们说的做,会把系统弄得一团糟。PM的职责就是催促RD去完成他的产品设计,所以天然跟RD关系是不好的。RD也就是研发了。QA是测试,不过QA喜欢说自己是安全保证,测试只是他们一小部分工作。QA的喜好是把些根本没有意义的BUG,而对产品质量的提升意义不大。什么会这样呢?这样是有段时间QA的考核是按BUG数。而那些重要的功能,RD往往会自测,所以BUG不多。那些根本没意义的功能,RD考虑不到,容易出问题,比如各种根本不可能的配置。其实QA也不容易,刚开始工作那会,QA都是美女,过了一年,都变成男生了。这就是传说中的,女生当男生用,男生当牲口用。OP又叫运维,在RD看来就是负责操作线上机器的,但是OP说他们是运维的,线上操作只是他们工作的一小部分。OP也是命苦的人,各个项目组的RD的操作都要他们作,出点差错,会被批评,所以容易得强迫症。
一般来说,如果一个新产品的收入不符合预期,谁也不知道哪里出了问题。但是PM会说,是RD的代码写的有BUG,RD会说是OP操作错了。
这么辛苦,回报是啥呢?等到评职称,涨工资的时候,老大们说,你的工作有技术含量吗,是个人就可以做。然后那些拿着鞭子催码农加班的人则一路往上升。所以组内的同事,大都会变成祥林嫂,逢人就说:我真傻,真的,光知道埋头干活;不知道是在为人做嫁衣。
然后同事都要走。然后经理开始挽留。挽留会分四个阶段,
第一阶段是许诺有多少多少好处,但是大都不会兑现,上过一次当不会再上第二次。
然后进入第二阶段,这阶段的主要是打击信心,先说要跳槽去的地方怎么怎么不好,再说个人怎么怎么不好,去哪都混不好,一直以来都是他在照顾我们。这阶段就会把人弄得很烦,干脆写个签名档”天要下雨,娘要嫁人”。然后经理也写了个签名档“那么多要嫁人的,是庙太小,还是心太高”。
然后是第三阶段,这阶段主要是人身攻击,比如说,你性格有缺欠,怎么说你都不明白,太偏执了。如果是内部换岗位的话,这些话的影响范围不确定。比如某部门的经理,跟我谈得本来挺好的,结果跟当时的经理谈完之后,态度就变了,他们谈的内容不得而知。
脱了一层皮之后,终于进入第四阶段,这阶段主要是拖。各种流程拖着不让走,能拖一天算一天。
看见挽留无望之后,经理会跟其他同事说,这个人做得很烂,我压根就不留他。这些话可能会在公开场合说,甚至当事人也在场。
据同事说,出去面试的时候,常会问的一个问题是,为什么要跳槽,然后同事苦大仇深的样子,对方说,这个部门我知道,前面有人说了。
具体到我来说,之所以要走,直接原因是职称问题。经理原先的说法是,你某些方面能力存在缺陷,不足以升职称,我说如果是因为我个人能力不够,而职称低,那我认为这个部门不适合我的发展,我选择更适合我发展的地方。过几天经理又改口说,其他大家对你能力都很认可,你在这边成长很快,我说如果个人能力已经到了,职称却偏低,我认为这个部门不公正,我选择更公正的地方。反正就是没完没了的扯皮。
几终折腾,终于跳出火坑。进入一个为日本淫民服务的部门。相关的工作之前主要在上海的分部做,现在要迁回北京总部。所以换部门后第一件事就是去上海交接工作。适逢世博会,住宿吃饭都很麻烦。很多人专程跑到上海看世博的,我既然到上海了,也应该顺便去看看的,只是人实在太多了,所以没去。
交接工作,主要流程是看代码、文档,然后跟别人讲,然后台下有人提问,如果都答上了,就认为接手得不错,可以接手下一个模块。
接手别人的模块,是工作中最不爽的事情,像扫雷。代码里布满雷,主要有三个原因,一是新人不经过培训,直接就开始写代码,二是很多做策略的同学,不但不会学代码,还鄙视写代码,所以不管工作几年,写出来的代码都是雷区;三,对于很有经验主要负责写代码的工程师来说,公司里评价一个项目的好坏主要是是否按时完成,所以也不管这么多了,拼着命写出来就行了,要知道很多代码是在带着哀怨,或者凌晨时候梦游状态下写出来的。
QA的离职率是高于RD的,很多QA对模块本身就不熟。而且据某些QA说,老老实实测程序的QA升不上去,鼓捣各种测试工具,测试平台的QA才能升上去。所以最终来说,QA漏测BUG还是时有发生的。据说QA也很忙,一个QA要负责很多模块的测试。曾经发生过,某QA把RD提测的代码直接点测试通过,上线的时候,OP发现,RD的文件没上传完,压根不能用。
所以我们把客户称为兼职QA。RD又叫兼职客服。由于涉及到商业机密,兼职客服的具体工作就不展开了。总的来说,绝大部分投诉都是由于用户不理解业务规则引起的,少部分是由于BUG引起的。PM是最了解业务规则的,为什么不让PM去查呢?这有两方面的原因,一是PM比较强势,所以把这些吃力不讨好的事情推给RD;二是PM也换了好几拨,也没哪个PM能了解所有的业务规则,只能让RD用GDB去看一下。前些年,有一个神话,说GOOGLE的网页RANK很神奇,整个GOOGLE只有少数几个人知道。咱的RANK更神奇,压根就没有人知道。其实一个系统做久了,都这样,每个人都加点东西进去,最后谁也不知道整个系统是什么样子了。三是有的PM逻辑能力不强,制订业务规则的时候就不知道某些规则会冲突,或者引起用户误解,RD觉得不合理,PM就说他更了解用户。
代码里主要的问题include
but not only可读性;潜伏的BUG,主要是某些函数的边界条件没考虑清楚,或某些分枝根本就没测试;冗余代码多,写代码的人copy paste容易,后续改代码的人,重复地修改N个地方就累了;性能、稳定性……
偶尔碰上个有代码洁僻的CODER,想办代码改好看点,就算RD敢去踩地雷阵,项目经理、QA不同意。这也算是软件工程里一个潜规则,做项目的时候,尽量少改代码。为了少改代码,甚至不惜把前人的代码COPY PASTE,然后改一两句,而不是重构一下原来的函数同时满足新旧的需求。这时候,弄好了,没功劳;踩雷了,就是典型的没事找抽。最后吐呀吐呀都习惯了,谁也不觉得代码不好看了。这又叫破窗户理论。
最后,就变成了击鼓传花的游戏。高位接盘,感到压力很大。唉,前人乘凉,后人扫雷。
产品做上几年后,这种短视的做法会少很多。那些埋雷的人升上去之后,也开始谈怎样做才优雅了。妓女赚够之后从良,也是可以谈贞节的。卖毒牛奶的人,还说“小胜在智,大胜在德”。严以待人,宽以律己。所以晚来的工程师会吃力不讨好。不管怎么样,人性的恶,还是让产品变得更好了。
回到北京后开始具体工作,一开始是负责策略,然后负责抓取、存储、建库之类。
日本的工作,相当不好开展。这里不负责任地猜测一下,市场份额最大的是以人工推荐出名的YAHOO。很多人认为搜索引擎能成功,是因为信息爆炸及需求多样性(也就是也尾理论),但是在日本,这两者都不太符合。日本拍的电影虽然多,但也不至于海量,用户的需求虽然有区别,但是也不会太多,人的基本需求差别不大。
这里顺便说一下工程跟策略的区别吧。虽然都叫研发,但是工作内容差别很大。在系统里有些问题是不能用数学解决的,就算能用数学解决的,也不一定能用计算机解决,能用计算机解决的,也不一定能用现在的机型解决,所以就需要一部分做策略的同学,尝试各种方法,碰运气看哪种方法能更好的解决问题。其实跟中医一样,只是靠积累经验,药方有用。既然是碰运气,所以变数大,所以他们自以为这样很有水平,其实就跟买彩票一样,认为变数大,所以回报应该高。
之前贴牛癣的策略同事,大都擅于表扬与自我表扬。刚开始的时候,是A发邮件说B很牛,B说C很牛,C说A很牛。后来觉得这样还不过瘾,A直接就发邮件说自己很牛,B也回邮件说,我也很牛,C说我更牛,这时候A不干了,说活都是我干的……这时候做工程的同事就郁闷了,这代码都是我写的,怎么就没我啥事。?遍身绮罗者,不是养蚕人。
不久又到了职称评定的时候。因为上一个经理给我的上半年考核很低分,所以没机会参加职称评定。虽然换部门之前,就知道换部门可能会导致无法参加职称评定的,但是真的到了这时候,还是很不爽的。有点像PIE版上剩女,年轻的时候遇人不淑,上了年纪,也不管自身啥条件,都要房要车。然后考虑别的机会。到外面公司转了一圈,不太顺。
一方面原因是,社招的时候,更看重的是在原来公司的职称。这方法也合理,想通过一两个小时的面试,确定一个人的技术水平也不容易。唐骏之流就是利用了这个漏洞。
另一方面是,工作这两年,确实没学到什么东西。时间都花在处理各种琐碎的小事,比如为什么某个连接出错了,某个客户钱被扣多了,某台机器为什么慢一点。仅剩的一点时间 ,想做点像样子的事情,经理觉得风险大,不让做,或者资源上不支持,大公司里做开发,不是一个人就行的,还需要OP,QA的协助。最后只能做些小打小闹,闭门造车的事。
还有一个原因是,跳的人太多了,把行情拖低了。
这感觉像在监狱里待久了,虽然越狱了,但是想找个好地方待也不容易
主要还是之前职业规划得不好。记得之前的经理,居然把我写的代码说成他自己写的,然后去参加部门的CODE评比,然后还好意思在我面前自夸技术牛。跟了这种不厚道的经理,早该走的。之前还是过于安土重迁了。
顺便说一下,他怎么催大家干活吧。每天不停地在办公区走来走去,看大家都在干嘛,看到谁不在干活,就直接批评,“你怎么在看论文,活干完了再看”,“你居然在看BBS,还是PIE版”……
怎么催大家加班呢?在项目开始的时候,先假惺惺地跟大家讨论项目排期,然后说,“这个项目正常是要7天,但是作为一名试用期的新人,要好好表现自己,努力一下,3天吧”或者“这个项目很重要,周末努力一下,下周一前提测吧”或者“要严于要求自己,你看那某某人,混了三年,最后很LOSER地走了”。然后开始没日没夜地编码,但是万一还是延期了,他又开始说了,“这个排期是你自己定的,现在QA,OP都按这个排期去准备了,对大家的工作造成很大影响,不能延期”,然后只能熬夜写代码了。项目完成了,又假惺惺地说,项目安排要合理,要先紧后松,老这样熬夜写代码,伤身体,代码质量又不好
简单来说,就是对外软弱,把脏活累活接回来,然后对内独裁,整天逼RD干活。为什么会这么BT呢。这跟公司的制度有关,PM经理,QA经理,其他部门的经理的意见都可能会影响经理的晋升,但是RD的意见是影响不了经理的晋升的。所以RD只能用脚投票了。当然大部分经理还是不错的。
看到大家都要走,经理也是采取了不少措施。比如不停地找想走的同事聊天,也就是离职四步曲的前三步。这下好了,大家都知道,经理找谁聊天,就知道谁想走了,反而把问题公开化了。于是,很多同事干脆组内讨论去哪面试的问题了。
经理还明令禁止同事之间互相抱怨;还挑拔同事关系,比如跟A说,B很锉的,我不想留他,你跟他不一样;或者说,你这次加薪加少了,都怪B拿多了……
前面是杂文,后面的部分就当随笔看吧
公司里做事的一个信条是“简单可依赖”,即简单,又可依赖,这当然是好的,但是很难同时满足这两点,有些事情的复杂度就是很高。而且关键的问题的是,“简单”的标准没定下来,有的人觉得四则运算已经很复杂了,只会加减,有的人觉得微积分也很容易。这个原则当然也有它合理的地方,在老员工离职率居高不下,新员工没有体系的培训的情况下,事情必须做得足够简单,简单的标准就是,毕业生可以直接接手。
但是这些人也不是完全地排斥复杂的技术。对复杂的推崇是人的本性,人都喜欢忽悠说自己的东西很复杂,各种祖传秘方。这些人也喜欢说某某部门的技术很牛,很复杂。但是,就是不让自己身边的同事做复杂的事。长得高不是你的错,跟了武大郎就是你不对了。所以这个做事原则,充分保证了将熊熊一窝。
公司里会议特别多,所以有白天开会,晚上写代码的说法。这里分析一下原因吧
首先是因为,有人热衷于开会。开会的作用很大,首先一点,解决问题固然重要,但让老大们觉得事情正开展得轰轰烈烈更重要。开会+群发邮件就是很好的方式。有点像中共的官员,每天的工作就是开会,公司里很多同事,每天的工作也是开会。悄无声息地把问题给解决了,还不如不解决。所以开会,一定要人多,人越多越隆重,而且涉及的部门也要多。最后一大群无关的人在会议室里用笔记本工作。
另外,开会也是抢功劳的重要方式,多点露脸,把事情都说成自己做的,那些没去开会的RD,人们根本就不知道他在干活。
没有合适的仲裁方式,一群人没完没了地扯皮。解决问题大都不是选择技术上最好的方案,而是依靠行政力量,把好处留给自己,脏活累活推给别人,所以讨论容易变成办公室政治。但是行政力量也不能完全解决问题,由于历史原因,牛皮癣部门分成两块,有两个老大,他们是平级的,谁也管不了谁。这里不负责地猜测一下原因,这个部门老早就成立了,那时只有一个老大,后来公司裁了一个部门,也裁了些人,引发了些风波,不过那个部门的老大没裁,而是调到牛皮癣部门,又不能让他降级,于是就有了两个老大,一直到现在。
顺便说一下工作很难推动的原因。一方面是每个人都很忙,而又不是所有的负出都有回报的,所以人们只会做两种事情,一是被行政力量逼迫的,必须得做,一是自己发起的,自己有收益的事情。所以想推动别人协助自己的工作很难的,必须得自己的职称比较高,但是自己职称低的话,推动不了别人干活,肯定也是升不上去的。这是个恶性循环。
项目起名是很重要的,一定要让人听了不知道这个项目是做什么的,出自中国的古典神话,或希腊、罗马神话都可以,越玄越好,正好能唬住没文化的民工。
回头谈一下日文的事情吧。现在回头看,决定去日文那会,是低估了困难,独力负责一个完全陌生的领域,还要负责跟其他部门的协调,而手头上人手又不够,这是很艰巨的事情。所以那段时间产出很少。具体产品线的开发工作,基本上对产品越了解的人做得越好,跟能力关系不大。做了一段时间,日文始终没多少起色,所以公司上层作出了工农红军长征一样的决策,称之为“国际化战略”。
再后来调到中文图片负责检索系统的优化,本来就觉得这个工作没啥意思,但是觉得对优化这块比较了解,容易有产出,容易升级,也就去了。这时候再次低估了困难,对模块不了解、缺少测试工具,缺少机器(居然没有跟线上一样的机器测性能),缺少协助(能分到的QA资源就少,其他RD协助也少)……这就像打《帝国时代》想从原始社会升级到帝国时代一样耗时,而离下次评职称的时间又很近了。
另外,跟同事相处也不太愉快。就像监狱里一样,不服牢头,然后老跟牢头冲突,最后狱警(项目经理)来调解。这里要吸引一个教训是,要选择有坑的地方,像这种牢头太多的地方,就不要硬挤进去了。
后记:
这篇BLOG在发表后将近一个月之后,忽然就火了,是很出乎意料,我原计划是离职之后,才放在HI签名档上的,现在提前火了,压力很大,很多同事也很替我担心,所以我很快把BLOG禁了。后来BLOG里不点名的反派人物,HI上给我留言,说要告我诽谤,并把HI签名档改为“清者自清”,我觉得这时候把BLOG禁了,等于承认自己诽谤,所以把部分可能引起高层不满,或者其他项目组同事强烈不满的言论删除后,重新发布。再后来,受到了管理层直接的压力,又删了。
明天就要离职了,回头看看,从07年实习算起,在这公司也待了好多年了,做了不少事情,都没啥回报,像头驴一样,辛辛苦苦地拉磨,得不到回报,个人也没啥进步。用《分手快乐》来表达此现在的心情
“分手快乐请你快乐
挥别错的才能和对的相逢
离开旧爱像坐慢车
看透彻了心就会是晴朗的”
现在我在小蜜蜂远程办公上做兼职程序员,专门接一些外包开发的任务做,有的时候同时接几家公司的任务做,在家上班,工作时间自由,而且收入比以前高很多,最重要的还是可以多陪伴家人。