2020 年总结 · 渐入佳境

转眼间 2021 年已经过去将近三分之一了,然而作者的 2020 年年终总结还没有写,本来已经把这件事情抛在脑后不打算写了,但是竟然还有人在博客留言问 2020 年总结在哪里,而自己也总觉得不写年终总结也缺了点什么,所以在愚人佳节到来之际,准备把这件拖了几个月没有完成的事情解决了。

2020 年是一个数字看起来很好的年份,但是实际上发生了很多事情,相信也改变了很多人的生活,这一年作者基本上全年都是在家远程工作的,这确实能够节约大量的通勤时间,个人倒是比较喜欢远程的工作模式,但是相信还是有很多人更习惯在办公室面对面的交流。

目标和关键结果

作者在前面的博客曾经提到过,自己一直都使用 OKR 来管理个人的目标1,在 2020 年年初时也曾经定下了全年的 OKR,其中包含三个大目标和十几个关键结果,这里仅展示其中的一部分:

  • Objective 1:提高技术影响力
    1. KR1:完成 Go 语言设计与实现全书
    2. KR2:社区做三次任意主题的技术分享;(1/3)
    3. KR3:全年更新 42 篇为什么这么设计系列文章;(24/42)
    4. KR4:全年分享 4 篇技术无关的博客;(4/4)
    5. KR5:全年分享 4 篇系统设计精要;(1/4)
  • Objective 2:提高工程能力
    1. KR1:将 Kubernetes 作为主要的工作重点;
    2. KR2:成为 Kubernetes 前 50 的提交者;
    3. KR3:深入研究操作系统;
    4. KR4:深入研究计算机网络协议;

okr

图 1 - OKR

如果说要给去年的 OKR 情况打个分的话,作者会给提高技术影响力这个目标打 0.7 分,给提高工程能力这个目标打 0.5 分。完成的部分这里也就不多介绍了,后面的内容会总结 2020 年的个人成长,这里简单做一下反思:

  • 关于社区分享:社区做三次任意主题的技术分享看起来不是一个特别困难的关键结果,期间也有很多人找到作者做一些分享,但是都因为个人觉得时间不足推掉了,所以没有实现预定的计划;
  • 关于为什么这么设计:年初的时候其实过于高估了自己的业余时间和执行力,全年更新 42 篇 为什么这么设计系列是个很难完成的目标,哪怕留了很多的缓冲(原本打算一年完成 52 篇),最终也面临着毅力不足和选题困难的双重考验;
  • 关于系统设计精要:这是一个非常耗费时间的系列文章,每个选题都需要耗费很长的时间进行学习和总结,同系列的第二篇文章已经完成了理论部分的内容,但是在实践部分拖了太久导致后续没有动力完成;
  • 关于 Kubernetes 社区:今年已经把自己的工作重点转移到了 Kubernetes 上,但是社区内部的工作和公司内的场景有很大的不同,再加上自己的时间不是特别充裕,所以最终没有在社区内做出太多的贡献;

在内容创作和输出方面这一年虽然也做了很多,但是仍然没有达到年初的预期,作为内容创作者有时是非常痛苦的,在后期可能会遇到很多选题的障碍,这时需要不断接收新的输入才能持续地对外输出一些内容。

总的来说,作者在年初的时候过于乐观地估计了个人的创作能力和业余时间,因为在计划实现的细节上缺少了一些毅力和打持久战的准备,所以没有完成年初定下的计划,还是比较可惜的。

个人成长

2020 年已经是作者毕业的第三个年头了,相信三年的工作经验已经使我们成为了更加成熟的工程师,对于计算机科学领域的基础知识已经有了相当的了解和积累,能够找到很多不同问题的相似性并快速得到并实现最优解。

技术成长

作者在这一年的时间没有阅读太多技术相关的书籍,过滤了一下完成的任务发现只读了下面这些本书籍:

  • Scheduling Theory, Algoritms and Systems
  • 垃圾回收的算法与实现
  • Linux Kernel Development
  • Understanding the Linux Kernel
  • Understanding Linux Network Internals
  • Computer Architecture: A Quantative Approach
  • System Performance: Enterprise and the Cloud

其中大多数的书籍大都是为了研究相关领域学习的,如果对该领域不是特别感兴趣,也不建议花时间阅读。从这个书单可以看到作者在技术方面主要关注的领域,即操作系统和 Linux 内核,其中包括 Linux 的控制组、大名鼎鼎的 eBPF、内核调度和网络等等内容。

