我是一个经验丰富的开发人员,但是没有做过很多代码审查。我被要求检查用Python编写的代码,但我不了解Python。

用我不知道的语言检查代码是否有意义?

评论

切线考虑,考虑转到CodeReview.SE并浏览python标签。仅查看问题,请考虑您将对代码提供什么建议,然后查看答案中是否包含该建议。

还相关:初级程序员是否应作为高级程序员项目的代码审查者参与?

听起来,这是了解Python的绝佳方法。对任何看起来很有趣的问题提出疑问-其中有些是您不了解该语言,有些是合法的代码检查项目。

@RobbieDee绝对!即使只是泰迪熊,向某人解释您的代码通常也是值得的。

您说您被要求这样做。问您的人认为您执行此任务将为您的组织增加价值。如果您想知道该价值的本质是什么,请问那个人,而不是互联网上的陌生人!我们不知道那个人的脑袋里正在发生什么。也许代码质量太低,甚至新手都可以发现问题。也许代码的质量如此之高,以至于您将从中学习到良好的习惯。谁能说?有人认为这很有价值。问那个人什么值。

#1 楼

任何意义?是。即使您对编程语言的语义一无所知,您仍然可以阅读字符并注意到格式不一致,注释缺失,标识符选择不当,重复明显等。

很有意义,或者有足够的报偿感您花费的时间?我不确定。这取决于您的职位,代码审查在团队工作流程中的重要性以及我们无法充分量化的其他几个因素。

评论


进行一些代码审查是了解模块,框架甚至语言的好方法,因此无论如何都值得您花时间(也许您会得到提示...)。但是,我不会批准这样的评论,除非没有让熟悉该语言和代码的人来审阅它。

– Ordous
16年1月13日在15:19

同样,如果您具有良好的领域知识,并且代码的名称得到了很好的命名/注释,您仍然可以从较高的层次上发现错误/被误解/缺少的功能(尽管您可能不会发现由于语法问题引起的错误)

–丹
16年1月13日在17:04

作为局外人,您甚至更有可能发现栅栏错误或应用正确数量的等号的错误,以及类似的东西。

– KlaymenDK
16年1月13日在20:06

布尔上下文中的@KlaymenDK赋值(至少通常是Python中的语法错误)。 Fencepost错误的可能性较小,因为编写良好的Python几乎从来没有使您直接使用数组/列表索引。 (即使您这样做,通常也要枚举。)我认为您的评论是一个很好的例子,说明为什么尝试复习您不熟悉的语言最多应该对自己有教育意义。

– jpmc26
16年1月13日在21:54



@Mawg-我倾向于说这就是自动化测试的目的。即使掌握了该语言的专业知识,也很难仅通过查看代码/不执行代码并观察结果就可以说出代码是否真正符合设计规范(除非您的设计规范如此详细,以至于它本质上就是代码本身) 。答案列举的方面涵盖了进行代码审查的许多(尽管不是全部)有效原因。代码检查通常不包括执行正在检查的代码。

–aroth
16 Jan 14 '13:19



#2 楼

作为Code Review Stack Exchange的定期撰稿人,我遇到许多与语言无关的问题,例如:


格式化,缩进
Scope
循环
键入操作

,列表继续。但是,尽管我不需要了解该语言,但我仍然可以查看这些问题/要点。

我们的一些顶级用户在他们不积极使用的语言中给出了最佳答案,或者不知道在我的前十名中,甚至有两种语言是我既不知道也不可以在我的机器上编译/运行的语言。

我什至会说它与检查某人的伪代码相同。只要您可以观察和评论与您了解的事物相关的事物,就可以了,而且也很有意义。

评论


我什至写了一个PHP程序的答案。这不是最好的答案,但是我仍然坚持认为原始的循环声明很丑陋。

–user113093
16年1月13日在17:17

我通过复习,编写和复习了C#来学习C#。

–RubberDuck
16年1月14日在10:13

如果您不懂Python,就不太可能意识到缩进在语言中的重要性。

–花
16年1月16日在17:39

关于2/10的最佳答案是使用您不知道的语言。谁说选民对他们也一无所知?

–马丁·史密斯
16年1月17日在13:43

虽然我不懂语言,但我仍然会核对我的陈述,如果我搞砸了...相信我,我会听说的

– Quill
16年1月17日在13:45

#3 楼

一般建议

我认为最重要的是:


如果您对语言的了解不够深,不了解其功能和常用习语,则可以可能不会对审查做出太大贡献。
如果您想学习该语言的功能和惯用语,则可以参加复习。您的重点应该是观察习惯用法,并询问对您没有意义的模式和组织问题。这可能有助于确定问题区域,但仅在某种意义上,您可能会迫使开发人员捍卫他们所做的工作。提出问题的方式会为您的知识空白留下空间。请注意,这可能最终会成为评论本身的净成本,但这成本是对您的知识的投资。
在您熟悉该语言的功能,惯用语和标准之前,您的贡献能力有限。 。在您实际用该语言编写了大量代码之前,我不会期望这种情况会改变。

