且听书吟

  • 首页
  • 分类
  • 关于
  • 留言
  • 友链
扫码加我微信好友

Yufan Sheng

且听书吟

《Go 语言设计与实现》简评

2025-10-01 20:57 书评

Go 语言设计与实现

第一次接触左老师的博客《面向信仰编程》应该是在 2020 年,那时候我在腾讯云工作,内部要求统一转 Go。作为一个 Java,在寻找学习资料时,我找到了左老师的博客,被里面关于 Go 语言的细节文章和插图惊艳到。后来在和熟悉的图灵编辑英子老师聊天时,才知道她正好是左老师的《Go 语言设计与实现》的编辑。于是,在书出版的第一时间,我就拿到了对应的样书。

转眼已经过去四年,上周一我还特意重新阅读。我觉得是时候认真地点评一下这本书了。

翻开这本书的豆瓣评价,可以发现它有着极大的两极化反应。喜欢的人如饮甘露,赞不绝口;不喜欢的人则将语言抬升到极端,批评得非常尖锐。

我个人印象最深的是,编辑老师曾提到左老师的语言过于简洁。简洁的语言在写博客时是可以接受的,因为博文一般较短,通常只有千字左右,更多的是讲重点。而写书的要求则完全不同,给出版社写书的朋友可能知道,最初拟定出版合同时,图书的大纲和选题已经经过内部评审,且每个阶段要交的稿件基本上已经确定。因此,在写书之初,就需要有一个清晰的框架,而不是想到哪里写到哪里。

框架(目录)确定之后,接下来就是在框架上填充内容,明确每个章节的重点。这实际上是语言组织与表达的艺术。当然,编辑在此过程中会帮忙审定和优化字句,但写作的核心始终是作者本身,编辑更多是对文字的二次加工。

《Go 语言设计与实现》的首要问题,便是写作时的表达问题,尤其是在已有框架的基础上。例如,第一章讲解调试源代码,第二章讲解编译原理。两章共计约 50 页的内容,涵盖了大学本科一学期编译原理的课程内容。值得一提的是,许多读者并非计算机专业出身,缺乏系统学习相关课程的背景。即使是有相关基础的读者,作者在组织内容时也存在一定的失衡。例如,在讲解词法分析时提到的 Lex,我相信大多数读者并不理解。作者自己也提到,从 Go 1.5 开始,Go 编译器不再依赖 C 的 Lex。不过,这只是干巴巴地附上一句,而没有深入探讨,甚至连自举的内容都懒得提一下。再到文法分析部分,涉及到的 LL、LA、LR 等概念,估计很多读者都会一头雾水。与之对比,ANTLR4 的作者在其类似的书中,通过清晰的图示和流程图将闭包、DFA 等概念呈现得一目了然,读者很容易就能理解。

另外,书中的代码片段也值得一提,甚至可以说是灾难。代码应该服务于书本内容,但左老师的做法似乎是讲到哪就贴上相应的代码。正确的做法是,首先讲解宏观的设计思想和代码的整体结构,然后再逐步细化到具体的代码,解释每一行代码的作用。与雨痕和郑建勋老师的书籍相比,左老师在这方面做得稍显不足。

起初,插图是我对左老师的博客非常赞叹的地方,甚至研读过他关于如何绘制插图的博文。但在书中,虽然插图依然精美,但并不总是恰到好处。很多时候,插图的色彩堆砌反而让人分心,读者的注意力容易集中在色彩选择上,而不是图示本身的内容。例如,为什么有些部分是红色的,为什么有些部分是绿色的?实际研究后发现,这些配色并非为了区分主次,只是为了视觉效果而已。

说到缺点,我就提到这里。整体而言,这本书并不是一本差书,否则我也不会重温它。只可惜,左老师本可以做得更好。他在 Go 语言的知识体系和研究深度方面,远远超过了我这个门外汉。很多时候,我们对一本书的评价,可能轻轻松松地说一句“好”或“不好”。但实际上,写一本书并不是一件简单的事情。只不过,我觉得这本书更像是写给作者自己看的。如果想要让更多人看懂,或许还需要更多的努力。

微信扫一扫 分享朋友圈

在微信中请长按二维码

评论 (0)
头像
随机文章
  • OneAPM 试用期工作小结(2015年)
  • 旧月台
  • 光阴向左,生活向右
  • 亦行亦走
  • 记忆 · 洗澡
近期评论
  • 公子扶苏 发表在《学会向这个世界妥协》
  • signal 发表在《留言簿》
  • 秋风于渭水 发表在《学会向这个世界妥协》
  • 苏晓晴 发表在《关于》
  • 一只喵 发表在《人生,很短也很长》
文章标签
花季纳兰性德候鸟算法观铃图片时光外婆信笺学习疼痛
Copyright © 2011-2025 且听书吟
皖ICP备2021002315号-2