2018 过去了,年终总结我拖到2019才写。

这一年,正式从校园进入职场。

18 年读的书特别少,小说基本不怎么读了,实在没有读小说的心境。现在能想起来的就是毛姆的《面纱》,读完不过瘾还去看了改编的电影。毛姆实在是一位很合我口味的小说家了,到目前为止他的书还没有让我失望过。

看了几本讲互联网企业和开源历史的书:吴军的《浪潮之巅》、Eric S. Raymond的《大教堂与集市》,让刚刚进入行业的我对整个 IT 产业的玩法有了比较宏观的认识。之前对 IT 的了解,仅仅停留砸在 To C、做应用、做网站的维度,实际上是比较狭隘的。

《浪潮之巅》把硅谷企业的创业史都过了一遍,勾勒出时代浪潮的发展轨迹,对其中的企业给出了一些盖棺定论的评价,这对我的知识体系是个很有益的补充。也让我大致了解了一下资本的游戏规则:股票期权是怎么运作的,金融危机的逻辑是什么,风险投资、投资银行是什么……而 18 年恰逢经济形势不好,与书中的内容对照,让人唏嘘。

《大教堂与集市》是介绍开源(open source)运动很著名的书了。慕名已久直到最近才读。对了解什么是开源,什么是黑客,什么是好的自由软件的开发模式很有帮助。Eric S. Raymond(ESR)算是开源的推广者,在这几十年间,参与开源、也见证开源概念的形成与发展。这本书也有对软件工程方法和组织架构的大量探讨。这本书出版于1999年,那时候还不甚确定的事情,在20年后的今天得到了不少印证。跟很多事情的发展一样,大厦不是一日建成的,我们认为理所应当的事情,在最开始并不是理所应当的。所以倒回去看一些前辈当时的努力和思考,很有必要。万一轮到我们这一辈去创造历史,也不是无前例可循。

实际上开源在不同的年代,在不同的人那里,有着不同的意义,比如在大胡子 Richard Stallman (RMS)和他倡导的自由软件运动(free software movement)那里,”开源“是激进且反商业的;相较之下 ESR 和 Linus Torvalds 就不会很排斥商业;而对像 Red Hat (近期被 IBM 收购也是一件值得关注的事了)这种靠开源成功上市的公司,开源是一门生意(国内的也有采用开源模式创业的公司 PingCAP)。所以我们可以看到现在有各种各样的开源协议,可以说每种协议背后都有不同的价值观和商业考虑。实际上开源在今天已经是主流了,连微软这种传统上“邪恶”的闭源公司,都已经在开源贡献列表里排得上名号了,甚至收购了开源社区 Github。开源在未来会有怎样的发展,我很期待。

Linux Kernel 是开源软件里必须提到的成果了,现在能接触到的(Web)服务器上面,跑的都是 Linux。但实际上 Linux 的全称应该是 GNU/Linux 才对,GNU(GNU’s Not Unix!) 本来是自由软件基金会想要搞出来的完全自由的操作系统,他们开发了一堆与 Unix 兼容的程序,但是他们的内核 Hurd 没有成功,反而后来居上的 Linux Kernel 加上 GNU 那些自由软件流行起来。Linux Kernel 与 Hurd 之间的技术差异(宏内核和微内核),也有很多好玩的技术细节。(这段历史我是看了老板推荐的两部纪录片《The Code》《Revolution OS》了解到的。也算补了一课。)

我对开源产生兴趣,一个原因是我很认可自由、创造性的价值,另一方面,我也关心技术如何影响社会,如何成为一种“运动”。技术可以是专制、贬损人类的工具,也可以用来增进人类福利与自由,而这不是单纯的技术问题了。开源从直觉上讲,似乎是和逐利的商业互相矛盾的,也不符合人自私的天性,但实际上它激发了人的创造力,使得软件开发离不了开源。资本社会,大可见行业壁垒、信息不对称、知识产权垄断,互联网在走向封闭。我觉得开源这样一种分布式的、扁平的、自由的模式,是有希望成为我们与资本、权力抗衡的武器的。

我很喜欢这本书附录的一篇文章:《如何成为一名黑客》,读完十分兴奋,相见恨晚,推荐给了很多朋友。读完意犹未尽,我还又去重读了一遍 Paul Graham 的《黑客与画家》。这算是看书的乐趣之一了:原来自己思考和选择的结论,那些有经验的写作者也是这么认为的,我能从他们那里得到了印证,我并不是孤独的。而我想错的部分,也可以得到修正。我在亲身试错之前,能够“提前”得到反馈。我以后的行动,也可以建立在前人的真知灼见上。

文章里面提到的“黑客的态度”:

  1. 这个世界充满了令人着迷的问题等着我们解决。
  2. 一个问题不应该被解决两次。
  3. 无聊和乏味的工作是罪恶。
  4. 崇尚自由。
  5. 态度不能替代能力。

和我的价值观很符合。我觉得这几点不局限于编程领域,实际上科学家、建筑师、艺术家、革命者……有着这种共同精神的人都可以称为黑客。

18 年读到的几本“硬”技术书:《Pro Git》《Linux Shell脚本攻略》还有半本《UNIX环境高级编程》(APUE)。我读技术书都是粗旷型读法,先不管读不读懂,一把梭通读了再说,然后能跟着动手操作就跟着动手。只求先有个大概印象,后面不懂再回来查。不过说实话,效率并不高。真的是老老实实写代码才能掌握得牢固。

《APUE》很经典,我才读了半本,已经很能够让我在工作中遇到问题少走一些弯路了。硬着头皮读下来,才知道学习 Linux 的正规道路是怎样的。对平常遇到一些基本的概念,如信号、线程、标准输入输出等等,有了更感性的理解。理论上,我可以自己写代码把一些工具实现出来了。实际上在大四学《操作系统》这门课的时候,就应该有这样的认识和能力的。那时候的期末大作业是在 Linux 下实现一个编辑器,我甚至完全不知道要怎么找资料,所谓库函数和系统调用是什么,也是一窍不通。

接下来的阅读计划是剩下的《APUE》《SRE》《深入理解计算机系统》(CSAPP)《UNIX网络编程》

工作上还算是学到了不少新东西。因为是在做云计算相关的工作,大量的时间都是在和 Linux 打交道,常用命令算是比较熟悉了。主要的发行版 Ubuntu 和 CentOS 用得也比较频繁。Shell 脚本也写了不少。硬逼着自己啃了不少英文文档,docker、Kubernetes,还有乱七八糟的数据库的文档,现在往回看还是觉得很不系统,至少没有真正变成我自己的东西。

开发方面,尽管效率很低,但边模仿边做还是完成了一些工作。对 go 的开发模式有了更深一点的理解,比如大量使用接口和组合。常规套路看多了,其实也没有想象中的那么复杂。还是要多写。

接下来的规划:

  1. 把计算机网络和操作系统的知识学得更扎实一点
  2. 学习 React,希望慢慢有全栈的能力
  3. 把 Kubernetes 及相关技术栈搞透彻,提高解决问题的能力