« 回到博客列表

一个非著名前端开发者的 2019

Dec 31, 2019阅读本文大约需要 7 分钟

终于,我走了

2019 年,可能是我职业生涯中最大的转折点。6月底,我终于离开了供职 3 年多的前东家,进入了梦寐以求的阿里巴巴。

离开的主要原因,是前东家对未来发展的计划,已经无法再继续为我提供更多有价值的东西了,这其中名利当然是一部分,但更重要的是我的职业成长遇到了天花板,我想去见识更广阔的世界,我需要一个更大的平台。

6 月初,我做出了离职的决定,之后就开始接触猎头。到了月中,我手里已经有几个不错的 Offer,结合当时的市场环境我觉得差不多可以了,就正式跟老板提出了离职。老板很清楚留不住我,聊表心意之后也就没强留。6 月底最后一天班,转天 7 月马上入职新公司。

说来也巧,前脚我刚离开,后脚就从前同事那里听说了公司人员优化的消息。又过了几个月,从一些媒体得知,前东家彻底凉了。前东家成立于 2010 年,如果没凉的话,今年也十周年了,在平均寿命两年半的创业圈子里,能活十年也是不容易了,江湖祝好吧。

感谢曾经努力的自己

简单说一下面试的经过吧。

首先我给自己定了一个非常明确的方向:上海、互联网、大中型平台。由于没有换城市的打算,因此把范围限定在了上海,有些来自其他城市的橄榄枝虽然也很诱人,但我还是谢绝了。之前一直在小平台,虽然很自由,但小平台缺少规范的开发流程,我也很少有机会接触这方面的东西,所以希望借此机会能够进到一个大一点的平台,接触一些更加规范的工程化手段。

从第一场面试到决定收手,大概两周的时间。期间一共面了 5 家,谈成的有 2 家。为什么不多跑几家?第一,选择太多会让我很纠结,我崇尚够用就好;第二,能够满足我的求职需求,并且刚好有 HC 的公司本来也没那么多,而且谈成的里面已经有我心仪的选择,再找下去意义不大了。

技术面基本都在射程范围内,虽然有些问题我自知答得不太好,但最终都给过了。跟 HR 也都聊过了,如果愿意妥协的话,几家的 Offer 我都能拿,但有些点我实在不愿妥协的,也就主动提了不合适(比如加班很严重、跟面试官气场不和之类的)。

关于面试准备,其实没怎么特别准备,整理了一下各平台上的简历,粗略过了一些平时未必用到但面试经常会问的题,然后就上战场了。平时有所积累,关键时刻就不会慌,这一点,真的要感谢曾经努力的自己。

新起点

今年正好是阿里 20 周年,一入职就赶上马老师的谢幕演出。巧的是,早先我在虹软实习的时候,也赶上虹软的 20 周年,大概我命中注定跟这个数字有缘吧。

作为一家顶级公司,阿里巴巴的研发流程那是相当的规范,甚至有点复杂,从 Scrum 到 OKR,都有着非常好的实践,研发相关的基础设施也是相当的完善,应有尽有。从入职到现在,真心学到了很多东西,见识了很多过去听说过没见过的好东西,以及各种闻所未闻的骚操作。

目前所在的部门叫研发效能部,属于阿里云旗下,负责为整个产研群体提供基础工具层面的服务,具体业务是在研发一款名叫「所思」的知识库产品。这款产品对设计和交互的要求非常高,属于 Dribble、Behance 级别的;核心是一个富文本编辑器,支持各种富媒体的编辑,底层还有着非常复杂的协同算法,是一个看上去小而美,实际上大而全,光 TS 代码就有几十万行的复杂系统。作为一个前端,能够有幸参与如此规模的项目,算是很值得了。

成长

这一年最大的成长,也是从下半年开始的。新的团队,新的项目,新的技术栈。

RxJS

「所思」包含了大量的异步数据流和 WebSocket 连接,并且数据之间存在相互依赖,因此在异步数据的处理上拥抱了 Observable,具体实现上自然就是 RxJS。

过去我一直使用 Promise 处理异步数据,面对的场景相对没有这么复杂,链式的写法也是非常的舒服。Observable 我过去只在 Angular 中接触过,并没有单独的去学习过。Promise 和 Observable 并非谁替代谁的关系,两者同为推送式的数据流,Promise 是一次性的推送,Observable 可以是多个值的推送。具体根据业务场景进行选择。

MobX

由于对 RxJS 有着较高的依赖,在状态管理方面自然也就选择了 MobX。