ebpf

图 2 - eBPF 原理

操作系统真的是每个合格的软件工程师必须深入理解的话题,很多现实场景中的问题都能够在操作系统中找到类似的场景,比如:资源的调度、内存的分配。哪怕是分布式系统面临的问题,我们也能在操作系统中找到对应的解决方案,如果有时间的话可以每年找一本新的书重新学习操作系统,说不定可以发现一些新的知识。

除了书籍之外,作者在过去一年时间也阅读了很多系统领域很多顶会的论文,例如:OSDI、SOSP 和 NSDI 等等,主要关注的还是数据中心、云计算和分布式系统等方向。你可以看到这些年的很多论文都与机器学习关系比较密切,通过机器学习利用历史数据来提高调度决策、集群可用性等等,虽然作者对这些领域都不是特别感兴趣,但是不得不承认的是与其通过工程师的经验决定一些参数,使用机器学习在某些场景往往能够大幅提高决策的质量。

machine-learning

图 3 - 机器学习

作者在 2020 年阅读了以下几篇非常有趣的论文,感兴趣的读者可以看一下相关的文章,也可以直接阅读论文的原文:

虽然说计算机科学有时教会我们面向接口编程,不用在乎底层的实现细节,但是在性能变得逐渐重要、异构计算以及存储介质的不断演进的今天,我们也需要低头看一看手中的硬件并想一想它到底带来了哪些变化,而我们又能够做些什么。

软技能

作者记得两三年前在地铁上看过一本书《软技能:代码之外的生存指南》,虽然这本书的具体内容竟忘了,但是不得不说软技能对于任何人都是很重要的。没有人可以否认软技能对我们职业生涯的帮助,学习编程之外的技能不仅有益于我们的职业,也能够帮助我们更好地认识世界。

2020 年作者阅读了很多编程之外的书籍,例如: 学会提问 、 如何阅读一本书 ,这些知识可能在短期内不会对我们的生活有太多的改变,但是在长期来看,我们都会死,对我们的生活确实是有帮助的,尤其是当我们发现技术达到了瓶颈之后,学习一些交叉学科的知识往往会得到更高的投资回报。

除了计算机科学之外,作者在 2020 年还阅读了很多哲学和经济学领域的书籍,这些知识虽然对技术的提升没有太多的帮助,但是却能够帮我们更好地思考并认识世界,在学习的过程中我们也会发现不同领域有一些惊人的相似性。

three-pillars

图 4 - 三大支柱

计算机科学、哲学和经济学是作者目前比较感兴趣的学科,虽然作者对于计算机科学只是稍有了解,而对于后两者更是一无所知,但是也正是因为一无所知,所以才更要花费时间和精力去学习并认识这个世界,如果各位读者有推荐的读物非常欢迎在文章下面留言。

作者是因为上大学时一位学长的分享才开始写博客的,最开始的博客只是作为笔记,记得当时在学 CTMCP(Concepts, Techniques, and Models of Computer Programming),然后每天都把一些类似笔记的内容放到博客上,14 年写的很多笔记已经被删掉了,目前能够看到最早的博客还是学习 Prolog 的一些内容。

从最开始写博客到今天已经过去七年了,作者其实能够感觉到写作对个人表达能力的提升,这种改变是异常缓慢的,只有回过头来再看过去的内容才会觉得自己确实有了很大的变化,今天的推理和论证与过去相比变得更加严谨,在回答问题和评论时也会斟酌用词并尽量给出完善的回答,而这一点的进步也是最近通过总结和反思感受到的,也让作者更加坚信分享内容并接受其他人的疑问和挑战能够让自己更快的成长

社区

上面简单分享了作者过去一年的个人成长,这里又到了与各位读者分享数据的时候了,与去年一样我们这里仍然按照内容和社交网络两部分介绍作者输出的内容以及相关的数据。

内容

除了我们在 2019 提到的两个系列 — Go 语言设计与实现为什么这么设计 之外,2020 年因为关注了一些学术界的研究,所以写了一些关于顶会论文的文章,也就是 看看论文 系列,在这里也就简单介绍下这三部分内容的具体情况。

Go 语言设计与实现

