《Go 语言高级编程》的故事
截止 2021 年,《Go 语言高级编程》在国内已售出超过 1.6w 册,从技术图书的角度来讲,这本书已经算是成功了,这离不开各位读者的支持,感谢大家~
2016 年的时候,golang-china 的柴树杉找到我,想要一起写一本书,那时候 Go 在国内已经有了一些起色,Gopher 的活动越来越多了,比如后来每年都在办的 GopherChina,和线下很多 Go 语言的 meetup。
国内不少大公司的业务部门还在犹豫要不要把主语言切换到 Go。
我还在某公司写 PHP,对 Go 只能算是刚入门,没有找到合适的机会全职写 Go,虽然答应下来,但这本书的进度肉眼可见地慢。社区项目不是工作,只要进度不快,后面可能就慢慢凉掉了。另一方面,我也确实达不到能够合作写“高级编程”这种话题的水平,只能暂时认怂。
2017 年,在公司内部转岗,我终于能够全职写 Go 了,但在新的部门也不是一帆风顺,工作上碰到一些挫折,个人提出的很多想法在部门内没有得到认可。
如果现在复盘的话,我依然认为那些意见没被重视是某司的损失(笑,否则他们现在应该已经能有一个业界属一属二的业务开发框架了。
既然在公司内没有被认可,那么只能在公司外想些办法了。我想起了之前柴老板规划的被冷藏的《Go 语言高级编程》这本书,找柴老板促膝长谈了很久,恰巧柴老板那时工作也不太顺利,两个天涯沦落人一拍即合,决定要把这件事情做好。
相比之前社区里没有得到授权的纯兴趣翻译项目,这次我们的目标是能把这部分内容一直写到出版。
为了避免未来被出版社的相关政策绑定,也为了督促我们自己,这次书稿的编写阶段,我们就将《Go 语言高级编程》放在 Github 上供 Gopher 们阅览,并提出意见。
一开始我对书里的内容是稍微有一些担忧的,像汇编和 cgo 的内容,当时的我认为有点过于底层,国内愿意接触的人可能都很少。这两部分主要是柴老板负责,我在学习汇编的时候也顺便输出了一篇《plan9 汇编入门》,单独发了一篇文章出来。没想到的是,这篇文章后来被很多人学习和转载。直到现在,在 Google 里搜索 plan9 相关的汇编材料,还是能搜到我当时写的那篇文章。
柴老板当时跟我说他的汇编章节也一直卡着不知道该怎么开始,看了我发的这篇文章一下就有了思路哈哈。后来他很快就写完了这本书的汇编一章,相比我发的那篇多了非常多的细节内容。
另一点让我没想到的是,cgo 的用户其实并不少,国内的不少公司都在用。比如某公司在给 Go 做国密功能的时候,就是用 cgo 来调用国密的 c 库,开发者学习 cgo 的时候,也参考了《Go 语言高级编程》这本书里的内容。更不用提,2021 年的GopherChina 我还听到某公司直接 hack cgo 的故事了,他们内部也是有不少人读过书里的相关内容的。当然,这都是后话了。
书是开源书,写书的时候就有很多人盯着,书的内容我们只用了 8 个月的业余时间就填完了,两个人的效率都很高,干活还是有人盯着效率高(笑。
在这本书内容的最后冲刺阶段,个人曾经动过离职的念头,公司内的项目并不顺利,做平台的事情没有人认可,公司内的日常工作就是无限循环地去做完全一样的工作,有不少人还觉得不用动脑子挺好的,老板对自己也满意,晋升机会也多,挺好。
我个人是实在受不了这样的现状,如果继续做这样无聊的工作,晋升了也没什么意思。我还不如离职三个月,全职专心写书。所以离职的事情,我也和当时的老板提了,离职理由就是要去写书。
可能是那时候部门确实人手不够,所以老板极力挽留,这次做平台的想法得到了通过,并且老板也支持我利用自己的业余时间去写书,这里要感谢一下当时的老板如此开明。换了其他人,可能看这么刺头的员工,还是走了更好。
尽管折腾了一小阵子,公司内的事情和书的事情都走上了正轨,在公司内我可以将自己的想法发挥出来,能真正去做需要动脑子的事情,设计全新的系统,将我们的日常工作全部做到配置化和平台化。在公司外,我还可以利用自己的业余时间,把一些我之前没有办法推进的“私货”放在书里。可谓是两开花 (p≧w≦q)。
18 年 8 月,《Go 语言高级编程》完稿,之后顺理成章地在 19 年 7 月出版(传统的出版流程是真的长)。借助这本书,柴老板和我都在国内的 Go 圈子里有了一些影响力,我们最初的目标达成了。
在公司内,我推进的平台也在书完稿之后不久就上线了,之后的将近两年时间,这个平台不断地扩展功能,支持更广阔的数据场景需求。在我 20 年离开时,平台已经是公司内较为先进的业务支持设施了。
个人在公司内也为该平台写了不少文档,离职的时候我大概看了看,几乎 90% 的设计文档都是我写的。后来还传来一些消息,这些文档和代码甚至被其它事业部的同事借鉴,成为了他们自主创新的平台建设成果。当然,这也是后话了。