听说你想转职程序员?先来读这篇劝退文吧
2023年2月4日
最近看到新闻提到,今年的年后转职潮是历年来最大的一波。这几年转职程序员的风潮一直没有减退,程式培训的课程越来越多。许多转职程序员的培训课程都会标榜工作机会多、薪水高(百万年薪是最常看到的广告词了……)、努力就会有成果等等。
但是转职程序员真的有想像中的好吗? 很可能并没有。先前我有写过一篇《转职程序员之前请三思,浅谈转职的现实面》,里面有谈到一些转职程序员的现实面。例如工程师的烂缺也很多、功能写不出来压力山大、技术每年都在更新让人觉得学不动了。这些都是培训课程宣传中不会提到的。更不用说最近几个月全球软件大厂接力裁员,过去的模范企业都神话破灭,假如在考虑转职程序员,真的要再想想。
即便如此,在年后转职潮,因为自己转职工程师的经历,有些认识的朋友会询问转职的事。我在跟他们聊到转职的现实面时,发现有些让我曾经萌生「我做不下去了」的片刻,并没有写进先前那篇文章中。
因为工作不是人生的全部,转职不该仅用单一面向思考(例如百万年薪)。毕竟转换职涯不是容易的决定,要投入的成本也不小;假如能在做决定前有更多角度的思考,可以避免真的投入后反悔。希望透过这篇劝退文,让在思考年后转职的版友,可以有更多元的思考维度来评估转职工程师这件事。
不仅要能动,还要写得好
在转职期间,许多人大概都经历过写不出来想要拿头去撞墙,起码我自己有过不少这种片刻。但是真正转职成程序员后,写出来能动、如预期的功能只是最基本的。特别是薪水高的大厂付钱请你来工作,对你的期望不会只是写出来能动。你会被预期写出效能好、安全性佳、好维护好扩展的程式。假如你有无限时间,大概不用担心这件事。但现实是在实际工作时,大到产品、小到功能,每一个都有期限,晚一天上线都会造成商业上的损失。换句话说,你会被预期在有限的时间内,写出好的代码。假如做不到,你会背负非常大的压力。
我自己在刚转职时,常常写完觉得功能都正常松了口气后,就会在 code review (代码审查) 收到很多直接的评论。一般的同事六点就下班,但我为了修改我的代码到能通过 code review ,往往要弄到晚上十一、十二点。即使当时在的公司不是强度特别高的公司,多数同事没有加班的状况,但加班还是成为我的常态,只因为我的基础不够扎实,导致要优化修改的东西太多了。
收到这些评论固然挫折,但假如没收到往往更惨。举我一个前同事的例子,先前我们有个在线上的事故,是因为写一个过慢的 SQL 查询语句,导致线上的资料库服务器堆积了大量请求,造成后面堆的请求都超时,终端使用者的请求失败。对使用者来说,就是功能不能用,然后就被回报出事故。修复完问题开检讨会议时,我看他一脸压力超大。他是名校本科毕业的都会出这种包,如果是转职少了扎实的基础训练,写出时间复杂度差的代码,当出事故结果查出来原因在于自己写的粪代码,那个当下真的会让人想要找个洞钻进去躲起来。
我觉得这是考虑转职的人一定要想清楚的,现实多半不会是你转职后就能惬意地在海边,当数位游牧写程式;而会是在同事们都下班后,你还为了能写出来、为了能够写好而挣扎到深夜。
以为学好技术就能掌握工作,但其实不然
很多想转职工程师的转职理由是可以专注在技术面,可以不用去管那些跟人打交道时的狗屁鸟事。然而,如果你的转职理由是这样,必须跟你说这很可能不会发生。即使你克服上面提到的技术问题,写出的代码不仅功能无误,效能也好,仍然是不够。在现代软件开发,与不同利害关系人打交道,占程序员工作很大一部分。
假如是写应用程式的工程师,跟产品端的沟通协作是少不了的。网路上可以看到很多工程师与产品经理交手时的不愉快经验,看看靠北工程师或者 Blind (一个多数程序员会用的论坛) 上面的怨气,你就会知道你的工作不会只有纯碰技术,人与人交涉会遇到的鸟事绝对少不了。
退一步来说,就算你是往底层去做基础架构的工程师,你的工作中仍会有非常大量的沟通。特别是如果你想要往上爬,在工作中需要的软实力占比会更高。先前前读 vgod (一个保送台大然后拿到 MIT 博士,目前在矽谷做到 L7 级别的工程师) 大大的文章,他提到很多人没办法突破资深工程师的天花板,无法从资深进到主任工程师(L6 ),多半不是技术能力不足,而是少了沟通、专案管理、跨团队合作等能力。
特别是工程师不像管人的经理,多半没有实质的权力去叫别人做事,因此需要靠技术愿景来说服其他人,这件事对保送台大计算机拿到 MIT 博士的 vgod 可能不难,但对于转职的工程师,难度会很大。我先前提出一些技术观点时,同事们就提出很多质疑与挑战,以及提出不同的观点。同事提出的点很多甚至是我过去没听过的 (例如某个不同的设计模式),因为缺乏札实地底,我需要额外花更大的力气去研究,然后回头试着再跟同事讨论一次。
上面提到的沟通问题会因为公司规模或专案规模变大,而变得更加困难。以我自己在软件大厂的经验来说,大型软件专案的开发,会需要同时非常多不同组的人。而人一多,自然各种拉里拉杂的不愉快都可能出现。之前看过一篇 Amazon 工程师写的文章,在讨论一般同事跟好的同事。他提到他在 Amazon 遇到的跨组合作,很常会遇到对方说「这不是问我」,或是翻来覆去、一直跳针。
我自己对这类状况完全心有戚戚焉。举例来说,先前我去找相对应业务的接口问事情,结果对方说不是问他,或回说不是他该负责处理,然后就没了。我收到这种回覆只能大傻眼,该业务就是你们组负责,你也是负责的项目对接人,不问你我问天?
这种无奈感不是单一案例,而是经常会出现的。因此,假如你想转职的原因,是因为过去跟其他职位的人打交道让你不喜欢你原本的工作,这问题不会因为转职成程序员而消失。
Oncall 轮班
多数职业没有 oncall 这种东西存在,但偏偏程序员这职业就有。有些职业的轮班是轮到大夜班但白天不用工作,但程序员的轮班不是换到晚上工作,而是要 24 小时待命,没错是 24 小时,收到通知随时要回应。换句话说,你白天的班还是要上,只是晚上睡觉时,你要随时待命,因为可能会突然被叫起来修东西。
这主要因为现代的软件多半是全球化的,举例来说,一个 App 的使用者可能来自全球。所以即使你在的时区现在是晚上大家都在睡觉,其他时区也可能有大量的活跃使用者。但其他多数职业没有这种跨时区的问题,所以下班睡觉也不太会有被叫起来做事的情况。
我转职成工程师前,看别人在讲 oncall 都没感觉,直到自己轮 oncall 后才知道有多可怕。 oncall 的可怕在于,你遇到在线上发生的问题,你根本没有碰过那部分代码,所以你要在很短的时间内搞清楚发生什么事,然后找出问题点,然后在很短的时间内把问题修复。假如处理不了,还要大半夜时很不好意思地打给其他同事,叫醒其他同事一起来帮忙修……。
除此之外,轮到 oncall 那周会很明显感受到生活品质变很差,特别是如果有半夜被叫起来处理事情的时候,整周的心情指数都很低。我们组有些同事是有小孩的人,同时有小孩半夜会起来哭,然后又有 oncall 的东西要处理,真的是超级崩溃。假如你打算转职程序员,先想想这真的是你要的吗?
裁员与 PIP
很多提到转职程序员的文章,都会讲到程序员的工作机会多、就业市场好。但事实是,软件公司雇人不手软,裁起人来更不手软。在 2022 年末到 2023 的现在,几乎看到公司层级的大规模裁员,多半是软件与科技公司。大间一点的公司,裁起人来都是以万为单位。
事实是,你其实没有那么不可取代。 Google 今年的大裁员后,就有新闻报导任职二十年的资深工程师,甚至名字被冠上某个演算法名称的大神工程师,都会在隔天早上起来发现自己已经失去所有权限,然后仅被一封 email 告知被裁了。除非是自己创业,不然当工程师本质上仍旧是个打工仔。任何打工仔在资本家面前,都是随时可替换的,只是有没有轮到你而已。
在景气不好时,程序员被不手软地裁;但在景气好的时候,还有另一个可怕的问题要面对,它叫 PIP (Performance Improvement Plan) 制度。所谓的 PIP 就是会把绩效排名比较差的人,放到一个改进项目中,然后在一定期限中如果没有改进,就会被炒鱿鱼。虽然说 PIP 美其名是个改进绩效的机会,但实际上真的在 PIP 后还留下的人,非常之少;多数人被放入 PIP 后,基本上都意味着要准备被炒鱿鱼。几年前就有 Facebook 的工程师,因为被放到 PIP 压力太多,最后跳楼自杀的新闻。
除此之外,有些软件大厂会有 PIP 额度,换句话说工程经理一定要把某个比例的人放到 PIP 中。你可能会问,假如整个团队的人都表现很好的话,那要把谁放到 PIP 当中?
这是个好问题,因为这延伸出另一个大厂常见的扭曲现象 — 雇完即炒 (hire to fire)。这是因为工程经理实在没办法挑出一个要放到 PIP 的人,既然如此,就招聘新人,然后把招进来的新人放到 PIP 当中。这是为什么进到像 Amazon 这类大厂,一定要先打听好组上的状况,确保自己不会进去就准备被裁。
对于转职的人来说,要能在竞争的绩效考核中生存、要确保自己不会被 PIP,会需要付出更大的努力。当你在思考转职能带来的好处时,也不要忘了你没有铁饭碗、可能被 PIP 掉,都是你要承担的潜在风险。
当高墙挡在你的面前
以上这些点是补充先前《转职程序员之前请三思,浅谈转职的现实面》没谈到的,或是谈不够深入的。主要是希望给在考虑转职的人,多一些思考面向。当然软件公司很多种,上面提到的也不必然会出现在每间公司。只是要有心理准备,因为转职成程序员,都会有机会遇到这些问题。
不过话说回来,假如你在通盘考虑后,仍觉得想要转职,那就努力朝着这条路前进吧,不要因为这些因素而阻挡了你自己。这边送上一句已故教授 Randy Pausch 在他生前的最后一堂课中分享过的这句话「眼前的高墙不是要挡着我们,而是要给我们机会来证明我们有多渴望向前」 。
The brick walls are not there to keep us out. The brick walls are there to show how badly we want something. Because the brick walls are there to stop the people who don't want something badly enough. They are there to keep out the other people. — Randy Pausch
假如看完这篇劝退文,你仍想要转职。在 ExplainThis,我们汇集了网页前后端程序员的面试问题与详解,免费分享给在面试路上努力的你。最后,不论你有没有转职,都祝你能朝着自己理想的职涯与人生前进。