2021 年经历了好多事情,有辉煌时的众人喝彩,也有跌入谷底时的艰难挣扎,算是大起大落的一年。好在那些艰难的时刻都过去了,现在可以平淡的把这些当做故事讲出来。
内容比较多,就按照工作生活的主线、文章和技术成长的支线来写吧。
主线(工作生活)
我是去年年底入职的阿里高德,在架构部做工具链,包括编译、调试、IDE、文档这些。
因为涉及到编译技术比较多,比如 Babel、Postcss、Typescript、Terser 等,我就深入研究了下编译相关的理论和这些编译工具的实现原理。
研究了一段时间之后,在公司做了一次编译技术的分享。我发现对编译技术的兴趣比较浓,于是就在知乎问了个问题“前端转编译开发靠谱么?”,幸运的得到了狼叔、黄玄、面包、某华为高级专家等一众大佬的热心回答。
之后和华为专家有一些沟通,去华为的编程语言实验室做了一次关于“前端领域的转译打包工具链”的分享:
回来之后开始着手写 Babel 小册,把我学到的类型检查、压缩混淆、JS 解释器等一系列编译技术的原理,还有自动埋点、自动国际化、自动生成文档等应用都写在了这本小册里。
虽然第一次写小册有的地方表达的不够好,但整体比较系统和深入,而且代码都有,所以得到的反馈也还不错。
小册写完之后在掘金做了两次直播:
之后去早早聊做了一次技术分享,和 Scott 老师有了一些交集,也受邀去字节的商业化部门做过一次技术分享(字节内网应该能搜到)。
工作上,因为我对 Babel 研究的比较深入了,所以编译器、文档生成工具等的维护也就更得心应手。
编译方面,Babel 只是一个开始,后续还有 PostCss、Eslint、Typescript 源码 等内容要写,我定下了 3 年内把这些内容写完并且写一本前端编译的书的计划:
其实有一个感兴趣的领域可以持续深入是一件挺快乐的事情,我也乐在其中。但是,过犹不及,从高处跌落深谷也只正式因为我对编译技术的执着。
某一天,华为编程语言实验室的负责人联系我,问我是否想去那边参与新的编程语言,说能接受我没有这方面的经验、给我补年终奖损失。
我其实比较纠结,因为去了那边就不是前端开发了,而是 c++ 和编译器开发,但是想着能够更深入编译技术,这样的机会很难得,而且我在阿里做的事情我自己也能够继续深入,于是就答应了。
当时还比较兴奋,觉得要去做编程语言了,就写了一篇我对编程语言的理解:
我没有顾领导的挽留,提了离职,但最后华为给我的是一个外包的岗位,而且大幅度降薪。我觉得太坑人了,就算是平薪我也就去了,降薪太侮辱人了。
而且我在高德架构组做的还不错,去那里等于放弃了在高德的未来:
当时的我放弃了阿里 4 个月的年终奖、放弃了架构组的岗位,给自己简历加上了一段一年的经历。说实话,我当时是有点崩溃的,而且嘲笑我的人也有很多。
好在后来我和自己达成了和解,我觉得我的性格如此,而且我对编译技术太执着也早晚会出这样的事情。
我在公众号讲述了这些,得到了很多人的鼓励:
于是我鼓足了勇气,继续找前端的工作。
公众号给我带来了很多的机会,很多内推的岗位也是通过这样来的,而且有至少两家的面试是直接问我意向的,没有做很多技术面试。
在找工作的间隙,我也是靠写公众号文章来排解自己的消极情绪,所以心态还算比较平稳,甚至有的文章被大家认可的时候,还比较开心。
我很感激给我过我鼓励的公众号读者,是你们在我陷入黑暗的时候,给了我一束光。
也是因此,我找下家工作的时候,首要看中的其实是工作强度,我希望可以有更多的时间可以投入在写公众号文章上。
所以,最后我入职了一家外企(coupang),6 点多就可以下班,晚上会多几个小时的写文章的时间,虽然要从北京搬到上海。
外企的工作是做业务开发,涉及到直播,而且也能接触到后端的 java 代码,根据我“围绕工作学”的学习观,我应该学一些 Nest.js (类似 Spring 的 Node.js 的 MVC 框架)、WebRTC(音视频通信技术)、Vue(这边用的前端框架)的,所以我接下来会用这些技术来做一个全栈项目。
围绕工作学永远是最高效的学习方式,因为学到的东西有真实的落地场景,而且也因为有具体的场景能够学的更深入。
所以,本来计划的编译系列内容得稍缓一下,先把工作相关的东西搞好。
大概列了一下明年会做的事情,立一些 flag:
- Nest.js + Vue 的全栈项目(电商 + 直播 / 其他)
- WebRTC 相关技术的深入
- EsLint 小册(编译系列)
- PostCss 小册(编译系列)
除此以外,就是之前说过的公众号的更文方向了:
2021 的经历可以说是大起大落,但都已经过去。
回顾这一年,最大的收获,除了小册之外,就是公众号了。我是五月份注册的,名字叫做“神光的编程秘籍”,就是想着能够通过这个平台输出一些我对技术的见解,希望能给大家一些启发。但没想到后来公众号回馈我的更多,我能平静的度过今年最难熬的一段日子,我能有现在的工作,都与公众号密不可分。所以 2022 年,我会把更多的精力投入在公众号上面。
支线(文章、小册、技术成长)
首先,今年最大的技术产出就是 《Babel 插件通关秘籍》的小册了,那些案例和手写 Babel 都对我的提升也很大。
其次,就是我写过的这些技术文章。分类梳理一下:
前端思想
学习方式
Chrome Devtools
面试官,我实现了一个 Chrome Devtools
通过 Performance 证明,网页的渲染是一个宏任务
你可能不知道的 Chrome Devtools 的功能
编译
import 方式随心转,感受 Babel 插件的威力
TypeScript 想更深入一层?我推荐自定义 transformer 的 compiler api
你用过的所有前端编译工具, AST 遍历思路就这一种
快速入门 postcss 插件:自动转换 px 到 rem
CSS TreeShking 原理揭秘: 手写 PurgeCss
Typescript
来做操吧!深入 TypeScript 高级类型和类型体操
为什么说用 babel 编译 typescript 是更好的选择
基于 babel 手写 ts type checker
Node.js
从根上理解 Node.js 的 fs 模块:一起设计一个文件系统
彻底掌握 Node.js 四大流,解决爆缓冲区的“背压”问题
Node.js 的 Web 框架的 3 个层次,理清了就不迷茫
压榨计算机性能:浏览器和 Node.js 的异步计算(多线程的使用)
深入理解 Node.js Buffer 的 encoding
Debugger
让你 nodejs 水平暴增的 debugger 技巧
渲染技术
我是如何用 Three.js 在三维世界建房子的(详细教程)
用 Three.js 和 AudioContext 实现音乐频谱的 3D 可视化
用 Three.js 画个 3D 生日蛋糕送给他(她)
VSCode
少年,我把珍藏的这个 VSCode 插件 API 传给你了
利用 vscode snippets 和项目成员一起提高开发效率
计算机基础
写作
总结
今年失去了很多(阿里架构组的工作、4 个月的年终奖),也收获了很多(Babel 小册、公众号)。经历过高光的时刻(去早早聊、字节、掘金做技术分享),也经历过特别难熬的黑暗时刻(华为给外包岗、失业、失去年终奖和阿里的工作),还好有公众号可以写一些东西,可以和大家有一些交流。
之后的我不会再那么傻,兴趣是兴趣,工作是工作,不会为了某项技术而放弃工作甚至放弃前端。也不会再轻信任何人的承诺而裸辞。
技术方面,如果 2021 年的关键词是编译
,那 2022 年的关键词会是全栈
(因为工作相关的东西还是要优先学习)。
2021 年,特别感谢大家的鼓励,2022 年,我会花更多时间在文章和小册上,让我们一起成长吧。(期待成为前端大佬的那天)
后记
因为一些奖励来的比较晚,但也算 2021 的成就,所以更新在这里: