共计 7046 个字符,预计需要花费 18 分钟才能阅读完成。
2021 年还剩 2 个月,程序员如何在业务与技术中成长?
大家好,我是皮汤,是字节跳动往年的校招应届生。
在之前的 字节跳动的实在工作体验 中,我和大家聊了聊我在字节的头 6 个月,感触到的字节薪酬福利、工作节奏、成长与积淀相干的内容。这篇文章收到了很多有意思的反馈,感激很多敌人可能转发我的文章,如 ssh、启舰杂谈、菜鸟教程、秋风、三元,若川、还有可恶的内推熊🐻,多亏他们的帮忙,可能让我的文章被更多的人看到,也能与很多有意思的人成为敌人,同时也感激程序员巴士的粉丝激情的转发与分享,让本人的亲朋好友也可能发现我,意识我 Thanks♪(・ω・)ノ。
而最近,整个工作、生存又有了很大的变动,首先是我刚刚参加了人生的头一次,在字节的工作绩效评估考核并且获得了还算不错的后果;其次就是字节教育进行了组织架构调整,而我与身边的共事们一起进入到了新业务部门,面对的业务场景与技术栈产生了很大的变动;所以对于本轮绩效周期的总结以及在 2021 年只剩下 2 个月的工夫里,尝试对将来在业务、技术、团队倒退方面做一个思考与瞻望。
字节跳动的薪酬理念
字节跳动提倡“以能定级、以级定薪,以绩定奖”,每半年会对级别和薪酬做一次 review,相当于从新做一次招聘。正是这种高频率从新评估的节奏,有利于随时揭示本人不能停留在原地,须要一直的思考本身在业务、技术、团队中的地位,以及基于本人的能力加上致力的学习,本人能失去什么产出?
第一个绩效周期,自身我对这个评估形式、评估后果是没有预期的,只是想着可能去挑战一下本人的能力边界,所以跟随着工夫做了很屡次尝试,接下来我将与你具体聊一聊这些尝试。
工程师须要高效解决问题
我在字节的这半年次要负责 A 我的项目相干的业务开发与技术建设,尤记得正式入职一周拿到的第一个需要就是一个巨无霸需要,为 A 我的项目的题目编排提供欠缺的 PPT 相干能力的反对,包含能够新增多种元素:一般线框、图片、音频、视频节点等,而后能够在一个坐标系下,对这些节点进行操作,如组合、对齐、对齐线、吸附,还须要提供菜单栏和快捷键操作等来进行元素挪动、层级调整。
值得一提的是,原本我能够将这个需要的大半都分给我的 mentor 去做,然而为了谋求挑战本人,我被动承当了绝大部分需要。
拿到这个需要我的第一反馈就是如何没有脉络,因为之前很长一段时间都是间接应用下层框架如 React、Vue,操作数据逻辑解决一些功能性问题,这次的需要显然须要下沉到 DOM 侧,须要对 DOM 操作、事件处理等方面有比拟粗浅的理解,而基于选中元素弹出菜单栏以及菜单栏执行肯定的操作又波及到 Web 的另一个沉闷且浅近的畛域:编辑器。
身为一个刚入职的校招生,拿到一个细节极其简单,且业务倒逼开发工夫的需要,显然给我带来了微小的压力。压力次要来自两点:第一我对排期没有什么概念,不晓得这个需要到底几天能够搞完;第二就是这外面波及到很多我忘记的知识点,可能须要花很长一段时间去补齐这个方面的常识。
因为这个需要,我在刚入职的那两周,有很多天都是早晨 11 点多上班,甚至在快要交付的那几天,熬到了凌晨一点多,也一度因为这个熬出了痔疮。。(当初好了)
实际上一开始我是尝试从 0 开始恶补 DOM 相干的常识,甚至翻出来以后的圣经《JavaScript DOM 编程艺术》,然而看了 2-3 天发现光看书都要花一周多,理论排期又只排了两周,剩下一周开发完危险太大,于是就开始尝试第二条路子:找开源代码,于是祭出我多年修炼的代码查找功力,整顿了好几个相似的我的项目,然而发现大多是 React 写的,而 Vue 写的性能又不齐全和我的需要吻合,咱们过后团队中后盾我的项目绝大部分都是 Vue 技术栈,所以我有两种抉择:1 是我把 React 我的项目代码看懂,而后用 Vue 实现一遍;2 是我看懂 Vue 我的项目代码,而后本人去解决剩下的问题。过后的我在面对这种抉择时没有什么可值得借鉴的教训,索性就硬着头皮先看起来。
一开始我尝试花了 2 天工夫看懂 Vue 我的项目的代码,发现从现有的我的项目里去承接需要革新和新性能实现还有不少工作要做,于是我咬了咬牙持续看了 React 我的项目相干的代码,后果发现这两个我的项目之间共同点很多,能够很好的造成互补,而技术栈的切换其实并没有设想的那样艰难,而绝大部分性能实质上思维是统一的,只是换了个不同的写法。随着看代码的深刻,我开始了解了业务需要中实现须要的技术和思路。
有了现成的思路做撑持,加上我对性能需要的梳理,很快我便缓缓实现了这个需要,有惊无险的交付了这个需要。预先复盘之后我得出了一个情理,在拿到一个简单需要时,不要要急着细究技术点,而后开始啃书,这样只会显得效率低下,解决问题能力低下;而是要学会调研现有市面上已有的我的项目、产品,而后钻研他们的实现,参考前人的教训,站在伟人的肩膀上解决问题;通过这种形式,不仅学习了大牛在理论我的项目中如何应用 DOM 去解决简单的性能需要的,还换了一种形式从新复习曾经忘记的常识。
工程师须要正确的解决问题
来到字节学习到的第二件事件就是工程师也须要洞悉业务痛点,须要应用最简略的方法解决看似简单、多依赖问题。
尤记得工作过了 2 月无余,开始可能稳固的解决各种需要了,然而发现了一个奇怪的景象,咱们保护的 A 我的项目常常会有 oncall(一种字节外部的反馈机制)反馈图片相干的问题,尤其奇怪的是这个图片相干的性能咱们应用外部提供的一种图片解决服务,按理来说不会呈现问题。
这个图片服务目前曾经商用了,详情参看火山引擎图片服务:veImageX。
这种图片问题的一种特色为 PNG 图片在上传之后,通过 veImageX 无损压缩解决会变大,What?压缩还会变大?我没有听错吧?
后续理解到 PNG 类的压缩算法,因 PNG 格局的差别,在无损压缩时的确存在变大的状况,大略会变大 2.4 倍左右。而这个图片变大对于重视体验的客户端来说是不可承受的,客户端强要求图片须要小于 100KB,然而咱们之前因为流程问题原本对图片的限度就曾经放宽到 150KB,而通过压缩变大之后,图片高达 300+ KB。
通过近一步剖析,发现 6 条业务线都依赖于这个图片上传服务,从 A 中后盾我的项目开始,通过 B 我的项目,而后将数据散发客户端,波及三方,两个端(iOS 和 Android)、6 条业务线,如果须要革新,那么是一个微小的革新需要,耗时耗力,过后与产品交换大抵预期 2 周开始逐渐革新实现,并暂定撰写技术需要文档,走研发技术需要,须要 3 天之后向各端、各业务线进行需要宣讲。
原本这是一个艰巨的工作,然而我尝试思考,一个简略的性能影响面这么广,会不会有更好的解决办法?
于是我开始尝试找 veImageX 的 oncall,询问他们的开发者起因,而后联合本人不了解的点找到字节跳动前端大群征询,宽泛吸纳各方的意见帮忙我进行判断,随着征询的深刻以及本人的上下文一直的补充,我感觉能够尝试从“源头”:veImageX 服务提供方解决问题,那就是其实他们能够尝试做一个兜底操作,在对 PNG 进行无损压缩之后,如果体积大于原图,那么返回原图,最终就是两者去最小,这样咱们业务方无论是中后盾、还是客户端都不须要动任何逻辑,这个问题就主动解决了。
当构思好计划之后,我及时找到 veImageX 服务的开发人员,反馈我的想法,他们也怅然同意了我的倡议。就是这样一个小小的优化,从源头上思考问题,让咱们大大减少了影响面,稳固了整个业务的迭代节奏。
工程师须要进行继续输入
如果你来到一家公司,就像你之前升学去到一所学校一样,你会有一个指标。在学校里你的指标是好好学习,拿到不错的问题,考上不错的大学;在公司里,你的指标可能疾速进步全方位能力,疾速降职,多拿奖金。
当然很多人可能是抱着学习文化,钻研技术来的,但绝大多数人应该都有疾速降职的想法。
而字节跳动有一个面向整体工程师的工程类研发能力模型,下面给定了各个职级须要的要求。通过这个能力模型,你可能认清你当初的地位,了解本人满足那些能力;同时你能够晓得你降职下一级须要什么样的能力与产出,相当于给定了你一个看得见、摸得着、能够做到的指标,这可能是激励有数工程师成长的能源之一。
对于我来说,想要降职到下一个职级,不言而喻须要从技术、业务、与团队方面进行全方位思考:
- 技术上你可能是分享了一门新技术或有深度的技术见解,或是将一门技术从无到有落地,或是将一门技术从差到好降级
- 业务上可能实现根本的业务迭代是本职工作,要长于从业务中发现产品、设计、研发、测试的问题,并尝试在改善产品、设计设计需要的体验,帮忙测试疾速且精确的实现测试,研发之间可能高效、顺滑的联调处着手
- 团队方面你能够在团队的技术分享排期上进行合理安排,本身在分享时分享高质量内容,平时在做技术需要时多与其余成员交换或是带着成员一起去解决问题,或是尝试从 0 发动一个技术我的项目,而后找寻其余团队成员退出一起实现
下面的思考就是输入的一部分,你能够:
- 输入本人在团队、业务上的思考
- 输入本人技术文章
对于我来说,这半年次要在钻研构建工具、组件库、WebAssembly 方向,也输入了很多不错的文章:
- 构建工具方面,我产出了 下一代前端构建工具 – Vite 2.x 源码级剖析
- 组件库方面,我产出了 尤大都举荐的组件库是如何开发进去的?
在 WebAssembly 方面,我也输入了一系列文章
- 高级前端进阶:我是如何把 C/C++ 代码跑在浏览器上的?
- 大厂程序员的调试技巧,偷学到了!
其中组件库方面的文章也受到了很多前端方面的敌人转载,感激 零一、三元、世奇、LeviDing(丁丁)这些敌人的反对 💪(这里很多没有列全,然而都一并表白感激 Thanks♪(・ω・)ノ)
继续输入的益处很多,不仅在团队外部能够为其余成员、为 Leader 留下粗浅的印象,还能将这些文章公布对外,帮忙到更多的人学习与成长,同时能够与其余一起做技术账号的敌人进行交换。
后续更多对于技术、业务、团队、认知晋升的输入我也会在我的公众号: 程序员巴士 ,上进行继续更新,欢送感兴趣的敌人关注我的公众号❤️。
工程师须要率领团队成长
我在字节跳动成长的又一重大里程碑就是开始尝试带来团队去做一些事件,无论是偏差基建的,还是偏差技术我的项目的,还是偏差业务的,在尝试、实操之后发现,的确有一些教训能够值得分享。
“独行快,众行远”。一个人能够无所激励的疾速跑步和调整,然而如果可能让一个团队也可能疾速跑步和调整,那么将成倍于集体能够达到的水准。
在字节 6 个月的学习与工作里,最难的事件莫过于当你开始带团队去做一件事件的时候。本人做需要次要是承受安顿,带团队是安顿他人还要安顿好,一个是舒服的安分守己,一个是须要顾全大局,思考到事件的方方面面,次要负责布局计划,安顿工夫节点,给出抉择,大胆放权让团队其他人去自主筛选、自发实现,而后阶段性的查看实现进度。
如果你只是需要的开发者:
- 拿一个理论的需要来说,例如开发一个波及跨团队、蕴含前后端的需要时,如果你只是需要的开发者,那么你在理论需要评审、技术评审之前是不须要做过多思考的,能够循序渐进的做本人的事件,等到理论评审的时候理清本人的开发边界,而后对好对应的接口,接着开始失常开发、提测就好。
然而如果这个需要你是 Owner:
- 那么你须要在需要评审、技术评审之前,就开始被动与前端、后端、测试、产品沟通各方面上下文、排期相干的内容,而后整顿一份欠缺的文档,并发给各方去看,持续补齐存在的细小问题
- 同时你须要构思分明整个需要的数据流向,在某个接口处须要的开发人员和波及的依赖,这个接口处的需要他们该如何排期以至于不影响下一个接口的进度
- 而后就是技术评审宣讲,承受来自各方人员的质疑还要能抗住不同的问题并提供解决方案
- 接着就是开始开发,你须要去搭建属于你这边的开发框架,而后在工夫点去查看其余接口人员的开发进度,如果有延期须要及时反馈
- 开发完之后须要督促测试染指,产品验收,需要上到测试环境、灰度环境和生产环境等,直至整个需要的所有流程走完
其实你作为团队 Owner 的时候,就是你尝试将本人的教训、常识间接传授给组员的过程,帮忙他们拆分工作、了解数据流动和各方依赖、辅助他们排期、查看他们的进度让他们对工夫敏感、甚至是在组员搞不定时还要提供技术上的反对。这一过程也是率领团队成长的过程。
工程师须要发明需要与产品
如果说工程师要谋求极致,那么那些外表上能够超脱工程类研发能力模型的货色能够尝试去做。比方并非公司官网指出的一些业务、技术与团队上的事件。
在字节的这 6 个月,我从零还是尝试打造教育前端的对外输入品牌:ELab,ELab 最后从微信公众号、掘金开始,目前扩大了知乎、字节外部的技术交流平台,输入了近 90 篇原创文章,单篇文章均匀浏览 1000+。
ELab 安稳运行的背地是一整套欠缺的流程机制:
- 一个较为欠缺的倒退团队
- 每周各团队进行文章收集、票选
- 欠缺的处分评比机制
正当分工、花长时间做思考、做有意义的事件,放弃长期的急躁。在跑稳根底机制之后,ELab 寻求向上扩大上层建筑,目前曾经举办了第一次 ELab 前端技术大会,将来会尝试开源专属的产品,并将技术大会打造成线下大规模会场的模式以及寻求文章内容多样性改良等。
ELab 本是一个在工作之余保护的我的项目,然而在进行深度思考之后,我产出了一套倒退计划,并寻求 Leader 的反对与帮忙引入了几位团队成员,并且长期保持跑稳流程并作出肯定水平的冲破,横向拉齐教育前端的技术气氛和技术建设等。
业务调整,再思考
通过上述的在技术、业务、团队、创新性想法方面进行了肯定水平的摸索,一直挑战自我,谋求极致之后,在 6 个月后的首次绩效评估中,我获得了不错的问题。通过拿到不错的问题来激励本人只是驱动因素之一,最重要的还是整个自我冲破的过程:那些熬过的夜晚、埋头苦干的信心、思维认知的晋升,以及在这个过程中意识的敌人、团队,更粗浅的领会到字节的文化。我置信这些经验与问题会成为我下一次绩效评估,或者接下来几年的职业倒退打下一个很好的根底。
然而你可能永远也无奈停留在原地品尝本人过往的问题,因为新一轮的挑战又接踵而至。整个教育业务在通过长达 2 个月的思考之后终于迎来了转型之路,从之前重投放、与 x 辅导、x 学堂之间的竞争转而全面沉下心来做产品,回到本人的初心和迭代节奏上来。
咱们整个深圳团队都将调整至新的方向,开始从 0 到 1 建设新业务方向的技术、业务、团队方向的事宜。这意味着之前积攒的所有业务方向的相熟感都会清空,之前所有的前人的积攒都将成为历史,你积攒的各种业务中的人与交流经验也须要从新开始。
那么在 2021 年还剩下两个月,业务进行从新调整之后,一位校招生该如何思考和布局本人接下来的路呢?我这样问本人。
进行一段时间的思考之后,我心中曾经有了答案。那就是仍然保持本人在过来六个月中学到的办法、高标准的要求本人:
- 基于双月 OKR 对本人现阶段接下来的两个月要做的事件做一个总结,包含技术预研、业务了解、团队再倒退和迭代方向别离产出一个布局
- 及时在各个方向上找到对应的成员、负责人进行上下文拉齐,宽泛浏览各种文档,打造本人的认知知识库
- 技术上打算深刻学习 WebAssembly 的相干常识,包含深刻学习 Emscripten 编译器的常识、AssemblyScript 常识,以及 WebAssembly 底层的常识,可能产出一个将 C/C++ 我的项目 WebAssembly 化的高效计划;在小程序畛域开始深耕,理解历史和各种框架,了解 Taro 的原理;同时对新的 Monrepo 计划如 Rush、欠缺的性能与监控计划的学习等
- 开始尝试浏览字节跳动的历史文化手册、张一鸣的历史全员邮件,理解本人的倒退历程
- 开始尝试看一些书籍,包含《爱彼迎传》、《奈非文化手册》等,并且养成做笔记的好习惯
- 尝试走进来,多与里面的大佬交换,与做公众号的大佬如 ssh、零一、若川交换,与搞守业的敌人 阿布 交换,与其余公司的敌人进行交换,交换技术、业务、团队、成长方面的思考
- 多退出字节外部其余团队的群聊,理解他们的团队理念,进而反哺本身在团队建设上的思考
整装待发,再登程,继续迭代,再成长
当然在上一轮绩效周期中,我还有很多的有余,如:
- 在技术我的项目上没有正当评估 ROI,导致有一些我的项目落地如 Vite 出了解决方案,然而落中央不多,收益不显著
- 在技术、业务、团队建设上还有很多问题待解决,有必要找一些资深的业务负责人进行多交换,双周一次 One One
- 同时在对事件进行数据分析、对内容产出进行图表说明等方面还有显著的短板
一个可能阐明画图带来的益处能够很直观的看上面这张图,阐明小程序的各方面性能指标的:
通过上图能够很清晰的看出整个小程序运行生命周期须要思考那些指标,这就是画图的力量。
然而我置信粗浅意识自我的问题,而后联合本人的布局,缓缓的解决他们,也是一种成长的过程。接下来的 2 个月,从新梳理一下情绪,进入到下一轮倒退与思考中去,像打造产品一样打造自我的能力,始终守业!
以上只是我在字节的 6 个月的绩效考核之后的一些总结与思考,同时也是我面对业务调整之后的一些布局和神往,我的经验如果对你有帮忙,或者你感觉有一些更好的想法想要与我交换,都能够分割我的微信:hwwd8584 找我交换,或者关注我的公众号: 程序员巴士 ,接管我更多对于编程教训、技术干货、职场思考的输入,共勉。
/ 感激反对 /
以上便是本次分享的全部内容,心愿对你有所帮忙 ^_^
喜爱的话别忘了 分享、点赞、珍藏 三连哦~
欢送关注公众号 程序员巴士,来自字节、虾皮、招银的三端兄弟,分享编程教训、技术干货与职业规划,助你少走弯路进大厂。