乐趣区

关于程序员:面向信仰编程Draven-专访像写代码一样用树形的结构写文章

本文首发于“Shopee 技术团队”公众号

站在网络与技术前沿的不少开发者们,还放弃着现在看起来略显古早的 Web 2.0 时代行为——写博客。

技术博客写作是工程师们因循已久的传统。对于各种代码段、架构图,和层级明显的逻辑推导过程来说,技术文章无疑是一种通过测验的无效交换形式。

写技术文档则是工程师们的另一种日常。面对技术文档,有人投入,有人头疼。写代码与写文档,到底能不能够取得和解?

本期读书日特辑,咱们邀请到一位播种了不少读者的 Shopee 工程师,来和大家一起聊聊技术写作这回事儿。

Draven 是来自 Shopee Engineering Infrastructure 团队的后端工程师。在工作之余,他还领有另一重身份——技术写作者。

如果你凑巧读过「面向信奉编程」的博客文章,没错,Draven 就是那位不愿走漏姓名的博主。他在博客分享本人的技术学习笔记,和对程序设计原理的思考,还有公布后大受欢迎的技术文章配图指南。

从博客中能够窥得 Draven 对系统性思考与总结的偏好。他写系列文章,从「为什么这么设计」到「看看论文」;他在学习与摸索 Go 语言的过程中,将思考剥离为文章,开源成电子书,又在 2021 年末集结成册,出版纸质书。

如何从写博客到出书?写技术文章到底带来了什么?又怎么疾速接触新的常识?以下是 Draven 对于技术写作与常识获取的分享。

Q:先简略介绍一下本人吧 :D

A: 我是 Draven,很多人可能都是通过我的博客据说我的。在大学期间次要学的是软件工程,大学四年根本都是在做 iOS 客户端开发,毕业之后就开始做后端开发,做过交易所、也做过调度零碎,近两年次要做 Kubernetes 相干的开发工作。目前对云原生、操作系统内核都比拟感兴趣。

Q:最开始写技术文章的时候,应该还是在校期间?过后是怎么决定要开始搭建博客?受谁的影响比拟大?

A: 开始写博客的时候应该是在大二,起因也比较简单,过后受到学长的影响,提到写博客对当前找工作都比拟有帮忙,所以本人就开始折腾博客了。比拟早的时候是当做笔记来写的,前面发现博客有了读者,就把之前集体感觉价值比拟低而且没什么人看的内容都删掉了。

Q:你在一篇博客文章中提到,把「进步技术影响力」退出了本人的 OKR,往年的 OKR 里还有这一项吗?替读者们问一下,为什么保持写了好几年的博客这几个月停更了?

A: 往年的 OKR 还是有这一项的,只是具体内容在实现或者到 Deadline 之前就先不说了。这半年的很多业余时间都在筹备《Go 语言设计与实现》的出版,而且作为内容的创作者来说,不是任何时候都是有表白和分享的欲望以及内容的,博客连着写了五六年的工夫,本人逐步对之前想要分享的题目失去了趣味,所以想找一些新的方向和内容。

Q:你后面提到「在一个主题中的反复写作是苦楚的」,但实际上你在博客写作中也布局了主题,例如「为什么这么设计」系列。写书和写博客,两种主题写作的最大区别在哪里?它们享有同一种苦楚吗?

A: 写书和写系列博客都是内容的写作,前者往往须要内容有更强的相关性、连续性以及足够的篇幅,这也须要继续对同一内容进行输入,因为咱们在写书的过程中有很明确的目的性,所以这个周期是比拟漫长和苦楚的,不容易保持下来。不过也正因为艰难,你在实现后失去微小的成就感,也会开释很多压力。

后者更像是对一组博客的分类和整顿,它没有明确实现的工夫点,所以写起来反而会更随便,少了很多压力,如果切实感觉这个主题写不上来了,换一个主题就能够了,倒是没有写书的过程艰难。

Q:在工作之余写博客、写书,做技术分享,有没有计算过在这一类事件上投入的工夫老本?让你继续上来的能源有哪些?

A: 写博客和写书对于本人来说其实是一个输出和输入同时进行的过程,这些付出的工夫最终都会回馈到本人身上,你会发现本来本人认为曾经把握的常识其实并没有把握,缺失的细节会在这个过程中补齐,这个过程须要咱们严格遵循因果关系,失去正当的逻辑链条,这样能力真正失去绝对正确的常识。

Q:联合本身经验,你怎么对待技术写作 / 技术分享对 Developer 的收益?

A: 提到技术写作、技术分享的收益,很多人首先提到的都是技术影响力,这里不想谈对于技术影响力这个听起来比拟虚的话题。这里更理论地介绍一下,这件事件对咱们的集体能力,尤其是对本人带来了哪些扭转。

技术写作并不是多数人才会做的事件,咱们输入的技术计划和文档都须要把握肯定写作的能力,如何写出合乎认知、易于了解的文档,在工作中是与写代码同样重要的,我始终都认为能写好代码的人肯定能写好文档。以集体为例,如果当初从新读以前写的博客,会发现以前的文章逻辑不够周密,构造也不够谨严,明天在写作时会更加重视论断的推导过程,与过来相比是能感觉到显著有晋升的。

咱们应用树形的构造写代码,管制组件的依赖关系,也同样用树形的构造写文章,升高读者的心智累赘,这些都是类似的。之前看到过一句话,写得十分好,在这里分享给大家:「写作之难,在于把网状的思考,用树状的语法结构,转换成线性字符串。」

Q:从博客中能够看到,你最开始做 iOS 开发,而后去写了 Ruby on Rails,起初也折腾过 Java,到 2020 年负责 K8s Scheduling SIG 的 Reviewer,方向转变的过程中感觉最艰难的是什么?以及如果有的同学想转到一个感兴趣,但却在日常工作中接触不到的方向,有什么样的倡议?

A: 方向转变的过程中,咱们遇到的问题应该都是类似的:如何凭借曾经有的常识疾速摸索新的畛域。

如果想转到一个感兴趣的方向,倡议用好搜索引擎搜寻该畛域的关键字,而后用深度遍历和广度遍历的形式逐个钻研搜寻出的后果,疾速筛选信息,在这个阶段只有肯花工夫,晋升是十分快的,学习新常识可能会苦楚,然而摸索和播种的过程个别都是高兴的。

Q:接触新的技术栈时,你会如何掌控本人的学习门路?在学习的过程中,参考别人的相干文章、书籍或是社区中的经验交流,起到了多少作用?

A: 这两年接触新的技术栈个别都比拟功利了,平时只会去理解这些组件可能做什么,只有真正用到的时候才会边用边查,也是因为工夫绝对无限,没有太多大块的工夫可能集中浏览书籍,所以筛选书的时候也比拟审慎。

参考别人的相干文章、书籍或是社区中的经验交流还是很有用的,不过还是要感激搜索引擎把这些优质的内容推送到咱们的后果中。

Q:最近在读哪些书或者论文?能举荐一些吗?

A: 最近在重新学习一些操作系统、网络和 C++ 的常识,在看《UNIX 网络编程》《Effective C++》。论文的话能够看一下去年的 SOSP ’21,我比拟关注调度、分布式系统这些方面的内容。

退出移动版