在字节教育做前端实习生是怎样的体验?

1,936 阅读10分钟

从今年1月到现在,发现来字节教育k12实习已经有半年的时间了,这期间经历了很多,也成长了很多。秋招将近,作为实习生的日子也快要结束了。人生很长,但身为实习生这个身份却只有这几个月,过去就不会再来,所以很想记录一下这段时间的所做所感。

1. 打工时间线

1.1 开局雷击!

在大三上的期末拿到了字节教育的offer,因为是学长内推的他所在的团队,所以也提前和组长他们打好了招呼,在1月份入职后的不久,当我以为我还可以继续学习各种概念和框架的时候,mentor就找到我,需要接手一个开发中的业务。

这对我来说是一个非常大的挑战:首先,我本身就对react的了解不是很多;第二,微前端lernarpc等框架和工具是我之前闻所未闻的;第三,开发流程、CI/CD流程、merge request等等这些对我一个之前在大学里野蛮开发的人来说太过陌生。

image.png

刚开始的这段时间是比较难受的:上班时间一边学习 react,一边完成需求。午休时间也在看公司内部的技术文档和工具文档。在后面测试阶段 bug 不少,也让自己挺有挫败感。不过每周和导师的one-one谈话,导师的肯定给予了我信心,最终还是把这一期需求拿下了。

现在的新人入职流程相比我那时好了很多,文档更加完善了,在技术方向上会先让新人感知技术栈同时写一个 demo,跑完需求-编码-CI/CD这套流程。不过回想起当时,从结果来看并不差,我用了差不多一周的时间就融入到了团队的开发中,这也为我后面如何学习、如何开展工作打下了基础。

1.2 How to be better?

在接下来的工作中,依然是开发k12方向的中后台,但相比最开始的不知所措,这时候的我已经可以很熟练的使用 react 开发和 devops 进行打包部署,但一个新的问题摆在了我的面前,同样也是很多工程师疑惑的地方:我该怎样从每天的CRUD中学习提升自己的技术?

mentor给我说过:不要为了学习一个技术而学习,更应该聚焦业务,多总结多反思(记忆模糊大概是这么个意思)。

所以,在会使用微前端后,我又去了解和实践了微前端的核心代码,并在团队周会上分享。这篇文章也被选为了对外输出文章发表在 Elab。

从微服务到微前端:浅谈微前端的设计思想

在使用公司一些组件库、工具的时候,养成阅读文档和源码的习惯,这些虽然没有直接的增长了技术,但是对于解决问题的方式和效率上,相比之前都有很大的提升。多提一句,在使用公司封装好的useAntdTable时遇到了一个翻页逻辑不同步需要特殊处理的难题,因为文档比较简单没有案例,所以感觉很难找到问题关键,mentor 直接让我看源码,我不情愿地逼自己读了几段才发现有时阅读源码真的没那么困难,只需要关心正在处理的几个函数和逻辑就好,实在没有思路也可以在源码中打印出来一些数据进行分析。

还有一点我觉得很重要的就是多总结,多思考。之前在写业务的时候突然发现,几十个人开发一个巨型项目,封装的公共组件一不够通用,二没有详细的文档,导致大家在各自的子应用里又封装了重复的逻辑,增加了代码的冗杂程度而且降低了效率。所以那天的新人日报里我写了一种:基础公共组件-业务组件-页面调用的三层结构,得到了组长的认可。

在业务层面,我从第一个需求自己嗯造30个缺陷,到最后基本上两只手可以数过来。复盘很关键,思考自己为什么看需求文档不仔细,为什么 git rebase 总是出错,如何解决这些问题。我觉得组长这点也挺好的,当我犯错了,产品和测试在总结的时候暴露给我的组长,但是他没有怎样怎样的批评我,而是问我如何解决这些问题,瞬间心里压力就没之前那么大了。

当然,作为一名实习生最重要的是学习,学习什么?学习好的编程风格,我们组长一手函数式编程玩的6,之前有被他吐槽过:“功能是实现了,但是还可以再优雅一点”,这种优雅的编程风格就非常值得我去模仿。还有像如何写有价值的代码,比如 typescript 从一开始我只会标基本类型和断言,到现在枚举、泛型结合逻辑花式玩起来,也是从各位同事那里取经学到的。

1.3 基础工程,新的挑战

在5月,我向组长提出了想做基础方向的需求,他也同意了。再加上回学习复习参考考试等各种原因——5月并发业务和技术工作,6月全身心投入到基础工程的建设。我主要负责的是 idl 方向的工作,包括但不限于,thrift 代码的parser和ts enum、interface、api 的生成,mock服务自动化生成,集成 proto 和 thrift 的大型 idl 管理脚手架flycli,idl 生成formily-xxx(字节内部组件库)可执行代码的fly-code,vscode 本地low code平台、基于 vscode 扩展的idl可视化平台。

