2021 年经历了好多事情,有辉煌时的众人喝彩,也有跌入谷底时的艰难挣扎,算是大起大落的一年。好在那些艰难的时刻都过去了,现在可以平淡的把这些当做故事讲出来。

内容比较多,就按照工作生活的主线、文章和技术成长的支线来写吧。

主线(工作生活)

我是去年年底入职的阿里高德,在架构部做工具链,包括编译、调试、IDE、文档这些。

因为涉及到编译技术比较多,比如 Babel、Postcss、Typescript、Terser 等,我就深入研究了下编译相关的理论和这些编译工具的实现原理。

研究了一段时间之后,在公司做了一次编译技术的分享。我发现对编译技术的兴趣比较浓,于是就在知乎问了个问题“前端转编译开发靠谱么?”,幸运的得到了狼叔、黄玄、面包、某华为高级专家等一众大佬的热心回答。

之后和华为专家有一些沟通,去华为的编程语言实验室做了一次关于“前端领域的转译打包工具链”的分享:

​前端领域的转译打包工具链(上篇)​

​前端领域的转译打包工具链(下):工程化闭环​

回来之后开始着手写 ​​Babel 小册​​,把我学到的类型检查、压缩混淆、JS 解释器等一系列编译技术的原理,还有自动埋点、自动国际化、自动生成文档等应用都写在了这本小册里。

2021 年终总结|当我堕入无边黑暗,是公众号救了我_前端

虽然第一次写小册有的地方表达的不够好,但整体比较系统和深入,而且代码都有,所以得到的反馈也还不错。

2021 年终总结|当我堕入无边黑暗,是公众号救了我_前端_02

小册写完之后在掘金做了两次直播:

​直播《从 Babel 深入前端编译原理》​

​从前端编译到手写 Babel​

之后去早早聊做了一次技术分享,和 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 年终总结|当我堕入无边黑暗,是公众号救了我_前端_03

2021 的经历可以说是大起大落,但都已经过去。

回顾这一年,最大的收获,除了小册之外,就是公众号了。我是五月份注册的,名字叫做“神光的编程秘籍”,就是想着能够通过这个平台输出一些我对技术的见解,希望能给大家一些启发。但没想到后来公众号回馈我的更多,我能平静的度过今年最难熬的一段日子,我能有现在的工作,都与公众号密不可分。所以 2022 年,我会把更多的精力投入在公众号上面。

支线(文章、小册、技术成长)

首先,今年最大的技术产出就是 ​​《Babel 插件通关秘籍》​​的小册了,那些案例和手写 Babel 都对我的提升也很大。

其次,就是我写过的这些技术文章。分类梳理一下:

前端思想

​谈谈我这些年对前端框架的理解​

​你写过的代码都逃不过这两方面:API 和抽象​

​前端工作的五层,你工作在哪一层?​

​前端 4 种渲染技术的计算机理论基础​

​写给前端的跨平台方案、跨端引擎的本质​

学习方式

​四句话总结我的学习观​

​我高效阅读源码的五步速读法​

​学习技术要执着但也不能太执着​

Chrome Devtools

​面试官,我实现了一个 Chrome Devtools​

​JS 的 6 种打断点的方式,你用过几种?​

​通过 Performance 证明,网页的渲染是一个宏任务​

​你可能不知道的 Chrome Devtools 的功能​

编译

​import 方式随心转,感受 Babel 插件的威力​

​TypeScript 想更深入一层?我推荐自定义 transformer 的 compiler api​

​“覆盖率检测”的实现原理,就这?​

​【华为分享】前端领域的转译打包工具链(上篇)​

​前端领域的转译打包工具链(下):工程化闭环​

​你用过的所有前端编译工具, AST 遍历思路就这一种​

​快速入门 postcss 插件:自动转换 px 到 rem​

​CSS TreeShking 原理揭秘: 手写 PurgeCss​

Typescript

​来做操吧!深入 TypeScript 高级类型和类型体操​

​Typescript 类型的本质是什么​

​为什么说用 babel 编译 typescript 是更好的选择​

​基于 babel 手写 ts type checker​

​我读 Typescript 源码的秘诀都在这里了​

Node.js

​从根上理解 Node.js 的 fs 模块:一起设计一个文件系统​

​彻底掌握 Node.js 四大流,解决爆缓冲区的“背压”问题​

​Node.js 的 Web 框架的 3 个层次,理清了就不迷茫​

​压榨计算机性能:浏览器和 Node.js 的异步计算(多线程的使用)​

​前端不懂进程通信?看完这篇就懂了​

​Node.js 异步 api 的本质和 libuv​

​深入理解 Node.js Buffer 的 encoding​

Debugger

​用 VSCode 调试网页的 JS 代码有多香​

​让你 nodejs 水平暴增的 debugger 技巧​

​JavaScript Debugger 原理揭秘​

渲染技术

​前端 4 种渲染技术的计算机理论基础​

​我是如何用 Three.js 在三维世界建房子的(详细教程)​

​用 Three.js 和 AudioContext 实现音乐频谱的 3D 可视化​

​用 Three.js 画个 3D 生日蛋糕送给他(她)​

​北京到上海,Three.js 旅行轨迹的可视化​

​这一次,彻底搞懂 GPU 和 css 硬件加速​

VSCode

​少年,我把珍藏的这个 VSCode 插件 API 传给你了​

​让你 vscode 写代码效率更高的技巧​

​用 VSCode 调试网页的 JS 代码有多香​

​利用 vscode snippets 和项目成员一起提高开发效率​

​兄弟萌,让我们在 vscode 里放烟花吧​

计算机基础

​编程语言的本质是什么​

​你觉得用不上的位运算里,隐藏着 CPU 实现的秘密​

​不同内存管理方式的聪明程度大 PK​

写作

​技术文章的核心是什么?谈谈我的思考​

​写作于我而言的意义​

总结

今年失去了很多(阿里架构组的工作、4 个月的年终奖),也收获了很多(Babel 小册、公众号)。经历过高光的时刻(去早早聊、字节、掘金做技术分享),也经历过特别难熬的黑暗时刻(华为给外包岗、失业、失去年终奖和阿里的工作),还好有公众号可以写一些东西,可以和大家有一些交流。

之后的我不会再那么傻,兴趣是兴趣,工作是工作,不会为了某项技术而放弃工作甚至放弃前端。也不会再轻信任何人的承诺而裸辞。

技术方面,如果 2021 年的关键词是​​编译​​​,那 2022 年的关键词会是​​全栈​​(因为工作相关的东西还是要优先学习)。

2021 年,特别感谢大家的鼓励,2022 年,我会花更多时间在文章和小册上,让我们一起成长吧。(期待成为前端大佬的那天)

后记

因为一些奖励来的比较晚,但也算 2021 的成就,所以更新在这里:

掘金年度十大优秀作者、十大掘金优秀课程

2021 年终总结|当我堕入无边黑暗,是公众号救了我_程序员_04

2021 年终总结|当我堕入无边黑暗,是公众号救了我_公众号_05

知乎年度成长力榜第三名

2021 年终总结|当我堕入无边黑暗,是公众号救了我_公众号_06

2021 年终总结|当我堕入无边黑暗,是公众号救了我_node.js_07