经历了炼狱一般的 2020 年,每个人都期待着 2021 年能少一些波涛汹涌,多一些风平浪静。尽管没有人知道病毒还会肆虐多久,但是至少,我们可以怀着积极的心态,构思新一年的蓝图。
回望 2017 和 2019 的年度规划,不足 50% 的完成率让我深感不安。但是这一切也实属无奈:在这个高度不确定的世界中,每隔几个月,我们都可能因为形势的变化,不得不改变先前的计划。举几个发生过的例子:
- 在我的第一个岗位中,掌握分布式系统的基础知识是胜任工作的关键。后来因为种种原因,我换了一个组,发现那里的工作并不需要深入了解分布式系统的知识。因此,没有直接的动力支持我继续学习下去。
- 在发表了一篇分析某知名翻墙工具的文章后,我的博客被封锁了一段时间。由于担心回国后可能会被请去喝茶,于是停止了相关文章的更新。
- 去年,公司为应对危机采取了一系列举动,致使我的收入明显下滑,这也成为了我选择跳槽的主要原因。为了准备跳槽,我有半年的时间需要把大部分精力投入到 Leetcode 中,因此无法持续更新博客。
考虑到以前的那些经历,在制订 2021 年度规划时,我决定缩减计划的数量,以便预留足够的时间用于计划外的事务。
2021 年的计划,主要包含下面几个部分。
在新的岗位有所作为
我迄今为止的四年职业生涯,概括起来,是两年的『分布式系统』开发,和两年的『大数据分析』开发。去年底,我加入谷歌,开始涉足第三个领域:『通讯、移动与边缘计算』。以我的粗浅认知,我们要做的事情是,把原本集中于数据中心的资源分散到通讯网络的边缘(入口),以支持物联网和 5G 应用对通讯网络高吞吐量和低延迟的要求。
这份新的工作,从两个方面来看,都是相当大的挑战。首先,我对计算机网络的知识储备没有太多自信,对通讯网络更是知之甚少。作为这个领域的新人,最紧要的,就是迅速掌握相关的核心知识,理解业务模型和上下游关联。其次,通讯网络对延迟要求很高,大概率会使用 C++ 和 Go 等高性能语言。因为我没有这两种语言的工作经历,所以熟练运用新的编程语言也会成为一大难关。
我的目标是,经过一年的工作,能够深入理解新领域的业务模型,完成高质量的系统设计和代码实现。
学习 Rust 语言
我曾经思考过,像 Java 这样的古老语言,已经越来越不适应现代应用的开发,会不会在十几年之后逐渐没落?现在想想,我当时大可不必思考这个问题,因为不太可能一辈子只依靠 Java 吃饭。就像现在,我的工作或许要改用 C++ 和 Go 语言了。有两门新的语言需要熟练掌握,这已经够辛苦了,为什么还要再花时间学 Rust 呢?如果你是 编程随想博客 的读者,或许还能记起编程君的回答:学编程语言,最重要的是为了学习语言背后的编程范式,这些编程范式是通用的智慧。Lisp 虽然拥有最多的编程范式,但是没有得到广泛应用,它同时也缺乏多线程等现代语言的要素。C++ 和 Rust 也是编程范式的集大成者,且相较之下,Rust 历史包袱少,具备更多的现代元素,是高性能语言冉冉升起的明日之星。
由于 Rust 语言还没有谷歌的官方支持,因此我不会在工作中使用它。但是,全方位了解这门语言的特性,有助于我认识各类编程范式,在未来写出更优雅的代码。学习 Rust 作为一项长期投资,在事业早期就开始投入,是很有意义的。
Leetcode 常态化
我在研究生毕业的时候,由于懒惰,直接签了实习的返聘 offer,跳过了很多人都经历过的、痛苦的找工作过程。时隔四年,当我再一次踏上找工作的旅程,面对几乎是从零开始的 Leetcode,内心的滋味相当复杂。假如下一次,不是我自愿离开公司,而是公司开除了我,我是否能够迅速进入状态开始面试,而不是先花半年的时间刷题?
把 Leetcode 作为日常的一部分,其实是为了追求自由。在公司抛弃我的时候,它是让我保持平心静气的自由;在我遇见了更好的机会时,它既给了我自抬身价的自由,又是先人一步抢摊登陆的自由。
当然,这里的目标并不是做完 Leetcode 的全部题目。我的目标是,即便不能每天都做 Leetcode,也应当每周都做,而且平均下来一天至少一道题。我可能会尝试使用不同的语言解题,权且当作是语言学习的课后练习好了。
关于 2021 年的目标,我先说这么多。还有一些想做却没有列举的事,我们在年终总结见分晓。