这段时间可谓是身心俱疲,一方面要应对学校和老师,一方面业务的ddl催得紧,更要命的是开发idl相关的知识我都不甚了解。不过好在我又又顶下来了,通过这段时间的学习,我也有幸给字节前端基础架构node库提交了几次merge,学到了如何进行简单的编译原理parser字符串代码;了解了如何用vscode进行调试;使用了npm link和一个叫yalc的link工具(npm依赖太多坑了,yalc我写了使用文档,有机会分享出来);学会了如何搭建一个初级脚手架工具;如何使用jest进行单元测试;像 node.js 中的buffer类、tsconfig中参数的含义,也真正得通过实践了解到了其中的坑。

同时,我也通过同事学到了如何对当前同类型的产品进行调研;如何不开发重复的轮子;如何对开发出来的工具进行benchmarking——这些之前做业务不曾接触过的概念,属实让我涨姿势了。

这个阶段可以很明显的感受自己的成长:遇到坑学会如何找到代替方案;开始关注core逻辑和实现代码是否拆分;在看完prd后先进行详细设计、计划方案;从代码裸奔到try catch(arr || [])等安全操作有求必应。我想这就是实习的意义吧——从学生到一个行业pro的转变更顺滑一些

2. 一点感悟

从一开始的不适应到慢慢的适应,对不同的人来说肯定需要的时间不一样,但不得不说这是一个不那么快乐的阶段。

2.1 沟通永远是最高效的方式

这是一开始我没做好,我想也是大部分实习生都不太擅长的一点。字节在对待实习生这点是比较open的,一直讲究“坦诚清晰”。特别是当:

  • 你感到目前的工作有些吃力,所做的方向不合适,感受不到成长,总之不那么舒服的时候,一定得主动和mentor和组长沟通,说出内心的想法;
  • 还有和服务端、产品同学合作时,作为前端实习生也不能示弱,任由他人宰割,大胆提出不合理的需求和你必须的需求。正常合作的情况下,有问题及时暴露出来,对各方都是好事;

想到了前几天在开发 vscode 扩展的时候,因为是边学边开发,对于 vscode node 和页面分离、单向数据传递的概念搞得一团浆糊的时候,就是主动向同事请教了好几次,终于把这块儿玩明白了,这相比自己冥思苦想、吊死在一棵树上节省了大量的时间。

2.2 健康的身心是革命的本钱

之前都是大小周(现在取消啦!),早10点半到晚9点。

从心里上,工作的节奏比较快,每一个人身上背负的责任都不小,即使是实习生也 owner 了不少方向,所以很有可能实习生同学一被 push 就容易心里上出现不小的负担,过大的压力对个人的状态和工作效率都影响很大,这点一定要调节好,注意睡眠和休息,真的感觉鸭梨山大,可以多沟通(同第一条)。

从身体上,虽然背靠着好几千块的人体工学椅,但还是得多走动。据我同事所说,因为吃下午茶他涨了15斤!!!我个人的习惯是中午至少要午休一个小时,这样下午才有精神;每工作半小时到1小时一定要起身走动走动;每逢活动日的时候就去打打羽毛球,保持一定的运动量。

身为打工人,一定要爱惜自己的身体啊!!

2.3 一名优秀的前端工程师

对于优秀的工程师很难有一个明确的定义。以我现在的认知看来,身为一个全面的工程师可能对自己未来发展促进更大一些。

  • 基础牢固。css、js、浏览器机制、node.js、babel编译等基础知识足够扎实;
  • 大方向的把控。对于框架设计、工程化、架构有自己的见解和idea;
  • 代码风格优雅,善于使用设计模式进行优化;
  • 涉猎广泛,对跨端、服务端技术都有了解;
  • 善于沟通和协作,不管是作为技术 owner 和负责人都能作为中流砥柱。 当然,这每一点离我都还很远,也是我奋斗的目标。记得有次在前端大群问了一个问题,一个大佬直接私戳给我讲了一通动态 import、es module 的提案、stage-1 相关的东西,瞬间就感觉在前端这块,我还有很长的路要走!

3. 我为什么留在这里?

其实从年初到春招,也陆续拿到了快手商业化、阿里达摩院等offer的,内心也是几度很纠结。

image.png 最终还是选择留下来了,主要有以下几点原因:

  1. 因学校原因,暑假再走不管哪段实习都不是连续的,从产出的角度对秋招可能没啥好处;
  2. 自己的沉淀还不够,对现在在做的事情还没有完成挑战;
  3. 字节教育前端的团队还是很大的,从技术层面包括跨端、小程序、PC端、技术中台、游戏和基础工程等多个方向,各种业务场景也都有;从 base 地来看,北京/上海/杭州/深圳/广州都可以,还是有很多值得体验的地方。

碎碎念就到这里,如果你也是在实习的同学也在有和我之前类似的困惑也欢迎交流,如果你对我们团队在做的事情感兴趣也欢迎交流。