毕业第四年,在边界上试探的 2020

4,900 阅读6分钟

2020 年真是乱七八糟的,我也不知道怎么就在知乎写了一堆混了几百万阅读量的东西。但是那些技术外的内容其实根本没花我多少时间,我本职工作仍然是在认真做技术的。这里面很多东西都是在前端和其他领域之间的边界上搞出来的,直接列举下今年做的一些事情吧:

  • 做了一套 Skia 到 QuickJS 的绑定,实现了一个小型的 HTML5 Canvas 环境。不过限于性能问题,后来在同事协助下换成了更像 DOM 的保留模式 API。
  • 把上面的运行时发展成了一个内部的 TS 编辑器框架,用它开发了几个编辑器,目前已经在公司 app 里上线了。
  • 把 Dart VM 从 Flutter 里抽了出来,支持在 macOS 和 iOS 上运行。
  • 把 Netscape 3 浏览器里的 JS 引擎 Mocha 抽了出来,编译到了 WASM
  • 把自己编译出的 Skia 通过 Dart FFI 又接进了 Flutter,这样不改 Flutter 源码也能扩展 Dart 的渲染能力,有些特殊的用处。
  • 入门了 LLVM,用 C++ 写了一个把 C-style 语言的控制流和函数 AOT 静态编译成汇编的编译器,不过目前还只属于玩票阶段,暂时拿不出手。
  • 做了一个 WebGL 康威生命游戏的 Demo,体积比社区已有版本小 90%。
  • 做了一个(字面意义上的)V8 引擎——愚人节快乐
  • Qcon Plus 做了技术分享,顺带试水性地在极客时间搞了一次直播。
  • 花半年翻译了《JavaScript 20 年》这本书,纸质版已经和博文视点签合作了。感谢社区同学贡献了静态站 PR,原作者 Allen 还为中文版写了序。
  • 面试了几十人,听了很多有趣的故事(比如 JavaScript 在军工项目、博彩项目和养猪项目中的应用之类),以后有空可以慢慢写。
  • 基本搞明白了 iOS 和安卓开发是怎么一回事,现在看 React Native 和 Flutter 的原生部分也不会抓瞎了,顺带写了篇文章帮前端同学快速搞懂这些东西
  • 还写了其他大约几十篇正经的科普回答和文章,阅读量大致有几十万吧,有篇单独的文章作为分类整理后的目录
  • 最后还订了个婚。

然后在学习方面主要就是读书吧。怪我技术积累太薄弱,看的书基本都是在补之前没学好的技术,还远没到那种能开务虚书单指点江山的地步,列几本今年印象比较深(至少实质性读过部分章节)的书吧:

  • 《操作系统导论》当科普读物很好看,循循善诱的风格可读性很好。
  • 《Linux 程序设计》和《Unix 环境高级编程》,主要是照着学一些 POSIX 的 API。
  • 《Effective Modern C++》和《Objective-C Programming: The Big Nerd Ranch Guide》,主要当工具书硬啃的,是很有用但乐趣不大。
  • 《Crafting Interpreters》和 LLVM 的入门教程,读起来就像作者教你变魔术一样,很酷。
  • 以及最后当然是我自己翻译的《JavaScript 20 年》了哈哈。另外 HOPL 里有很多编程语言的论文,很适合当爽文看。里面故事非常精彩,随便拿出来一段就能在知乎刷几千赞

然后稍微提一下现在的生活方式:

  • 没有打卡和迟到之类的麻烦概念,每天睡到自然醒。
  • 住在步行一百米上班的公寓,回去房间里 Switch、PS4 和 PC 想玩哪个就玩哪个。
  • 两个小时内可以见到直系亲属,周末可能在三个不同的城市。
  • 除非需要当面沟通,否则可能在各种奇怪的地方工作(工作不只是写代码,学和想的比重也不小):金拱门、喜茶、星巴克、动车站、公园、海边……

虽然这些描述看起来(而且实际上确实)很自由,但我今年还是没有那种「技术已经做到透了,没什么好长进的了」的感觉,仍然一直有非常多的困惑和问题(大概就是各种工程难点没人可以问没作业可以抄,必须靠自己的感觉),也经常焦虑于某种设计到底能不能行。但回头看来,这种宽松 + 持续有问题驱动的环境,对成长还是挺有帮助的——我既不是把奋斗当人生追求的那种人,也不是把工作内外完全分开的那种人,只是尽量按自己喜欢的方式生活而已。

在搞这类经常带点摸索性质的工作时,这么几个要素我觉得比较关键:

  • 宽松包容的氛围:需要尊重技术规律,允许试错与失败的技术管理者。感谢现在的公司环境,多数时候可以在一个比较放松的状态下工作,有充分的休息。
  • 扎实的知识储备:那些基础性通用性的 CS 知识是最不会过时的,它们能帮助你把很多技术栈融会贯通地串起来,然后就方便左右横跳了。最厉害的 100x 程序员们几乎都能投入成千上万小时不在乎回报地学这些东西,这方面还是不要太功利吧。
  • 良性的交流圈子:要多与不同背景的人交流学习,开阔视野。不过今年我倒是退出了绝大部分技术群,只和觉得有趣(或者说值得学习)的人交流。切记时间有限,只值得花费在最有价值的人和事情上。

很多前端同学可能觉得自己能力的「边界」就是浏览器加上 Node.js,我觉得这种想法本身就是在给自己设限。不要觉得所谓「底层技术」就是那些需要海量专家精密计算的 rocket science,计算机科学的大门就敞开在那里,没人规定你入门了前端就得一辈子写 JavaScript 吧?我非常推荐在「尤雨溪等非 CS 转前端的大神是怎么学编译原理的」话题下 @尤雨溪 自己的回答,这里就不多复读了。

虽然说这一年来也算做了不少事,但是比起在中科大 Linux 协会遇到的那些真正热爱技术的小伙伴们,我感觉自己到现在学到的东西可能也未必比人家当年在学校里知道的更多,还是很惭愧。当然我关注业界动向的时候,也能逐渐觉得那些走在最前面的巨头做的事情也不是那么遥不可及的,但要赶上还需要努力。

2021 年我没什么雄心壮志,保持现在的状态就好,仍然有非常多想做的东西还没做,非常多想学的东西还没学,非常多想写的东西还没写。但我实在对国内的社区氛围感到失望,有趣的人越来越少,莫名其妙的人越来越多。最近我进驻了 Twitter,虽然目前还是小透明状态,不过偶尔也能钓出一些大牛互动一下(比如 JS 甘道夫 Allen Wirfs-Brock、带 Dart 的 Vyacheslav Egorov,带 Flutter 的 Eric Seidel 和设计出 ES6 class 的 Mark Miller),大家感兴趣的话欢迎关注。

大道理就不讲了,最后和大家分享 LLVM 教程里的一句话吧:

Have fun - try doing something crazy and unusual!