“毕业”与找工
日记
近一年来在工作上面临着较大的变化,一方面因为不可抗力因素,一步步放下念想,离开腾讯,也离开了在线教育行业;另一方面,自身开始有了一些“价值”视角的感知,也以此重新思考自己在业界的定位,还有继续积累的方向。
如疫情催化下的互联网一般,一切都来得比预想中更迅捷和猛烈,虽有一些预期,但确实略有些措手不及。近期尘埃渐定,在这逐步走向平静的时光,也写写我最近关于找工与跳槽过程的一些想法和考虑吧。
在 IMWeb 的最后一年
自 19 年开始在教育 IMWeb 团队实习、工作至今,我大概算是团队少有完整经历过 ABCmouse、辅导与课堂三大业务的新人吧。经历过一点点打磨产品与推广的探索、疫情下井喷增长的浮躁,也经历着政策打击下的迷茫与衰落,目睹着身边同事一个个离开,最后自己也离开了这里。
实习时的经历,2019 年的总结有过 记录,做了很多关于小程序、管理后台向的开发;毕业后来到辅导团队,接手的是一个技术债务较重的模块,在与众多 bug 的斗争之间,跟着需求一步步走,慢慢有了许多修改的想法和思路。
到了21下半年,“双减”落地,业务挣扎转型,计划是复用已有的模块开发新 App,结合近一年来的斗争经验,设计新的方案,借机在新 App 完成了整个模块的重构。然而新 App 上线计划遥遥无期,大家空转许久,隐隐约约带着一些危机感。
空转的同时伴随着难得放慢的工作节奏,我也在思考工作之余技术提升的方向与下一步的选择。3月的某天,因 dexteryy 的一条 豆瓣动态 有些触动,看起了《花束般的恋爱》。说起来也挺戏剧性,当时我正看着陷入无尽工作无暇陪女朋友玩塞尔达的男主发着呆,接到 leader 电话:“业务最后还是凉了,近期可以多看看外面的机会”。
所幸有玩过 120 小时
接下来的几天在整理和准备简历,隔壁课堂 leader 问我有无兴趣做 Web 音视频。想来有些心动,我本科毕业两年不到,项目经验尚且不太充足,其实更适合留在团队积累。至少背靠一个收入稳定的业务,恰好填补核心模块的人力空缺,有高级工程师领路,并能在工作中专注于某个有深度的子领域进一步提升,个人价值和自我技术成长都能得以实现和发挥,综合看确实是比较合适的工作状态,所以选择留下加入了课堂。
三个月来还算开心,工作上推进的都是纯纯技术需求,不必和产品设计周旋太多,上下班节奏总体可控。虽然平时看脉脉微信群等都在传各类裁员计划、工作难找等等焦虑和抱怨,但想到自己所在小组恰好是一个人负责一个核心模块的状态,并无多少人力冗余,要裁也没啥好裁的,于是我也“何妨吟啸且徐行”,没有太关注 LeetCode 或 “八股文”,更多时间在研究 WebRTC 和 Web Media API 相关的东西。
原以为日子可以如此平静度过,同样戏剧性的是,前一周还在新的小组 team building,刚送别辅导最后一位同事后不久的我,收到消息,因为更高层的战略调整,很不幸我也受到波及,需要自己寻找新的机会了。因此让我被迫加速调整计划,后来便有了接下来的故事。
所幸一路上遇到的 leader、总监们都足够 nice 且真诚,找工过程中给了我不少的帮助和启发,也感受到他们被迫抉择中的无奈,只是有的东西同样并非他们能够决定。近期各种互联网公司称裁员为“毕业”有过强的美化嫌疑,但对我这一个本并未抱太多预期、以类似一种读研心态在此工作的校招生而言,职业生涯第一站的结束,好像又与“毕业”有一丢丢的相似,只是说,这个过程比预想中仓促不少。
感触更深的是,时代的一粒灰,落到个人身上的重量。
工作的稳定性
近几个月身边最让人焦虑的还是“工作稳定性”的话题,通常“互联网大厂”、“事业单位”、“公务员”等标签是“稳定工作”的象征,人们趋之若鹜。而随着“大厂”的裁员、教师、公务员等的降薪,可以看到的是传说中的“铁饭碗”也逐渐掉下神坛,留下的是强烈的不安全感。拨开各种标签的面纱,有一个问题值得关注的是,究竟何为“稳定的工作”?
这个问题我想过很长时间,目前一个结论大概在于“平衡”。如牛顿的二力平衡一般,动力与阻力平衡的情况下,才能够保持一个匀速直线运动的状态;于工作而言,一方面是创造价值获得收益,另一方面是自身薪酬成本,收益和成本之间能够达成平衡状态,是维系商业活动平稳发展的一个基础。
个人价值的发挥,需要依托于分工合作而非单打独斗,就有了类似“公司”(或者说“平台”)的实体,分工合作下创造的价值,需要有一定的机制去做分配。当公司业务体量、人员到达一定规模,价值分配的难度也越来越大,带来一定程度的内耗。当这样的内耗超出个人能力范围,慢慢地「创造」与「分配」两者间也愈发割裂,后者逐渐占了上风,乃至于许多人在工作中的个人价值无形中也依附于此。通常我们只停留于“平台”的抽象概念之上,很难体会两者的差别。
行业增长迅猛的阶段,尚且还能容纳如此相对较重的内耗;当增长放缓乃至走向衰退,蛋糕已无法如过往预期那样快速做大,思路也变成了如何让切蛋糕的人少一些,若此时个人的关注点还放在「分配」和「消遣」上,对「创造」鲜有行动的话,难免未来在某个时刻面临巨大变动。这一点无论体制内外差异不大,只是时间周期的不同,如《杀死那个石家庄人》的一句歌词:
“如此生活三十年,直到大厦崩塌”
宏观的历史行程便是如此,转回在我身边的“程序员视角”,关于「软件工程师」这一职业的价值如何体现?想来其实更多的是,借助自身对计算机的了解,设计和运维软件、解决人与人、人与机器、机器与机器信息互通的问题,帮助用户更好地满足某些需要,乃至于创造出新的工作模式和方法,构建出能够相互成就、共同做大蛋糕的新秩序。
在成就用户价值的同时,工程师本身也以各种形式(买断 / 会员订阅 等)从中分得一部分,也由于软件具备极低成本复制的属性,用户达到一定规模,收入得以积少成多;或者还可以另辟蹊径,借助规模效应,通过广告等形式从第三方间接获得收益。当其收益与个人所需能持续达成平衡,也就意味着这一岗位在商业世界有了基本的稳定性。
然而现实并非计算机的一板一眼,存在许多混沌,很多时候个人命运可能就带着点天时地利人和的成分。世间变化无常,人生而有涯,世界风云变幻与纷繁复杂中,作为个体只是其中微不足道的部分。在这个背景下,可以说各方面都理想、始终不变、可以从一而终的岗位其实并不存在,可能只是一个半衰期的分别,从几个月、几年到几十年不等。
既然如此,不妨把一份工作的时间预期放短一些,在一段时间里,在自我成长的视角能有所收获,其实已不虚此行。带着一点方向感和危机感,当未来某天发现有机会可以让自己往心中理想方向靠近时,再试着去冲一冲就蛮好。
「平衡」的更多角度
刚刚讨论的是创造价值与个人薪酬之间的平衡问题,将「平衡」二字再进一步展开,还有更多的角度,无论工作、事业与生活,理想与现实所需,家人朋友等各种人与人的关系等等等,也许这也是我们所需面对的社会的各种复杂。
这里也说下我眼中关于「平衡」的两个比较重要的角度,一是“工作”与“生活”的平衡,二是“工程师”与“黑客”角色的平衡。
Work-Life Balance
工作与生活的平衡(WLB, Work-Life Balance)这一表达会有些割裂的感觉,退休前的人生接近 1/3 的时间会在工作中度过,我更倾向于把工作作为生活的一部分看待。只是说,我们因为生存和发展的需要,出卖一部分体力 / 脑力,为他人解决现实问题,获得相应的报酬。而生活不仅有工作,学习成长、家人朋友的相处、兴趣爱好、娱乐消遣、社交活动等等,也是其中重要的部分,这里说的 Life 更多侧重于于此。
那么我们追求的 WLB 究竟是一种什么形态?我想应该在于在时间角度下,工作与非工作之间相对明确的「界限感」,可以明确除意外情况下,一天中哪部分时间卖给公司,哪部分留给自己。生活的更多可能性,在界限明晰的基础上,有了稳定的时间预期,才得以稳定的发展。
而国内的互联网公司“弹性工作制”下,通常在一个工作生活杂糅一起的节奏中度过,下班时间通常相比其他岗位后移一两个小时,在项目忙碌时期,下班后还可能继续被工作繁杂事务所侵扰;可能也因为工作成果难有明确标准去做衡量,为了在管理者视角获得一个良好的印象分,常容易陷入一种“假装忙碌”的状态。工作日里那些属于 Life 的部分,不知觉也被切成了碎片,仅有的周末更大的想法只剩下放空和休息。
芭芭拉 · 奥克利教授的《学习之道》有提到一个「发散模式」的概念。大致是说,人脑在经历一段时间的专注后,思维会陷入局限,一段放空和发散的时间,可以更好地让当前所接触的信息和已有的记忆间建立关联,产生新的想法。
在这个视角下,明确工作和非工作时间的「界限感」对工作而言其实更有好处,非工作时间的活动看似与工作无关,但转移注意力的状态下,更有利于让大脑摆脱一天专注投入工作中的思维定势,工作外不同视角的信息输入,也可能带来更多的灵感,让第二天的工作在一个更饱满充实的状态。低水平的恶性内卷已逐渐行不通、需要更多更深入的思考沉淀的当下,这一点尤为重要。
Hacker vs Engineer
当「写代码」这一爱好成为了一门糊口工作,生活似乎也开始变得单调不少,也迫使我开始找寻「写代码」这件事在不同视角下的分别。想来可以分为两点:从爱好的视角看,写代码的状态在于《黑客与画家》的 Hacker 角色,和音乐家、作家、画家等创作者一般在做艺术创作;从职业的视角看,写代码的状态在于一名 Engineer 角色,就如上文说的,设计方案、解决问题、赚取 money。
在创作的视角,黑客会把程序当一份作品那样看待,关注点在于其内部结构和设计的优雅,还有代码跑起来的乐趣与成就感;在工程的视角,大家往往只会关注 It Works!
,对于设计是否优雅,客户更关注的是这份“优雅”是否能为 ta 带来额外的价值,若不能,客户一般也不会有为之付费的动力。这便是写代码这件事在「艺术追求」与「解决问题」之间的矛盾,也如许巍口中的「诗和远方」与「眼前苟且」的矛盾、毛姆笔下「月亮」与「六便士」的矛盾一般。于工程师而言,就很需要一种根据现实资源的多寡,接纳与控制“优雅程度”,达成需求方预期的能力。
显然这又是一个「平衡」话题,在现实的理想主义的视角下,关注点也在于,如何在现实中构建出一个适合纯粹技术探索的环境?这个问题《黑客与画家》有提到一点解决方案:
黑客如何才能做自己喜欢的事情?我认为这个问题的解决方法是一个几乎所有创作者都知道的方法:找一份养家糊口的“白天工作”(day job)。这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,“白天工作”的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。
比较合适的做法也正是,把工程师这一职业作为一个“白天工作”,黑客作为业余的爱好一部分进行。幸运的是,与当时的创作背景不同,开源软件席卷世界的当下,工程师们的“白天工作”也可以有一部分“黑客”气质的发挥空间。
找工历程
决策
首先需要明确的是我所在的位置,一切的行动都立足于此:
- “211” 本科计算机专业毕业,“大厂”实习1年 + 毕业2年的前端工作经验
- 自高中开始接触 Web,架过多个网站,在领域有相对丰富的经验积累
结合短期内工作稳定性的考虑,大概可能有两个思路:
- 继续依托平台(体制内 / 新的“大厂”)
- 回归最根本:创造价值 / 自身薪酬成本平衡
第一条路而言,我自己已是社畜模式,冲体制内和学生相比不占优势,且工作的自由度相对比较低;大的互联网平台型企业方面,深圳还在扩张招人的就只有字节跳动和虾皮,一方面面试竞争激烈,且保不准经济形势再恶化的话,岗位进一步的内卷化,可能也会面临新一波裁员。(ps: 本文发布时已是9月,字节跳动开始“去肥增瘦”,虾皮也在准备裁员)
依托大平台的抽象这一条路渐渐走窄,那么就硬着头皮选第二条路,不再依赖于平台的抽象,放下一些所谓“身段”,从最基础最务实的搞钱做起。进一步梳理展开,涉及到工作内容的匹配程度、薪资水平、是否 work life balance、雇主的品牌知名度 等等方面的需求。
根据我自己的情况,还有「平衡」与「专注」的主题,优先级大概是 wlb > 匹配度 > 薪酬 > 品牌能力背书:
- 毕业两年来日常较晚下班,虽工作上的项目规划、沟通等软技能上有许多进步,但最核心技术硬实力上的提升确实有些瓶颈,目前需要更多 读书 / 学习 / 社交 的空间,工作和生活时间上相对明确的界限感
- 薪酬不是优先考虑的部分,本身自己属于羁绊不多、物欲相对较低的类型,且下行时期,投入与回报并不总成正比,能持平已足矣,不得已可考虑适当降薪
- 品牌背书而言,“大厂”职级对我不是太关键,这方面搞搞开源代码相对更靠谱一些,且有自己折腾博客、社区、构建 IT 文化的经历去支撑,在预期其实可以起到更好的背书作用
陆陆续续和身边同事朋友、猎头等吃饭聊天,慢慢地意识到,想要找务实且现金流健康的业务,出海市场可能会是个更合适的方向。相比于国内粗放的“大而全”,海外用户更倾向专注细致的“小而美”应用、独立品牌等,它们虽不像大厂一般着力于大规模扩张,但能积累到一定量的客户群体,服务好他们,至少养活自己不是问题。长期专注于一个业务方向,也少很多不必要的内耗,无论自己还是业务都能有个踏实积累成长的状态。
在生活与地理位置的考虑上,我更倾向于留在深圳。结合自身情况收集了一些相关的信息,具体企业的倾向上,大致有几个选项。一个心水的是 MoeGo,它主要做宠物行业的出海业务,技术上侧重于构造 UI 体验优良的产品,以改善客户工作中的流程体验。综合看,无论技术还是业务方向都相当务实,结合我自身情况和需求来看,是比较 match 的状态。
另一个比较心水的是 Flexport,属于硅谷 Startup 在中国开设的研发分部,工作生活相对平衡,但其技术栈相对偏后端,与我这两年在前端 UI 开发领域的积累有些偏差,且我自身在相对硬核的编程基础方面目前还比较吃力,就作为一个备选项进行。与此同时加上字节跳动、Shein、FydeOS 等等作为备选,还有其他一些薪资降级一些的小公司作为一个“保底”。
简历
写简历这件事,目标其实很简单,以最快的速度,让目标公司大致了解候选人的背景,对候选人过往已有的能力积累、未来的发展方向和愿景建立印象,以判断是否 match。
一切的开始,是“复盘”过往经历中做过的项目,看这背后有什么与目标岗位相关的亮点可以挖掘。思维框架上可以参考 “STAR法则”,从情境(Situation)、任务(或 目标)(Task)、行动(Action)、行动的结果(Result)这几个视角,组织做过的事,整理上可以用一些大纲、脑图工具做辅助。在内容的视角,「行动」与「结果」是招聘者最关注的部分,有时候我们在下意识的自我中心下,会在简历写上很多自己视角下的小细节,想来其实不必,把更详细的内容留给面试环节再展开,简历作为一个引子就好。
简历只是辅助了解一个人的工具,背后更关键还是自己真正有过的积累,还有背后代表的成事的能力。他人通过各种蛛丝马迹,旁敲侧击地去判断候选人是否足够靠谱和值得信任,这时若有一些客观的工作量证明,可以为这个判断过程带来更多的帮助。类似公开的博文、社区的讨论(StackOverflow、知名的技术社区等)、阅读、开源代码(尤其 GitHub 的记录)、经手项目的影响力,乃至于行业人士的背书等等。大学院校背景、知名互联网公司的职级等,也是一些相对有力的参考维度,但对于 IT 技术岗,相比前者而言说服力可能稍弱一些。
从我实际操作来看,折腾 0xFFFF 论坛 组建社区的经历,给我找工和面试过程带来了不少助力,或许在市场中,相比普通的博客、公众号、LeetCode 和八股文而言,这玩意歪打正着地给了雇主一个更新鲜的维度。再回看刘未鹏的《如何花两年时间面试一个人》,也是深有共鸣、感慨颇多。
简历整理的差不多,需要将思考的结果其落于纸上,最早我是用 XMind 梳理的脑图,但在投递上至少得有个能打印的 PDF 文档。那么就得考虑排版的问题,想到 Word 混乱且让人窒息的富文本排版,确实有些劝退。恰逢 @Zilize 开源了他 用 draw.io 做的简历模版,刚好可以一用。
试了下 draw.io 体验上还是有些复杂,排版而言或许用 HTML + CSS 会更加直接?毕竟网页最初的设计,其实还是以表达“文档”为出发点。说干就干,直接对着模版设计稿开搞,CSS 处理好页面 padding、断页策略等等,页面写好以后直接用浏览器自带的打印功能输出 PDF。
实际操作下来,整个过程行云流水、一气呵成,除了能够精确控制排版以外,内容甚至还可以用 Git 来做版本控制,每一个改动细节都可以 diff 的一清二楚,适当再 release 出一个版本发给 HR,可以说非常合适我的需要。
面试
面试这件事,简单地说,是一个相互考察、建立信任、彼此做出选择的过程。前端方面的岗位的面试,在圈子的浮躁节奏影响下,似乎有点异化为 LeetCode + 各种 Web 框架 API 细节八股文的背诵狂欢,感觉上有点点本末倒置(甚至还出现了各类 面试题集锦 or 硬背八股大全 等根本不是一个人短时间能接受的信息量的东西)。在这方面如果过于走火入魔,除了制造内卷式焦虑、增大整体的面试成本以外,自认并不能为实际的工作带来太多额外的价值。代码和算法能力,只是岗位能力要求中的一部分,且前端岗位对此并不会很苛刻。
因此,相比于强行“刷穿 LeetCode”,我更青睐于贴合现实问题的场景去准备,刷算法题的作用更多是稍稍累积手感(只关注 Simple / Medium 的难度)。对于一些常用的类库的使用、Web API 等细节,网上许多八股文集锦已嚼的足够碎,随机挑一些重点考察的点,试着用自己的话回答一下,查漏补缺、找找感觉就可以,而不需要刻意去“背诵”(它们真正的价值在于“问题”视角,而非“答案”)。
找工作时看过的一些相对靠谱的资料:
相比于纠结于面经、技巧等,我认为更好的状态是,作为面试者做到真诚地表达自我,公司也真诚地展示自身情况、能力要求等;这样双向交流的过程,在潜移默化中彼此作出选择,就不会有太多的阻力和不必要的内耗。实际体验下来也确实如此,毫无感情出八股题目、手撕算法题等基本让我直接劝退;从简历项目经验视角出发,一起去展开讨论一些话题,再简单写一些业务场景相关的编程题,体验感会更好一些。
心得
经过一番自我审视与刷题斗争,最后确定来了 MoeGo,宠物护理是个非常有爱的领域,且预期可以实现相对平衡的工作生活节奏,恰合我意。数周下来,感觉无论老板还是身边同事也特别 Nice,几乎没啥内耗,工作中注重深度本质的思考,解决问题、重视交付质量的导向,体验确实很不错。在适应新工作的同时,也开始逐步重建自己的生活,那些过去没来得及做、没来得及学的事情,终于可以试着把它们一个个推起来了。
准备简历之余,读了刘未鹏的《我在南大的七年》,想来我自己本科入学至今也第七年了,和作者似乎有些相似的心境,也感受到我自己和作者无论思想还是所在的环境、氛围存在的一些客观差距。印象深刻的是,作者提到自己在研究生期间所经历的“密度很高的学习与思考”,大致也是我近期在尝试并希望达成的状态。
我想,虽然有很多人本科就明白自己想做什么,我多花了两年多,总还不算太晚。
现实而言,不知是否大环境下行背景下的市场环境的恶劣,程序员薪资相比其他职业高一些的缘故,能感受到涌入前端开发方向的人越来越多。也隐约意识到作为一名传统意义上的前端工程师,在进一步发展下,个人竞争力方面可能面临的局限。前端开发再往上走,主要在于两个方向:
- 更强的产品意识、往用户体验方向,更深入积累经验
- Full-stack 方向,有能力 cover 住从用户到数据库的一整个流程
也在其中几方面梳理下我自己面临的短板:
- 算法:基础相对薄弱,缺乏训练,面对面试八股题几乎全凭运气
- 英文:仅停留书面的阅读,口语方面较弱,交流仍有些许障碍,未来若面向出海市场、想要有更广阔的技术视野,这一点是需要克服的
- Web 开发:进一步发展而言,选择面有点窄,对于基本业务 UI 而言,React / Vue 和其上的开源组件库已解放大部分的人力,且在使用层面已无太大技术挑战(React 18 甚至都卷起了一般不会带来太明显体验差异的 concurrent 渲染模式);要求精细还原视觉体验、强客户端交互的 UI 开发岗位已相对较少,面临就业市场供过于求的瓶颈,自身不太占优势,逐渐流于“熟练工人”状态
- 后端开发:对后台业务、数据库、中间件等了解有限,但这是接下来业务开发的重心
- GitHub:虽然积累了点 Star,有了些许影响力,但是 没有自己完整且有深度的作品,基本是在其他人方案的修修补补扩展,不很踏实
由此得出,接下来我可以发力的几个方向:
- CS 基础:算法、数据结构等基础填补、肌肉记忆的训练
- 英语学习:适应英文语境的思考与表达,尤其是听力和口语方面
- 后端:关注系统设计能力,类似 Nest.js / Laravel / Spring 的 IoC 核心思想、关系数据库、缓存的使用等,可以 hold 住各类计算机与复杂现实业务逻辑结合的中小型业务
- 前端:跳出纯浏览器,往客户端开发方向延伸,主要关注 React Native 等跨端方案和一点原生开发,目标在于可以设计出相比纯 Web 而言,交互体验更加优良的软件产品
- GitHub:寻找尚未被完整开垦的细分领域,造点属于自己的轮子
回顾这几个月,虽经历不少无奈,但总的而言算是稳步前进的状态,大的方向依旧还是「平衡」与「专注」,这一次的跳槽,也算往理想的状态又靠近了一些,感谢过去一直在思考和努力的自己。
生命是一场通往幸福的航行,希望当下和未来的自己,可以继续保持一颗平和的内心,面对生活的风浪,可以多一些从容吧。