我是一位经验丰富的开发人员,但是没有做过很多代码审查。我被要求检查用Python编写的代码,但我不知道Python。
用我不知道的语言来检查代码有任何意义吗?
我是一位经验丰富的开发人员,但是没有做过很多代码审查。我被要求检查用Python编写的代码,但我不知道Python。
用我不知道的语言来检查代码有任何意义吗?
Answers:
有什么感觉吗 是。即使您对编程语言的语义一无所知,您仍然可以读取字符并注意到格式不一致,注释缺失,标识符选择不当,明显重复等。
有多少意义或足够的意义来偿还您的时间成本?我不确定。这取决于您的职位,代码审查在团队工作流程中的重要性以及其他一些我们无法充分量化的因素。
enumerate
。)我认为您的评论是一个很好的例子,说明了为什么尝试复习您不熟悉的语言最多应该对自己有教育意义。
作为Code Review Stack Exchange的定期撰稿人,我遇到许多与语言无关的问题,例如:
而这样的例子不胜枚举。但是,尽管我不需要了解该语言,但是我仍然可以查看这些问题/要点。
我们的一些顶级用户在他们不积极使用或不知道的语言中获得了最佳答案。在我的前十名中,甚至有两种语言是我既不知道,也无法在我的机器上编译/运行的语言。
我什至会说这与审查某人的伪代码相同。只要您可以观察和评论与您了解的事物相关的事物,就可以了,而且也很有意义。
我认为这是底线:
对于不了解Python的特定情况,我会特别警惕。Python有许多习语和标准实践,最终使好的Python看起来与您在其他语言中可能期望的完全不同。(实际上,我认为Python强调的内容使我的代码在其他语言中看起来更好,而在其他语言中却没有得到改善。)除PEP8之外,还有一个很好的例子说明了您可能会完全错过Python鼓励的思维方式。
让我们看一个简单的例子。采取以下代码:
f = open('/home/me/something.txt')
try:
content = f.read()
finally:
f.close()
看到此代码有问题吗?如果您尚未使用Python,则可能不会。问题在于,Python 中有一种更受欢迎的样式可以完成完全相同的操作:
with open('/home/me/something.txt') as f:
content = f.read()
这是一个上下文管理器。你知道他们有什么用吗?您知道什么时候才适合使用它吗?您知道什么时候适合自己创建吗?没有?然后,您可能还没有准备好审查Python。
让我们看另一个例子。
def add_fifty(other_list):
result = list()
for i in other_list:
result.append(i + 50)
return result
x = range(10)
y = add_fifty(x)
看到问题了吗?问题是这种方法是完全没有必要的。当操作很简单时,您可能应该只使用一个理解:
x = range(10)
y = [i + 50 for i in x]
如果没有看到,则说明您不熟悉Python的功能和习惯用法。
他们可能正是因为您不知道Python而要求您审查Python代码。 有一种管理理论,团队中有一个“傻瓜”很有用。我并不是在给您起一个坏名字:)这个想法是团队可能会遭受小组思考并发展隧道愿景。打破这种局面的一种方法是在团队中邀请其他团队成员认为是“傻瓜”的人,即不了解主题的人。您将提出问题以告知自己,这些问题将来自其他团队成员可能从未考虑过的观点。
您不了解Python,因此Python编码人员看似普通的东西对您来说似乎很奇怪。您可能会建议团队从未考虑过的改进。
代码审查与搜索拼写无效和格式错误的变量无关。如果您使用代码查看来查找此类内容,请不要浪费时间并使用工具。
代码审查是关于改进设计并检测新手程序员的常见错误。
由于我使用C ++进行编程,而且我对Python不够了解,所以我不敢复习Python代码。但是我可以帮助进行Java代码审查。
您没有说您使用哪种语言编写程序,但是,如果您不知道使用哪种语言编写程序,我看不出您可以在代码审查中做出什么贡献。
代码审查(除了实际查找缺陷之外)是一个团队成员向他人介绍正在添加或更改的代码的很好的介绍。如果您是一位经验丰富的开发人员,那么您应该能够通读足够的内容,以大致了解正在发生的事情。
从团队负责人的角度来看代码审查:那里有人了解应用程序应该做什么(业务逻辑),那里有人了解应用程序应该做什么(实现逻辑),可能还有其他人那里的人需要知道所有这些如何组合在一起。
你绝对不应该是唯一的评审,但也有很多很好的理由让你成为一个评审的。对于很多需要在代码审查中回答的问题,不了解该语言并没有太大的障碍。举例来说,我是该网站C#标记中排名前20位的回答者之一,而我还没有C#中的已编译hello世界。
您可以在不了解语言的情况下共享一些专业知识:
这也是加快新产品开发速度的好方法。我刚刚加入了一个新团队,在那里我知道使用的语言很好,但是却不了解领域。参加代码评审使我更好地了解了领域方面,即使我还不能在这些方面做出很大贡献。
对于您而言,这是学习新语言成语的好方法,因为您会看到其他审阅者留下的评论。这些都是很难以其他方式学习的事情,因为您的解释器并不关心您的代码是否为pythonic。
这可能是双赢的局面。我要说的是,您可能是一位特别有价值的审阅者,因为您是Python的处女,没有被知识的诅咒所污染。
可以这样考虑:如果代码足够清晰,即使是Python初学者也可以理解它,那么它一定是好的代码。您难以理解的部分可能是返工或更好的评论的对象。
显然,这对您也将是有益的,因为您将在使用过程中选择一种新语言。(希望您提供的代码是一个很好的学习示例。)这种安排对于Python(一种享有“可执行伪代码”的声誉)的语言特别有效。如果您是一位经验丰富的开发人员,那么您就不难理解Python程序的要旨。
需要警告的是,您将不会发现由特定于语言的陷阱引起的错误。但是,查找错误并不是代码审查的唯一目的。如果没有其他要求,您只要知道同事代码中发生了什么事情,便可以参与知识转移。
一些观察:
1)如果您是一位经验丰富的开发人员,那么您将通过使用Python来学习Python(或至少需要了解的知识)。这将是“边做边学”的情况。一开始会很困难,但是当您选择语言时会变得更加容易。将此视为学习另一种语言的机会(人们经常通过“沉浸式”学习“外国”语言)。
2)SE网站上有很多有价值的人,这些人是“非技术”的,但是精通语法,沟通和逻辑。这样的人对主题产生了“新鲜的眼光”,并进行了一些其他人错过的“毫无头脑”的修复,因为他们太“束缚”了材料。大概正在向您咨询您的非“技术”(即非Python)技能,例如逻辑和整体编程知识。
而且,如果您没有进行过多的代码审查,那么几乎任何代码审查经验都将对您作为开发人员有所帮助。这看起来像您的技能和需求与团队的完美匹配。
这取决于审查的目标。即你是指有效的意思。
您仍然可能能够检测到一些问题。如果您只是他们的全部回顾对象,并且他们只是希望您对它有所了解,那么它们肯定会对您有所帮助。语言之间的许多结构概念相似。其中一项特别是能够查看评论。应该充分说明一下,不是那种特定语言的程序员仍然应该能够很好地了解正在发生的事情。如果没有,那么您可以告诉他们缺少评论的地方。如果评论得那么好……那么您应该能够仅通过正在发生的事件的注释来复习它们的结构,而不必真正阅读正在发生的代码。
但是您将不可能发现许多其他问题。因此,如果他们打算让您进行彻底的确定,以确定它是否是一个做得好/可行的程序,那么他们将感到失望。
该结果是否值得您花时间去做,在很大程度上取决于项目。