“我想耕耘十年,十年后再决定要不要继续当程序员。”

在得知我成为程序员之后,我的一位高中好友来问我将来的打算,我是这样回答她的。

但是当我于今年五一劳动节的前一天在离职申请表上签下自己的姓名时,我的这个计划就半途而废了,如同当初我在考研路上的半途而归

“半途而废主义”

在湘粤交界地带的重峦叠嶂里,耸立着一块天然形成的巨石,当地人称仙女石。天气晴朗时,可从最近的县城里隐隐看见它。一日,三少年——八刀、天川、我——骑自行车前往探索。途经崎岖山路、蜿蜒河溪、宁静村庄。最使我们感到惊悚的一幕是路过一处山体滑坡之时:山上滑落的泥土和石头将道路切断,阻隔了我们的去路;泥石底下一辆恰巧被压扁的拖拉机向我们展示着那个时刻的凶险。我们得停下来推着自行车小心翼翼地从路旁翻过这堆泥石;万一发生二次滑坡,我们的小命就没了。骑行了四五个小时之后,天降大雨,我们被困于密林之中,饥肠辘辘,体力透支。我们知道,仙女石就在不远的前方,可能再转过几个山头就到了;四周逐渐浓密的云雾也提示我们已经爬到了相当高的海拔位置。之前遇到的山体滑坡场景又不时浮现在我们的脑海里。

就在那时,“半途而废主义”由这三个少年正式提出:重要的不是目的地,而是沿途的风景;在审时度势之后,放弃未尝不是一个好的选择。

于是,我们打道回府了。

在后来的岁月里,我时常想起我们提出的“半途而废主义”。多年以来,它被我反复应用过多次,包括因为不想穿着在我看来无比可笑的礼服去跳学校安排的无比可笑的交际舞比赛,我选择了自我伤害以退出;包括因为感到无聊而放弃石墨烯研究课题;包括以故意迟到的方式放弃考研;包括一声不吭地、不给任何理由地离开曾经的女友;包括违背自己立下的“十年程序员生涯”的誓言……

事实证明,“半途而废主义”确实非常好用。

我不知道八刀和天川是否还记得“半途而废主义”。我们如今已经彼此没有了联系。我所知道的关于他们最近的消息是:八刀在南方医科大学里谋了一个拥有事业编制的管理岗位;天川则已经成为医学博士了。他们在自己的领域内都坚持得比我久。

在我五年的程序员生涯中,不幸遇到过一位变态制作人,我敢肯定,他是一个坚定的“反半途而废主义”者。

黑脸与白脸

我实在是非常讨厌那位变态制作人,讨厌到我压根不记得他的名字。他是一个中等身高、中等胖瘦的人,据说是学软件工程出身的,但不知为何没有选择去敲代码。他是各种大大小小的会议的发起者、组织者、统治者。早会时,他站在会议室的首席位置上,要求排成一个半圆形队列的我们以顺时针方向逐个报告昨天做了什么以及今天要做什么。周会上,他雷厉风行、大刀阔斧,接受各部门负责人的工作汇报,提醒进度太慢的员工加快进度,安排加班政策。他是会议上的国王。

我曾有幸与这位国王在办公室里共度了“美好”的一夜。

那天是发包的日子。从早上开始,主线的开发工作就停止了,都在修复测试员反馈的 bug。到下午 6 点多的时候就准备出包了。负责打 iOS 包的人是我。包打出来之后还需要给测试员测试,结果又测出了一些 bug,程序员再改。其中有一个 bug,发生在支付时,游戏会崩溃。这个 bug 可能跟第三方渠道提供的 SDK 有关。很不幸,接入 SDK 的工作是由我负责的,所以我赶紧去排查。

从日志上看,崩溃确实发生在调用 SDK 的某个接口之时,但是因为这个 SDK 是以二进制文件的形式提供的,我无法在里面打断点以定位问题。那时也很晚了,渠道那边的技术支持已经下班。没办法,我只能看着他们提供的文档重新检查一遍我的接入步骤、API 调用是否出错,结果没发现任何错误。接着我开始采用发散思维,把各种可能和不可能的原因都考虑了一遍,改代码,加日志,打包,测试,crash!反复折腾,最后却是无用功。

