与Thorsten Ball的共鸣:Go作为教学语言在技术写作中的优越性

Go语言用于技术写作的优势

c4c4e41de77a8962c932718fa7e30138.jpeg请点击上方蓝字TonyBai订阅公众号!

8d83aa74210eca0ace60ca4e51ff357a.png

近日,两本备受好评的畅销书《用Go语言自制解释器(Writing An Interpreter In Go)[1]》和《用Go语言自制编译器(Writing A Compiler In Go)[2]》的作者、前Sourcegraph[3]工程师索斯藤·鲍尔(Thorsten Ball)[4]发表了一篇名为“Glad I did it in Go[5]”的文章。在这篇文章中,Thorsten表达了他对8年前编写这两本书时选择Go语言作为教学语言的庆幸之情。

2021年12月17日,我的第一本Go技术图书《Go语言精进之路vol1和vol2》[6]出版了,至今好像是已经是第4次重印了(修正了勘误表[7]中的所有瑕疵)。作为该书作者,当我读到Thorsten Ball的这篇回顾文章时,我感到了一种强烈的共鸣,其中的许多观点与我的不谋而合。尽管我们的书主题不同,但我们都体会到了选择Go语言作为教学语言进行技术写作的巨大优势

在这篇文章中,在《Go语言精进之路[8]》出版即将三年之际,我想借此机会分享我的thoughts,探讨Go语言如何为技术作者提供了独特的优势。

1. Go的稳定性和向后兼容性

首当其冲的优势就是Go的稳定性和向后兼容性,它们给我留下了深刻的印象。三年快过去了,当初《Go语言精进之路》中使用Go 1.16版本[9]编写的代码示例[10],在最新的Go 1.23版本[11]中仍然可以完美运行,几乎不需要任何修改。这种稳定性不仅让我的书保持了长期的相关性,也让读者能够轻松地在不同版本的Go环境中实践书中的内容。正如Thorsten所提到的,他只需添加一个简单的go.mod文件[12],就能使8年前的代码适应新的Go版本依赖管理和构建模式[13],这种对更新需求的最小化,在快速发展的编程语言世界中,实属难能可贵。

Go的稳定性还体现在语法特性上,《Go语言精进之路》一书中讲解的语法和惯用法在今天依然是完全有效的,除了loopvar的语义变更[14]可能会让极少的内容略显“过时”。Thorsten也提到了这种稳定性的好处:8年前的代码运行golangci-lint[15]得到的警告与当时是相同的(便于读者复现书中的情形),其书中代码风格仍然符合现在的Go惯例写法。

此外,Thorsten还提及了Go工具链和标准库的稳定性:8年来Go的工具链几乎没有变化,新手容易上手。像Thorsten一样,我也发现Go的开发环境和工具在多年来保持了惊人的一致性。这意味着书中介绍的开发实践和工具使用方法始终有效,大大降低了内容过时的风险。对技术作者来说,这种稳定性是无价的,它允许我们专注于概念和最佳实践,而不是不断更新工具相关的内容。

以上Go的这些稳定性和向后兼容,让我的书中的内容具有了更为持久的生命力,书中内容的价值变得更为长效,也大大减轻了作者对书籍维护和更新的负担,在技术书籍的生命周期中,这一点尤为宝贵。

2. Go的简洁性和可读性

其次,在编写《Go语言精进之路[16]》时,我发现Go的简洁性和可读性为技术写作带来了极大的帮助。许多读者反馈说,即使他们之前没有Go的经验,也能快速上手并理解书中的概念。这种简洁和直观性让Go也成为了编写教程和教学材料的理想选择。此外,正如在项目中所经历的那样,Thorsten也强调了Go语言的语法简单直观在教学过程中的所展现的优势,它既能让初学者快速入门,也能使得书中关于解析器和编译器实现的核心思路能够被清晰地传达给读者,即便在探讨复杂的概念时,也能保持清晰明了。

同时,Thorsten强调内置的gofmt带来的通用风格和测试框架也简化了学习过程,让读者可以专注于理解核心概念和解释器/编译器的实现,而不是纠结于环境设置和代码风格。

3. Go代码易于理解和翻译

Thorsten提到许多读者在从未写过Go代码的前提下,能够将他的Go代码轻松翻译成其他语言,这体现了Go在跨语言学习和理解方面的优势,有利于扩大了书籍的受众群体,而不仅限于Go开发者。Go社区的多样性和活跃度也为此做出了重要贡献,各种语言背景的开发者都能在Go中找到共鸣。这种跨语言的适应性不仅拓展了书籍的应用范围,也增强了其教育价值。

4. 小结

回顾这三年,我与Thorsten一样,越发感慨选择Go作为教学语言进行技术写作是多么明智的决定。当然,我这本书本身就是围绕Go语言展开的^_^,这与Thorsten的书籍主题有所不同。Thorsten在8年前高瞻远瞩地选择Go,才着实令人钦佩,要知道那时的Go刚刚发布1.6版本[17]。Go语言不仅是一个强大的编程工具,更是技术作者的得力助手。它的稳定性、简洁性、易理解性和良好的翻译能力,以及稳定优秀的工具链,为我们创造高质量、长寿命的技术内容提供了坚实的基础。