Python的特定注意事项和示例

针对不了解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),并且我可能开始怀疑我是否可以用自己喜欢的语言做类似的事情,这是我以前从未考虑过的。

– gnasher729
16年1月15日在15:58

@ gnasher729“的确,我认为Python强调的内容使我的代码在其他语言中看起来更好,而不是相反。” =)我所知道的其他语言中唯一甚至与远程相似的是.NET的LINQ和Java 8的Streams。 Ruby可能有一些东西,而且我敢肯定,功能性语言会与之接近。我对示例的观点是,如果您不熟悉Python,您甚至可能不知道这样做,因此您甚至都不知道挑战“不良”版本。

– jpmc26
16年1月15日在17:10



@x = 1 .. 10; @y =地图{$ _ + 50} @x;

–烟斗
16年1月15日在20:00

代码审查更多是关于逻辑错误,而不是用某种特定语言(对于外部程序员)实施一些晦涩的语法。这是关于查找逻辑错误的方法,例如完全错误地实现算法(例如在应加法时使用除法)。因此,代码将不完全符合规范。只要结果输出正确,那并不重要。至少,如果您担心像这样的特定优化,则团队代码审查会更好。

– phyrfox
16年1月15日在22:33

@phyrfox这根本不是真的。可能会发现逻辑错误,但是代码审查也(或主要是)关于最佳实践,安全性,性能,可靠性,可读性/可维护性等的。在进行检查之前,确实应该对其进行测试。 imo是StackExchange对代码审查的定义。在Python中,我提到的示例不是“小的优化”。不使用这些模式的Python开发人员非常缺乏经验,与时俱进或无能。这些是语言的基本要素。

– jpmc26
16 Jan 15 '22:51



#4 楼

他们可能会要求您严格地检查Python代码,因为您不了解Python。有一种管理理论认为团队中有一个“傻瓜”很有用。我并不是在给您起个坏名字:)想法是,团队可能会遭受小组思考并发展隧道愿景。打破这种情况的一种方法是让团队中的其他成员认为自己是“傻瓜”的人,即不了解主题的人。您将提出问题以告知自己,这些问题将来自其他团队成员可能从未考虑过的观点。

您不了解Python,因此看起来很普通对Python编码人员来说,您可能觉得很奇怪。您可能会建议团队从未考虑过的改进。

评论


这是我的答案。我要补充一点,在任何给定的一天中,使用任何给定的Python例程和任何给定的Python专家组...代码是垃圾。

– dwoz
16年1月16日在4:08

通常,仅仅向“傻瓜”解释某些事情就会引出“ Doh!”。从“专家”的那一刻起,他们突然意识到代码没有按照其意图行事,或者错过了一些关键的情况。这也是开始传播知识的一种体面的方式。

– TripeHound
16年1月18日在9:23

#5 楼

代码审查与搜索拼写无效和格式错误的变量无关。如果您使用代码审查来发现这些问题,那么就不要浪费时间,而要使用工具。

代码审查是关于改进设计并检测新手程序员的常见错误。

由于我使用C ++进行编程,而且我对Python不够了解,所以我不敢复习Python代码。但是,我可以为Java代码审查提供帮助。

您没有说过您使用哪种语言编写程序,但是如果您不知道该语言,那么我看不出您可以在代码审查中做出什么贡献它被编程。

评论


确实,您有一个工具可以区分名称错误的变量和名称正确的变量?我会很感兴趣地看到一个。

–达沃·兹德拉(DavorŽdralo)
16年1月13日在16:24

@DavorŽdralo我知道Java具有Checkstyle。对于许多语言来说,更正式的静态分析工具是通用的,并且使它们强制执行编码标准通常是其最少的职责。

– Shaz
16年1月13日在16:32

我觉得这里的Code Review定义之间有些区别,有点让我想起了CR Meta上的这个问题:什么是Code Review?我不会排除特定内容,而是说“代码审查与XYZ无关”。听起来您好像是在说经验丰富的程序员不需要审查他们的代码,这一点我非常不同意。

–西蒙·福斯伯格
16年1月13日在18:08

@SimonForsberg我不是这个意思。即使是高级程序员,也可以通过良好的代码审查学到一些东西。但是,如果仅有的注释是“您在此处拼写了一个变量”之类的注释,那么它们就是在浪费时间。

–BЈовић
16年1月14日在8:31

@BЈовић不,这不是您能找到的最糟糕的情况,但是它非常接近“发现的最小的东西仍然值得”。

–疫苗
16年1月14日在13:34

#6 楼

代码审查(除了实际查找缺陷之外)是一个团队成员向其他成员介绍正在添加或更改的代码的良好介绍。如果您是一位经验丰富的开发人员,那么您应该能够读懂足够多的内容,从而大部分地了解正在发生的事情。