凌晨 12 点过后,其它的 bug 都已经改好,同事们也都陆续回家了,只剩我的 bug 还在那里。然后我的主程——宝爷——过来帮我一起 debug,搞了很久,没有解决。此时,我已头昏脑胀,就找了一张同事的行军床,躺下睡着了。

等我醒来时,已是凌晨 4 点。我看见整个办公室只剩下我、宝爷和变态制作人三个人。宝爷还在帮我看我的 bug。此时的他也已经眼神浑浊,我怕他扛不住,就让他去休息,我再上。

为什么一定要在今天改好这个 bug?此前,宝爷已经多次以委婉的方式向变态制作人提议,改不好的 bug 可以在下一个版本里修复,或者把发包时间推迟到明天。但是我已经说过,变态制作人是一个坚定的“反半途而废主义”者。既然 deadline 定的是今天,那么就一定要在今天打出一个能通过测试的包。虽然“今天”已过,但还是一定要出包。

好吧,那我就继续看吧。

似乎是因为已经睡过一觉的关系,我感觉我的脑袋清醒了很多;另外,我已经连累到了宝爷,内心深感愧疚,所以我开始更冷静地去看代码。这一次,我更为仔细地将 SDK 的头文件扫描了一遍,因为头文件是我能阅读到的这个 SDK 的唯一源码了。最后,我果然因此而定位到了这个坑爹的 bug,原来是他们的文档写错了!头文件里的某个 API 的某个参数是字符串类型,但是文档中写的却是整型!我照着文档调用该接口、传参,当然会出问题。

我终于改好了这个 bug,终于钻进被晨曦映得幽蓝的天空,踏上了回家的路。

在离开公司之时,我与宝爷同行了一段路。他以一种吐槽的口吻说:“制作人真是没有人性啊。”

我跟宝爷是老战友了,在上一家公司,他就是我的主程。我能到这家公司上班,也是因为宝爷的内推,而且是推了两次。如果不是看在宝爷的面子上,这家公司不会聘我;如果不是看在宝爷的面子上,我也不会来这家公司。宝爷似乎很欣赏我,甚至还说出我是他带过的人当中最有前途的一个,真是令我惭愧不已!我深知,我会令他失望的。我很钦佩宝爷,他是一个真正的程序员,对于代码有一种痴迷和信仰。他也是一个性格温和的人——太过于温和了,以至于只能以吐槽的口吻指责变态制作人在项目管理上的无能,而且是在背后吐槽。

第二天,这个呕心沥血打出来的包,仅仅被老板体验了一下,然后就没有然后了。

像这样子的通宵,此前此后都经历过好几次。加班到晚上 11 点、12 点的情况更是数不胜数。这种现象,被老板在会议上反复指责过。老板是一个东北人,不高,但是壮实,嗓门大。他与强东哥有一个共同的习惯:称呼公司员工为“兄弟姐妹们”。每次我们加班到太晚时,在第二天的会议上,老板总要首先说一句“感谢兄弟姐妹们的辛苦付出”;然后指责变态制作人没有管理好这个团队,“工作要做好,但是也不能累坏了身体,导致第二天上班没有状态”;最后在会议结束时来一句“希望兄弟姐妹们继续努力,你们的努力是为了自己,公司的愿望就是帮助大家能够在深圳安家乐业”以赢得一阵雷鸣掌声而结尾。

我觉得很恶心,却未能清晰地说出我对哪个点感到恶心。后来还是由一位同事在某一次私下的扯淡里指出来了:这是一套驭人术;老板负责唱白脸,变态制作人负责唱黑脸。变态制作人与老板是老乡,在公司创建之初就已加入,至于他与老板、公司更为深层的联系,我未得而知。

公司的驭人术还有很多,譬如站立早会。

“你对公司有什么建议?”

