Go语言精进之路:从新手到高手的编程思想、方法和技巧(1)
上QQ阅读APP看书,第一时间看更新

4.3 Go语言原生编程思维

由上述现实中的问题可以看到,面对同一个问题,来自不同编程语言的程序员给出了思维方式截然不同的解决方法:C的命令式思维、Haskell的函数式思维和Go的并发思维。结合“萨丕尔—沃夫假说”,我们可以得到一个未经理论证实但又确实对现实有影响的推论:编程语言影响编程思维,或者说每种编程语言都有属于自己的原生编程思维。

Go语言诞生较晚,大多数Gopher(包括笔者在内)的第一语言并不是Go,而是“半路出家”从其他语言(如C、C++、Java、Python等)转过来的。每种语言都有自己的原生编程思维。比如:C语言相信程序员,提供了指针和指针运算,让C程序员天马行空地发挥,接近底层的直接内存操作让C程序拥有很高的性能;C++支持多范式(命令式、OO和泛型),虽不强迫程序员使用某个特定的范式,但推荐使用最新代表现代语言发展特色的泛型等高级范式;Python语言更是形成了Pythonic规则来指导Python程序员写出符合Python思维或惯用法的代码。经验告诉我们,但凡属于某个编程语言的高质量范畴的代码,其必定是在这种编程语言原生思维下编写的代码。如果用A语言的思维去编写B语言的代码(比如用OO思维写C代码,用命令式的思维写Haskell代码等),那么你写出的代码多半无法被B语言社区所认可,更难以成为高质量代码的典范。并且,如果沿着这样的方向去学习和实践B语言,那么结果只能是南辕北辙,与编写出高质量代码的目标渐行渐远。

那么Go原生编程思维究竟是什么呢?一门编程语言的编程思维是由语言设计者、语言实现团队、语言社区、语言使用者在长期的演进和实践中形成的一种统一的思维习惯、行为方式、代码惯用法和风格。Go语言从诞生到现在已经有十年多了。经过Go设计哲学熏陶、Go开发团队的引导和教育、Go社区的实践,Go语言渐渐形成属于自己的原生编程思维,或者说形成符合Go语言哲学的Go语言惯用法(idiomatic go)。它们是Go语言的精华,也是构建本书内容的骨架,并值得我们用一本书的篇幅去详细呈现。因此可以说,阅读本书的过程也是学习和建立Go语言原生编程思维的过程。

我们的目标是编写出高质量的Go代码,这就需要我们在学习语言的同时,不断学习Go语言原生的编程思维,时刻用Go编程思维考虑Go代码的设计和实现,这是通往高质量Go代码的必经之路。

小结

人类在通过自然语言交流和表达观点的漫长过程中,逐渐形成了固定的语言表述方法。除此之外,人类还利用肢体动作、眼神、表情、纸笔等辅助行为或工具来帮助语言的精确表达,并且在使用这些辅助行为和工具时形成了固定的使用方法,这些以这门语言为中心的固定的表述方法、辅助行为和工具用法总称为这门语言的惯用法,它们反映的就是该语言的思维方式。

编程语言也类似,以一门编程语言为中心的,以解决工程问题为目标的编程语言用法、辅助库、工具的固定使用方法称为该门编程语言的原生编程思维。图4-3是自然语言思维与编程语言思维的对比。

046-1

图4-3 自然语言思维与编程语言思维

我们学习和使用一门编程语言,目标是用这门语言的原生思维方式编写高质量代码。学习Go,就要用Go的原生编程思维而不是用其他语言的思维方式写Go代码。掌握Go原生编程思维就是我们通往高质量Go编程的学习方向和必经之路,因此本书后面将从语言、标准库、工具链、工程实践等方面来全面介绍Go语言的原生编程思维,帮助大家打好编写高质量Go代码的基础。


[1]http://golang.org/s/prime-sieve