编写 Go语言代码三条基本原则

这是一篇翻译文章,为了使读者更好的理解,会在原文翻译的基础增加一些讲解或描述。

软件工程是当您添加时间和其他程序员时编程发生的事情。— Russ Cox

Russ 正在区分软件编程和软件工程。前者是您为自己编写的程序,后者是随着时间的推移许多人会使用的产品。工程师会来来去去,团队会扩大和缩小,需求会改变,功能会被添加,错误会被修复。这是软件工程的本质。

三条基本原则

  • 清晰可读
  • 化繁为简
  • 生产力

你会注意到我没有说性能或并发性。有些语言比 Go 快一点,但它们肯定不像 Go 那样简单。有些语言将并发作为最高目标,但它们的可读性和生产力都不高。性能和并发性是重要的属性,但不如清晰、简单和生产力重要。

1.1 清晰可读

程序代码应该主要是方便人类阅读,并且可以在机器上运行。代码的阅读次数比编写次数多得多。一段代码在其生命周期中将被阅读数百次,甚至数千次。清晰很重要,因为所有软件,不仅仅是go程序,都是由人类编写的,以供其他人阅读。机器也使用软件这一事实是次要的。

如果你正在为自己编写一个程序,也许它只需要运行一次,或者你是唯一会看到它的人,那么就做对你有用的事情。但是,如果这是一个多人贡献的软件,或者人们会在足够长的时间内使用它,要求、功能或运行它的环境可能会发生变化,那么您的目标必须是为您的 程序是可维护的。

1.2 化繁为简

简单是可靠性的先决条件。— Edsger W. Dijkstra

为什么我们要追求简单?为什么 Go 程序简单很重要?

控制复杂性是计算机编程的本质。— Brian Kernighan

我们都遇到过你说“我无法理解这段代码”的情况,是吗?我们都参与过你害怕做出改变的程序,因为你担心它会破坏程序的另一部分;您不了解且不知道如何修复的部分。这是复杂性。

构建软件设计有两种方式:一种是简单到没有明显的缺陷,另一种是复杂到没有明显的缺陷。第一种方法要困难得多。— C. A. R. Hoare

复杂性将可靠的软件变成了不可靠的软件。复杂性会扼杀软件项目。因此简单是 Go 的最高目标。无论我们编写什么程序,我们都应该同意它们很简单。

1.3 生产力

设计是一门艺术,要求编写的代码当前可用,并且以后仍能被改动 --Metz

我要强调的最后一个基本原则是生产力。开发人员的生产力是一个庞大的话题,但归结为这一点;你花多少时间做有用的工作而不是等待你的工具或绝望地迷失在外国代码库中。Go 程序员应该觉得他们可以用 Go 完成很多工作。

有玩笑说 Go 是在等待 C++ 程序编译时设计的。快速编译是 Go 的一个关键特性,也是吸引新开发人员的关键特性。编译速度是经久不衰的话题,公平地说,在其他静态语言中需要几分钟的操作,在 Go 中只需要几秒钟。这有助于 Go 开发人员感觉与使用动态语言工作的同行一样高效,而不会出现那些动态语言固有的可靠性问题。

Go 程序员需要意识到编写代码是为了阅读,因此将阅读代码的行为置于编写代码的行为之上。Go 甚至通过工具和自定义来强制所有代码都以特定样式格式化。这消除了学习项目特定方言的困难,并有助于发现错误,因为它们看起来不正确。

Go 程序员不会花几天时间调试难以理解的编译错误。他们不会在复杂的构建脚本或将代码部署到生产环境中浪费时间。最重要的是,他们不会花很长时间去理解同事写的代码。

Go 是一种旨在提高生产力的语言,它是为大规模、工业规模的软件设计而构建的。

译文链接:https://zhuanlan.zhihu.com/p/539754417

全部评论(0)