2020 年 4 月 30 日,在递交了离职申请表之后,我坐在会议室里与 HR 交谈,又被问到了那个经典的问题:“你对公司有什么建议?”这个问题通常在转正时被问到,没想到在离职时还要被问一次。我能有什么建议?我只是一个基层员工,我的建议重要吗?公司做的好不好,与我何干?

我刚上大学那会儿,一位不知从哪里来的师兄突然闯进我的宿舍。我的舍友们热情地接待了他,他则说了许多关于如何过好大学生活的建议给他们。当他发现独自在角落里坐着看书的我并没有热情地与他交谈时,便决定也给我一个建议:“千万不能内向啊。上了大学之后就不要内向了。内向就完蛋了。”我从此决定,以后的自己绝不能给任何人提任何建议!

不过说到给公司的建议,我觉得,这种走形式的东西,是可以马虎应付一下的。譬如当我在上一家公司——也就是黑脸与白脸所在的那家公司——满试用期后,HR 也来问过我对于公司的建议。我当时搜肠刮肚也没想出什么正经的建议,就是觉得站立早会这种形式挺新鲜的,我之前可从没见过这么白痴的会议:每天早上大家围在一起就是为了说一下昨天干了什么以及今天要干什么,而且非要等到人员到齐才开始,如果有人迟到半个小时,我们就得站半个小时——这非常低效和浪费时间,我觉得这种事完全可以在 QQ 群里发一句就行了。我将这个建议提上去之后,结果自然是石沉大海,站立早会还是继续进行。

后来,宝爷在私下里告诉我:站立早会是老板的主意,它的目的不在于开会,而在于防止员工迟到。那一刻,我恍然大悟!确实,如果你知道了有一群人在等着你来开会,你是不好意思迟到的。公司的驭人术真是高深莫测啊!

然而在这家公司待的时间越久,我越变得老油条起来。经过了无数次加班甚至通宵的洗礼,我决定去他妈的!每天到 6 点半钟,老子立马下班走人;上班迟到也成为习惯。

宝爷看出了我的萎靡。他建议将我调往另一个不受重视的项目组里维护旧代码;只有我一位程序员,平时的工作就是根据运营需求改改配置表,修复一下 bug,以及出包;最重要的是,我将享有不加班的“特权”。谁都知道,待在这样一个项目组里,个人是不太可能有什么技术积累的,所以宝爷还要我答应他,调到那个项目组后,每天要不忘看书,尤其是 CSAPP《代码大全》等书。我欣然接受。

我虽然讨厌妄图给我提建议的人,但宝爷是一个例外。在我五年的程序员生涯里,宝爷对我的影响最大。

一个真正的程序员

我第一次见到宝爷,是在 F 公司的一个小房间里。当时我坐在里面焦灼地等待着面试官的到来。

彼时,我在我工作的第一家公司—— Y 公司——已经待了一年,月薪依然是初进来时的 4000 人民币。在深圳这座城市里,这点钱可能刚好可以养活一个人,但是我身上是背着债的,每个月大概要还 1 千多元;如此,这点工资就不足养活我了。我也没脸再跟父母要钱了,于是我开始从支付宝借呗、微信微粒贷还有其它杂七杂八的借贷平台借钱。后来,雪球越滚越大,这种拆了东墙补西墙的生活方式一直延续至今。

Y 公司有半年提薪一次的政策,所以我在入职半年后找 HR 谈过一次,表达了我想加薪的愿望,但是她以公司最近收成不好的理由而打发了我。当时的我自认为还没有积累足够跳槽的资本,因此又蛰伏了半年。半年后,我再次跟 HR 提出加薪,她表示她会跟老板谈谈。但是我等了一个月多也没有等到什么回音,我决定要跳槽了。

我到 F 公司面试之前的几周,已经利用请假的时间面试了多家公司,但无一愿意录用我。因此,当时急于摆脱经济窘境的我又一次感到心灰意冷。

突然,一个高瘦的身影走了进来,打断了我的遐想。他顺势在我面前的凳子上坐下,翘起二郎腿,右脚吊着一只蓝色的拖鞋。他介绍说由他来面试我。他的头发有半截手指长,与鲁迅先生的一样倒竖而起;看得出来是因为许久没有剪发,头型已开始显得不太规则了。嘴唇上蓄着浅浅的胡须。厚厚的眼镜片后方是一双略显疲惫、朦胧的眼睛。