相比 React 的黄金搭档 Redux,MobX 的语法更接近 Vuex,但用 VueX 的几乎必然会配合使用 Vue,所以很长一段时间,我都没太想清楚到底什么样的场景适合 React + MobX,直到现在用上了 Observable。

Stylus

说真的,这是个意外。过去我用 Sass、Less 都做过项目,Stylus 简单看过但从未用到过项目中。Sass 是行业内绝大部分人的选择,我个人的偏好也是如此,如果不是因为团队在用 Stylus,我可能还是不会用它。

之所以选择 Stylus,我还专门问了我们的前端负责人,得到的回答是她接手的时候就已经是 Stylus,换句话说,Stylus 并不是团队的选择,只不过是前辈留下来的东西而已。

最近,给「所思」做了一轮工具链的升级,调研时发现当下的生态几乎都已经放弃了 Stylus,Sass 和 Less 都有着非常丰富的选择,唯独 Stylus,动不动就不支持。对此我感到很高兴也很难过。高兴的是我押对了宝,没有把过多的时间浪费在 Stylus 上;难过的是,这意味着要完成升级,要么自己去填补这中间的空白,要么就必须把 Stylus 整个换掉。

Slate

Slate 是一个项目强相关的东西,这是个用来开发富文本编辑器的框架。在开源市场上,它可能是目前最完善、可用性最高的一个框架吧。它提供了一种机制,让开发者可以对富文本进行高度定制化的操作。同时它支持通用化的自定义段落,可以让开发者去扩展各种纯文本以外的富交互文档形式。

Slate 上手并不难,官网有非常不错的教程,不过由于作者是个美国人,对于中文输入的处理不是很好,在一些特定场景会遇到一些问题,具体的我现在还说不上来,因为我对 Slate 掌握得还比较基础,但据我们的前端负责人表示,她已经修了好几个与此相关的 Bug 了。

TypeScript

TypeScript 对我而言并不是什么新技术,我用 TypeScript 已经很长时间了,之前也写过好几篇关于它的博客。这里写它,只是单纯想感叹一下,TypeScript 已经成为业界事实上的首选开发语言,只会使用 JavaScript 已经不够了,就连 TypeScript 最大的竞争对手 Flow 也已经认输了。

20 年代的第一批 Flag

实际一点,今年就少立几个吧。

Flutter

跨端是接下来几年里逃不开的话题,路途艰辛,但那一天最终一定会到来。

跨端目前面临的很多问题都来自历史包袱,过去没有跨端的需要,各个平台各做各的,都在追求差异化。但当工程效率成为开发者们集中关心的问题,平台的开发商必然会带着这样的考虑去设计下一代的产品,融合必将成为主旋律。

React Native 是第三方对移动端的一次尝试,Electron 是第三方对桌面端的一次尝试,两者如今都得到了广泛的应用,我也特别看好这两项技术。而之所以选择 Flutter,是因为这是世界上最大的平台厂商 Google 官方提供的一套解决方案,并且这还是一份能够同时兼顾移动平台和 Web 平台的解决方案。这就应证了我前面说的,平台的开发商开始把「跨端」作为产品的设计考虑之一。Flutter 向开发者传递出了一个非常积极的信号。

WebAssembly

从「三剑客」变成「四人帮」的那一刻,就意味着 WebAssembly 已经不再是未来了,而是已经到来。等到第一个杀手级应用出现的那一刻,就是 WebAssembly 课程开始满天飞的时候。

作为很有可能是下一代前端人的入行必修课,我们这些已然是从业者的老伙计们,早晚也得上课。

GraphQL

GraphQL 近几年的受欢迎程度一直都很高。传统的应用架构中,GraphQL 的优势并不明显,REST 已经做得很好了,改造的投入产出比太低了。而伴随着 Serverless 的兴起,GraphQL 的优势开始显现,未来必然会有越来越多的应用。

不忘初心

前阵子整理硬盘,意外地翻出了很早以前自己刚开始学习前端时候写的代码。

虽然这些代码放到现在已经相当过时,好些语法已经不再推荐使用,但看到这段代码,就想起了自己入行的初心:

用自己喜欢的技术,做造福人民的产品

—— 我说的

My First Page

稳住当下,静候天明

2019 年的互联网圈子,相比往年显得有些沉寂,除了几艘巨型航母,其它人都活得不怎么样,就连 BAT 都不再是曾经的 BAT 了。

无法改变局势,那就继续磨炼,等待时机的成熟。

长夜漫漫,20 代的太阳照常升起。

该系列的其他文章