从团队负责人的角度来看代码审查:那里有人可以理解应用程序应该做什么(业务逻辑),那里有人了解代码在做什么(实现逻辑),那里可能还有其他几个人需要了解所有这些如何组合。

#7 楼

您绝对不应该是唯一的审阅者,但是有很多充分的理由使您成为审阅者之一。对于很多需要在代码审查中回答的问题,不了解该语言并没有太大的障碍。举例来说,我是该网站C#标签中排名前20位的回答者之一,而我还没有C#中的已编译问候世界。

您可以在不知道的情况下分享一些专业知识语言:


领域知识。
一般的面向对象设计。
一般的编程实践:命名,清晰度等。

/>这也是加快新产品开发速度的好方法。我刚刚加入了一个新团队,在那里我知道使用的语言很好,但是却不了解领域。参加代码评审使我更好地学习了领域方面,即使我还不能在这些方面做出很大贡献。

对于您来说,这是学习知识的一种好方法当您看到其他审阅者留下的评论时,就使用了一种新语言的习语。这些都是很难以其他方式学习的事情,因为您的解释器并不关心您的代码是否为pythonic。

#8 楼

这可能是双赢的局面。我要说的是,您可能是一位特别有价值的审阅者,因为您是Python的处女,没有被知识的诅咒所污染。

这样想:如果代码是足够清晰,即使是Python初学者也能理解它,那么它必须是良好的代码。您难以理解的部分可能是重做或更好的评论的选择。

很显然,这对您也有好处,因为您将在使用过程中选择一种新语言。 (希望您得到的代码是一个很好的学习示例。)这种安排对于Python(一种享有“可执行伪代码”的声誉)的语言特别有效。如果您是一位经验丰富的开发人员,那么您就不难理解Python程序的要旨。

注意事项是,您不会被期望发现由于特定语言而引起的错误。陷阱。但是,查找错误并不是代码审查的唯一目的。如果没有其他要求,您只要知道同事代码中发生了什么事情,便可以参与知识转移。

#9 楼

曾经有人要求我审核一个分包商正在进行的项目,该项目似乎存在严重的性能问题。我很快就确定了关键因素是单个Perl模块。我以前从未接触过Perl,并且在组织中没有一个人了解它,所以我着手尝试自己理解它。我从未完全了解细节,但是很清楚,它使用的算法的数据大小是二次方的,这就是所有麻烦的原因。所以是的,用您不完全理解的语言阅读代码绝对可以提高工作效率。好处是您可以在学习新技巧的同时学习。

#10 楼

一些观察结果:

1)如果您是一位经验丰富的开发人员,那么您将通过使用Python来学习Python(或至少需要了解的知识)。这将是“边做边学”的情况。一开始会很困难,但是当您选择语言时会变得更容易。认为这是学习另一种语言的机会(人们经常通过“沉浸式”学习“外国”语言。)

2)SE网站上有很多有价值的人“非技术性” ”,但精通语法,沟通和逻辑。这样的人对主题产生了“新鲜的眼光”,并进行了许多其他人错过的“毫无头脑”的修复,因为他们在材料中太“束缚”了。大概正在向您咨询您的非“技术”(即非Python)技能,例如逻辑和整体编程知识。

如果您还没有进行大量代码审查,则几乎所有代码审查经验将帮助您成为开发人员。这看起来像您的技能和需求与团队的完美匹配。

评论


我质疑复习代码是否在有意义的程度上构成了“边做边学”。也许我的审查经验与您的审查经验有所不同,但是很少有有意义的或实质性的代码编写,几乎从未执行过。

–深奥的屏幕名称
16年1月13日在16:42

@EsotericScreenName-我认为这取决于您从编写或知道该代码的人那里得到多少反馈。它也很可能位于您正在使用另一种语言的领域中,因此与典型的代码示例相比,它更加熟悉。大多数编码示例仅显示了如何制作图钉的小片段,很少将其显示为大型项目的一部分。

– JeffO
16年1月13日在16:51

#11 楼

这取决于审查的目标。即有效的意思。

您仍然可能能够发现一些问题。如果您只需要他们与他们一起回顾,他们只是希望您查看它对您有所帮助,甚至可能会有所收获,那么可以肯定。语言之间的许多结构概念相似。其中一项特别是能够查看评论。应该充分说明一下,不是那种特定语言的程序员仍然应该能够很好地了解正在发生的事情。如果没有,那么您可以告诉他们缺少评论的地方。如果评论得那么好...那么,您应该能够仅通过正在发生的事件的注释来回顾它们的结构,而不是真正地阅读正在发生的代码。

但是您可能不会发现许多其他问题。因此,如果他们打算让您全面审查该程序是否做得好/可行,那么他们将感到失望。

无论结果是否值得您花时间去做很大程度上取决于项目。