他问我过去的项目经历,考了我一些基本的编程知识,然后问我最擅长什么编程语言。我说是 Lua。他接着考了我一些关于 Lua 的问题,诸如什么是 table、什么是闭包、如何实现面向对象编程等等。然后他决定让我反过来考考他关于 Lua 的问题,于是我问他用 coroutine 实现迭代器有什么好处。他坦诚他不太擅长 Lua,而且没用过 coroutine,所以答不上来。我便向他解释,某些无法用有限变量记录状态的迭代过程,改用 coroutine 去实现会有多么便捷。

他让我通过了面试,拯救了处于水深火热之中的我。他就是宝爷。

起初,我看宝爷与我年纪相仿,以为他只是一个普通的程序员。后来才知道,他位居主程一职,并且在 F 公司举足轻重。可以说,他就是 F 公司的核心竞争力。一旦他离职而去,F 公司的所有产品线会立马停滞不前;要想在短期内招到一个与宝爷具备同等实力而且能快速接手的程序员并不容易。虽然只比我大了两岁,他却已有十年的编程经验了。当我还在从四面八方搜集资料学习 Cocos2d-x 之时,他已出版了两本书去教授别人如何使用 Cocos2d-x。他认为主程一职,不仅仅是要自己写好代码、管理好项目进度,而且要帮助其它组员快速成长,因此,在 F 公司的那段日子里,他教会了我很多。逐渐深入了解了他的经历之后,我觉得他是一个真正的程序员。

与我一样,宝爷出生于广东省的某个地级市的某个小镇里;与我不一样,我在大二时才拥有了属于自己的电脑,而宝爷在 2002 年读初一之时就拥有了一台二手电脑。他立马爱上了电脑,开始折腾电脑维修、重装系统,后又爱上了电脑游戏—— CS、红警、帝国、炎龙骑士团……到高中毕业前,宝爷靠着自我摸索,已经学了不少编程知识,也开发过几款简单的游戏——贪吃蛇、打飞机游、俄罗斯方块、五子棋……然而他想写的远不止这些,他想变得更强;他想写出更好玩更炫酷的游戏,就像当时非常火的游戏《大话西游》;他在思考什么代码可以写出炫酷的画面、什么代码可以让两个人的屏幕同步出现这么炫酷的画面。估计正是因为沉迷于游戏编程,他把课业落下了,最终只考上了一所不知名的专科院校。正是在那里,宝爷进入了一个更为广阔的世界。他开始疯狂借阅图书馆里计算机类的书籍,广结志趣相投的朋友,组队参加各种编程竞赛。这些丰富的经验使他一毕业就毫无困难地找到了工作,进入了 F 公司。

宝爷在试用期间也仅有 4K 的月薪,但那是 2010 年。之后,他得到了一位经验丰富的服务器架构师的悉心指导,并而他自己似乎比在大学时还要勤奋,贪婪吸收各种知识,积累经验,最终成长为公司的骨干。

2016 年 8 月,我成功入职 F 公司,进入了宝爷带领的 Z 项目组。

从入职到离职

拿到 F 公司的 offer 之后,我立马回 Y 公司提了离职。在一个阳光明媚的下午,我打电话给老板,说我要离职了。听得出来,电话那头的他似乎刚刚睡醒,一脸懵逼,问我辞职的原因。我说是薪资的问题。他说他马上来公司与我面谈。

在他的办公室里,经过了一番尴尬的交谈,我们才知道原来 HR 并没有将我的两次提薪告知于他。他问我下家给我的薪资,我告诉他是 9K。他想留住我,但是这个涨幅似乎对他来说有点太高了,他犹犹豫豫地问我:能不能给他一次机会,先给我涨薪到 8K,半年后再给我涨一次。我说我去意已决,他才不再多作挽留。最后,他说这是作为老板的失职,他深感抱歉,并且表示他会立马炒掉 HR。他没有食言,几周之后,我收到 HR 的信息,她说她已从 Y 公司离职去了别家公司,问我能不能介绍一些程序员同行给她;我说我会留意的。