比较早关注作者博客的读者应该都知道,作者在 19 年的时候就开始写一系列关于 Go 语言实现的文章,经过整整一年的时间,在 2019 年底对这个主题已经变得不是特别感兴趣,达到了一个非常疲惫的阶段。之前虽然有编辑联系过希望能够出版,但是因为内容也没有写多少,所以一直没有答应下来,直到 2020 年,人民邮电出版社的编辑正好找到我,当时觉得需要外部的条件刺激让自己能够下定决心完成这本书的编写,在这里也对之前联系过的编辑老师们说句抱歉了🙏🙏🙏。

经过一年时间的努力,Go 语言设计与实现 这本书目前已经交稿,估计纸质版的书籍会在 2021 年下半年正式出版,感兴趣的读者也可以关注一下,如果你对书籍的质量不放心,也可以在官网上阅读这些内容,如果觉得不适合或者写得很差,也不用花这个『冤枉钱』。

golang-internals-users

图 5 - Go 语言设计与实现访问量

今天的 Go 语言已经变得非常热门,生态环境也逐渐成熟,越来越多的公司和开发者都选择使用 Go 语言开发 Web 应用程序。根据 Google 分析的统计,过去一年共有 134,000 不同用户访问了 Go 语言设计与实现 这本书,PV 达到了 1,000,000 左右。

为什么这么设计

为什么这么设计(Why’s THE Design,WTD)系列文章是作者在 2019 年开的坑,2020 年又写了 24 篇与这个主题相关的内容,这个系列去年全年的访问量大约在 320,000 左右。

whys-the-design-traffic

图 6 - 为什么这么设计 2020 年访问量

作者在完成这个系列文章之前,对于网络、操作系统等领域的某些细节掌握的不是很清楚,虽然了解整个框架和原理,但是在细节上不够精准,通过研究特定领域的特定话题反而驱动作者补全细节上的一些漏洞,在分享经验和公开讨论之中完善了知识结构,而这也是作者持续写文章的动力之一。

看看论文

最后介绍的 看看论文 是作者在 2020 年下半年开始写的一系列文章,它是一系列分析计算机和软件工程领域论文的文章,我们在这个系列的每一篇文章中都会阅读一篇来自 OSDI、SOSP 等顶会中的论文,这里不会事无巨细地介绍所有的细节,而是会筛选论文中的关键内容。

作者在过去一年写了 8 篇相关的文章,大多数的文章都来自 2018、2019 年的 SOSP 和 OSDI,因为看这些论文纯粹是出于了解业界前沿科技以及个人兴趣,也不太关注究竟会有多少阅读量,所以这里也就不展示相关的数据了,感觉数据应该很差

社交网络

这一节仍然按照惯例公开 2020 年在几个主要社交网络中的访问量和阅读量情况。首先为各位读者分享 2019 年博客面向信仰编程的情况,过去一年时间作者总共发了 48 篇博客,全年的 PV 为 1,808,949、UV 为 322,288,与去年相比同比增长 63.77% 和 48.64%。

2020-blog-statistics

图 6 - 2020 年博客访问量

微信公众号的数据由于只会保留 90 天,所以很难看到全年的增长曲线,年初的订阅量大概在 5,800 左右,到 2020 年底达到了 24,155,全年总共获得了 20,000 左右的新订阅。

wechat-subscription

图 7 - 微信公众号数据

从数据可以看到,全年的博客访问量和微信公众号的订阅都有比较明显地增长,在这里也感谢一直以来订阅和关注作者内容的各位读者朋友。

写在最后

时间是我们非常宝贵的财富,我们每一年都会选择将时间投资在不同的东西上以期望获得相应的回报,无论是投入学习获得更多的知识和经验,还是投入娱乐获得得到放松和良好的心态,这都是我们自己做出的选择和规划。

正如每一年,2020 年对作者来说也是很重要的一年,这一年最大的变化有两点首先是尝试学习多个学科的知识,其次是更加关注软件工程领域中的理论知识、研究学术界最新的研究方向。希望未来能够逐渐扩大自己的外延,更好地了解这个世界并认识世界运行的一些底层逻辑。


  1. 如何管理自己的时间资产 https://draveness.me/few-words-time-management/ ↩︎

wechat-account-qrcode

转载申请

知识共享许可协议
本作品采用知识共享署名 4.0 国际许可协议进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,可适当缩放并在引用处附上图片所在的文章链接。

文章图片

你可以在 技术文章配图指南 中找到画图的方法和素材。