与Thorsten Ball一样,我也为选择Go感到庆幸。看到自己的作品能够持续为读者提供价值,这种成就感是无可比拟的。Go语言在技术写作中展现出的优越性,不仅使我们的书籍能够经受时间的考验,还为整个技术写作领域树立了新的参考标杆。

展望未来,我相信Go语言将继续是技术作者的优秀选择。它不仅是一种编程语言,更是连接作者、读者与技术的桥梁。

参考资料

[1] 

用Go语言自制解释器(Writing An Interpreter In Go): https://book.douban.com/subject/35909085/

[2] 

用Go语言自制编译器(Writing A Compiler In Go): https://book.douban.com/subject/35909089/

[3] 

Sourcegraph: https://github.com/sourcegraph/sourcegraph-public-snapshot

[4] 

索斯藤·鲍尔(Thorsten Ball): https://thorstenball.com/

[5] 

Glad I did it in Go: https://registerspill.thorstenball.com/p/glad-i-did-it-in-go

[6] 

《Go语言精进之路vol1和vol2》: https://item.jd.com/13694000.html

[7] 

勘误表: https://github.com/bigwhite/GoProgrammingFromBeginnerToMaster/blob/main/errata.md

[8] 

Go语言精进之路: https://book.douban.com/subject/35720728

[9] 

Go 1.16版本: https://tonybai.com/2021/02/25/some-changes-in-go-1-16

[10] 

代码示例: https://github.com/bigwhite/GoProgrammingFromBeginnerToMaster/

[11] 

Go 1.23版本: https://tonybai.com/2024/08/19/some-changes-in-go-1-23/

[12] 

go.mod文件: https://go.dev/ref/mod

[13] 

Go版本依赖管理和构建模式: https://tonybai.com/tag/gomodule

[14] 

loopvar的语义变更: https://tonybai.com/2024/02/18/some-changes-in-go-1-22/

[15] 

golangci-lint: https://github.com/golangci/golangci-lint

[16] 

Go语言精进之路: https://tonybai.com/2022/07/07/gocn-community-go-book-club-issue2-go-programming-from-beginner-to-master

[17] 

1.6版本: https://tonybai.com/2016/02/21/some-changes-in-go-1-6/

如果本文对你有所帮助,欢迎转发朋友圈!

点击下面标题,阅读更多干货!

Go 1.22中值得关注的几个变化

2023年Go语言盘点:稳中求新,稳中求变

选择正确的Go Module Path

Go语言精进之路:绞尽脑汁,帮你理解方法本质并选择正确的receiver类型

从零开始编程:Go语言真的适合新手吗?


Gopher部落知识星球在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时,我们也会加强代码质量和最佳实践的分享,包括如何编写简洁、可读、可测试的Go代码。此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

f2d0686075dc940ca138ff2b298089c0.jpeg

ceb46b0b08e8c7fdccf5b43a7a626f4f.png1cf433db907ded7ea22722cfe29daa09.jpeg

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) - https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx

  • 微博2:https://weibo.com/u/6484441286

  • 博客:tonybai.com

  • github: https://github.com/bigwhite

  • Gopher Daily归档 - https://github.com/bigwhite/gopherdaily

  • Gopher Daily Feed订阅 - https://gopherdaily.tonybai.com/feed

994d5b59f4ed053be4cccd9b4c02a517.jpeg

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

In this book we will create a programming language together. We'll start with 0 lines of code and end up with a fully working interpreter for the Monkey* programming language. Step by step. From tokens to output. All code shown and included. Fully tested. Buy this book to learn - How to build an interpreter for a C-like programming language from scratch - What a lexer, a parser and an Abstract Syntax Tree (AST) are and how to build your own - What closures are and how and why they work - What the Pratt parsing technique and a recursive descent parser is - What others talk about when they talk about built-in data structures - What REPL stands for and how to build one Why this book This is the book I wanted to have a year ago. This is the book I couldn't find. I wrote this book for you and me. So why should you buy it? What's different about it, compared to other interpreter or compiler literature? - Working code is the focus. Code is not just found in the appendix. Code is the main focus of this book. - It's small! It has around 200 pages of which a great deal are readable, syntax-highlighted, working code. - The code presented in the book is easy to understand, easy to extend, easy to maintain. - No 3rd party libraries! You're not left wondering: "But how does tool X do that?" We won't use a tool X. We only use the Go standard library and write everything ourselves. - Tests! The interpreter we build in the book is fully tested! Sometimes in TDD style, sometimes with the tests written after. You can easily run the tests to experiment with the interpreter and make changes. This book is for you if you... - learn by building, love to look under the hood - love programming and to program for the sake of learning and joy! - are interested in how your favorite, interpreted programming language works - never took a compiler course in college - want to get started with interpreters or compilers… - ... but don't want to work through a theory-heavy, 800 pages, 4 pounds co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值