经过这次事件,我今后从未再犯跟 HR 提加薪这种流程上的错误。当然,我也没再跟老板提加薪,因为我发现跳槽得到的涨薪幅度比内部加薪的幅度要高得多。

不得不说,我在 Y 公司的时候,虽然薪资不高,但是过得很舒坦。Y 公司坐落于环境优美的深圳蛇口网谷,办公室由工业园内的某个旧工厂改建而成,宽敞明亮,配有吧台和休闲区,是完全的开放式风格。巨大的落地窗将外面的阳光带进室内,使人可以愉悦地敲上一整天的代码。从入职开始,我就在使用我最喜欢的 Mac mini。我住在公司附件的某个小区里,每天可以闲散地步行上下班;房租的一半由公司负担。Y 公司没有加班的要求,但是我与一个要好的同事每天都自愿加班到 8、9 点才走——其实我们是把公司当成网吧了,通常是敲一个小时的代码,再打一个小时的游戏。

到了 F 公司之后,我才头一次体会到了什么是游戏行业的“正常节奏”。F 公司位于深圳南山高新园某座大厦里,环境拥挤压抑。我的工作台也变成了一台残破的 Windows PC。每天都挤着人群、吸着汗臭口臭搭地铁上下班。加班成了家常便饭,但是在宝爷的带领下,我们的热情都很高。我也一度相信,这样高强度的工作会使我快速成长。然而某一天晚上,我在公司附近的餐厅吃饭时,我突然感到了一阵心悸,呼吸变得非常困难。我马上停止了吃饭,到外面宽敞的地方散了散步,做连续的深呼吸,这才使情况好转。

从那天开始,我也在担心自己会在某个寂静的晚上,像一颗螺丝钉掉在地上,不引起任何人的注意。

我开始怀疑,所谓通过技术积累实现自身的价值以过上一种好的生活根本是资本家的哄骗。加班不是因为员工的生产力低下——即便厉害如宝爷也还是无法摆脱加班——加班是资本家降低成本、榨取利益的必经之路。像宝爷这种热爱技术、经验丰厚又具备强烈责任心的人,是资本家所钟爱的;给他们较高的工资和职位,并且让他们肩负起管理的工作,他们会自发地加班。后来,有许多人以主程一职诱惑我,鼓励我好好努力——我不上这个当。主程?谁爱当谁当去。

跳槽到腾讯光子工作室参与《和平精英》的技术架构之后,宝爷曾邀我到腾讯的办公楼参观。期间,他问我找工作的结果,还一度鼓励我学习虚幻引擎,尝试来腾讯面试。我笑笑说,实力不够。宝爷总是在走入更广阔的天地,而我的道路却越走越窄。经过 F 公司与黑白脸公司的洗礼,我的“上进心”被彻底消灭,最终选择到一家“更为轻松”的公司混日子。我说“更为轻松”,并不是指它的工作时间——它依然是一家 996 公司,在被称为“最糟糕的一年”的 2019,我无法找到一家不用加班的公司——而是指它的工作强度。

我所待的最后一家公司是一家初创公司,但它的母公司财力雄厚,在钱的问题上从不吝啬。因此,它似乎也不像许多初创公司一样需要为了存活而累死累活,反而给了我一段优哉游哉的日子。然而我终究没有久待,在 2020 年 4 月 30 日突然辞职而去。带着口罩,不微笑着离开。

me

此刻

此刻的我蜗居在深圳市宝安区的某个角落里,在速卖通上开店已有一个月,出了 3 个订单。我身上还背着 10 几万的债务,希望不久的将来可以还清。

我虽已不再作为一名程序员,却并没有将敲代码这件事放下。我有了自由的时间可以去看自己喜欢的书。我期待自己会慢慢变成一个很屌的人,正如在 2015 年 3 月,我得到第一份工作时憧憬着自己将来能有一番作为一样。


前传:《开始五年的程序员生涯》