2017 年度规划

如题,这是我 2017 年的简要规划。从今往后,我会在每年年初写一篇规划,年末发表一篇总结。本文是整个系列的第一篇。


首要原则

从初中到现在,我已经和制定规划打了十年交道。这十年的经验汇成一句话:少即是多。人有一种贪大求全的倾向,喜欢把规划写得很宏伟、很美好,然后憧憬它变成现实。但现实是残酷的,资源是有限的,必须集中力量办大事,不能面面俱到。因此,一个好的规划,只会安排几件重要的事。这是制定规划的首要原则。


技术方向

我将长期关注下面两个方向的技术:

  1. 分布式系统与网络编程
  2. 网络安全与应用安全

熟悉这两个方向需要多年的技术积累,不可一蹴而就。在 2017 年,我将完成分布式系统相关理论的学习。学习以研读各类学术论文为主要手段:GFS, MapReduce, BigTable, Paxos, raft 等等。根据我在 ECE6102 Dependable Distributed System 课上的经验,大多数论文难以直观理解,需要结合多篇参考文献一同研究。我会在博客上更新系列文章,公开研读笔记。此外,MIT 6.824 Distributed Systems 也是优秀的学习材料,我计划在年内听完课程并完成大部分作业。


主技术栈

根据公司的业务需要,Java EE + Spring 是我未来多年工作的主要技术栈。我是个 Java 新手,对 Spring 也知之甚少。要想迅速形成生产力,必须预先学习必要的工具、知识和技法:

  • Intellij IDEA 的基本功能和相关快捷键
  • Java 常用标准库和第三方库的功能和接口
  • JVM 原理,内存结构,垃圾回收机制
  • Spring 项目的组成
  • Spring 依赖注入方法
  • Maven
  • Tomcat
  • ...

在二月入职前,我打算迅速入门 Spring. 入职之后,我会在工作实践中完善整个知识体系。学习的结果将以知识卡片的形式呈现。


技术探索

在工作之外,拆轮子和造轮子非常有助于程序员的成长。

拆轮子,就是阅读他人的代码,分析用意,品味设计之美。第一个被拆的对象是 shadowsocks. 选择它基于多方面的考虑。它的代码不长,由 Python 写成,结构简明易懂。学习它的协议可以增进对 TCP/IP, HTTP 和 DNS 的了解。还有一点理由我就不说了,你懂的。拆轮子的结果——代码分析——会以系列文章的形式发表在博客上。

造轮子,就是重复他人的项目,亲身实践,精进编码之术。我备选的项目有数个,今年将至少实现其中的一个:密码管理器。我计划使用 go 语言(golang)开发这个软件,并使用 GTK+ 作为其 GUI 库。我之前从未接触过 golang 和 GTK+, 因此这个项目也肩负着学习的重任。如果可能,我希望借此机会向开源事业做出一些微薄的贡献。


非技术区

这一部分的目标与工作无关。

我会坚持跑步锻炼。跑步是我熟悉和喜欢的健身方式。我打算通过循序渐进的练习增强机体的耐力,在今年秋季完成第一个 10 英里(16 公里)跑。

音乐和书籍是我无法割舍的两大爱好。在音乐上我会尝试学习乐理,同时利用 MIDI 做一些有趣的片段。在阅读方面,除了计算机相关书籍,小说、认知科学、心理学是我重点关注的领域。没有固定的书单和最低任务量,阅读是整个规划中弹性最大的一部分。

我计划平均每天安排一小时学习日语。今年突破的重点放在阅读上:动词的各类形式、固定句式、常用的名词和形容词。来年基础扎实之后再主攻听力。

Meetup 活动将会成为周末生活的重头戏。详细的安排需要等实际体验后才能确定。


可有可无

还有一些可选的目标。

程序员一生中有数千乃至上万个小时在使用文本编辑器,精通一款文本编辑器能够节约不少时间。在熟练掌握 vim 和基本上手 emacs 之后,我发现了 spacemacs 这款将两大神器合二为一的超级编辑器。我希望可以花一些时间探索它的强大功能,甚至使用 Lisp 语言定制自己的插件。

另一件很有意义但也很消耗时间的事情是烹饪。如果可以取得不俗的进展,我打算带饭上班。这样再也不用担心在食堂买到难吃的饭菜了。


秘密项目

(略)


关于博客

最后聊一聊这个博客。去年底,博客月 UV 突破了 500,月 PV 超过了 1000。尽管取得了一些成绩,可我并不打算设定任何关于访问量的目标。我甚至不建议读者订阅这个博客——因为主题太多、内容太杂,期望的文章只是推送中的一小部分。不管有多少阅读量,我都会坚持把博客写下去。优秀的文章终究会通过搜索引擎和转发链接让更多的人看到,其他的文章无论如何至少会有一个读者——这就够了。