| 2021-03-01
什么是代码健康
良好的编码实践包含许多方面,并不是任何代码问题都能由检查工具发现。
例如,编写具有可读性和可维护性的代码,不仅仅是编写好的测试,或者拥有合适的检查工具,而是拥有一开始就容易理解和修改的代码。
谷歌关心软件工程过程与实践。
无论软件是手工编写,还是工具生成的,都可能影响代码的可读性、可维护性、稳定性或简单性。
因此,谷歌使用“代码健康”这个词来覆盖上述的所有方面。
如何确保工程师遵循这些实践,并且仍然允许他们独立做出合理的工程决策呢?
我们所做的工作是致力于改善工程师的日常工作状态,
使他们能够以更短的时间开发代码、减少开发工作、提高稳定性和改进性能。
每个人都希望他们的代码变得更容易理解,他们编写的库文件变得更简单。
因为我们都知道,这些东西能让我们更快前进,制造更好的产品。
这并不是说我们对谷歌的工程实践有严苛的规定。
我们仍然鼓励工程师对其项目做出自己认为最明智的决定。
什么是易理解的代码
当你看不懂别人提交给你审核的代码是什么意思时,你也许很容易会产生有一种感觉,觉得提交者比您更聪明。
但实际上,如果这段代码很难理解,那么,很可能是它过于复杂了。假如您熟悉它所使用的编程语言,那么阅读健康的代码几乎就像用您的母语阅读一本书一样简单。
假设一个开发人员发给你下面这段Python代码,请你审核,
def IsOkay(n):
f = False
for i in range(2, n):
if n % i == 0:
f = True
return not f
尝试理解它,如果理解它的时间超过几秒钟,那就是一种坏味道。此时,你只需要添加一个代码评论,说"我很难理解这段代码”,或者更具体一点,比如“请在这里使用更具描述性的命名”。
再过一会,提交者可能已经修改了代码,并将其再次发送给您审核:
def IsPrime(n):
for divisor in range(2, n / 2):
if n % divisor == 0:
return False
return True
现在我们可以很容易地阅读它,这本身就是一个好处。
通常,只需要要求开发人员写出清晰的代码,就会带来根本性的改进。 在上面的例子中,开发人员意识到了可能的性能改进,因为修改后的代码更容易理解——当数字不是素数时,函数可以更早返回了,并且循环变成为n / 2,而不是n。
现在我们可以很容易地理解这段代码了,还可以看到其中的很多问题。 例如,对于0和1,该函数会有奇怪行为,当然还有其他一些问题。但最重要的是,现在显而易见的是,应该删除整个函数,因为该函数所要实现的功能已经有预先定义的函数了,即:检测数字是否为素数的函数。澄清代码有助于开发人员和审阅者。
总之,不必浪费时间审查难以理解的代码,要求提交者将其澄清就好了。 事实上,这样的评论是代码评审员最有用和最重要的工具之一!