您如何阅读他人的代码?[关闭]


23

几乎每个高级程序员都说,阅读其他专业人员的代码非常有用。通常他们建议开源。

你读不读?如果这样做,读取代码的频率和程序是什么?而且,对于新手来说,处理SVN(一堆文件)有点困难。有什么解决方案?

Answers:


25

你读不读?

是。

如果这样做,多久一次

日常。不断。我处理大量开源项目(大多数与Python相关),并且必须阅读源代码,因为它是最准确的文档。

读取代码的程序是什么?

嗯 打开并阅读。

而且,对于新手来说,处理SVN(一堆文件)有点困难。有什么解决方案?

打开并阅读。然后阅读更多。

这并不容易。没有什么比这容易。没有通往理解的皇家之路。这需要工作。


感谢您的回答。定义代码是否良好的方法是什么?因为不是每个开源项目都是由真正的专业人员完成的?
谢尔盖

1
@Sergey:“定义代码是否良好的方法是什么?” 阅读代码。“好”是主观的。如果有帮助,并且您可以理解,那就很好。如果令人困惑,或者实际上不起作用,那就不好了。质量属性有很多很多:可维护,安全,适应性强,高性能等,等等,等等,代码可能擅长一个,而又不擅长另一个。
S.Lott


@Sergey-即使它是有史以来最出色的代码,但由于您的经验(如果您无法阅读),它也不会为您带来任何好处。尽管您可能认为这不是最好的时间利用方式,但是您将要接触编写不佳的代码,因此您最好也了解一下两者之间的区别。就像S.Lott所说的那样,这需要工作和时间。
JeffO 2011年

我欣赏那些可以坐下来阅读代码的人,就像读小说一样,但有时我会觉得乏味。我已经意识到,对我而言,“阅读代码”并不能真正描述我所从事的活动-更好的措辞是“代码理解”,它涉及阅读文档,在调试器中逐步调试它甚至阅读测试。我写了一篇有关代码读取的长篇文章-technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
Nikhil

9

您遇到的难题有几层。首先,可以从高层次开始,鸟瞰一下。签出项目后,目录结构中将会有一堆文件。无论您是看开源还是闭源(源代码毕竟是源代码),都是一样的。因此,从此开始:

  • 源文件如何组织?您能否通过文件名或包含目录的名称告诉您可能在其中找到的内容?我们程序员倾向于喜欢可预测的名称和逻辑结构。您应该能够大致了解在哪里解决特定问题。
  • 该应用程序的本质是什么,它是基于Web的,命令行的,GUI的吗?这很重要的原因是您想知道从哪里开始跟踪执行。如果是基于网络的,则要从应用开始处理请求的地方开始。如果它建立在框架上,那就更好了。一旦知道了框架,通常就可以很好地理解其中的代码。否则,您将从命令行/ GUI应用程序的相应入口点开始。
  • 拿一张纸和一支铅笔,或者如果您幸运的话可以用白板和干擦标记笔。给组件命名(或使用代码中提供的名称),并在带有箭头的框之间画线,以便您查看处理方式。另外,如果您正在查看一种算法,请以一种您可以理解并概述其操作方式的方式来绘制数据结构。

这需要实践,但是绝对是可行的。您对应用程序正在使用的库和框架了解得越多,就越了解如何组织代码以及在何处寻找特定问题的答案。一些代码很难遵循,特别是如果它们是间接的。这就是为什么您需要铅笔和纸的原因。最终,灯泡在您的头上熄灭,您明白了。那就是在阅读其余代码时更有意义的地方。


阅读代码的一方面是抽象。诸如了解源代码的组织方式之类的事情肯定会抽象出代码读取的过程。
David Gao

5

这不是像读小说那样阅读,而是像阅读参考书那样。一个好的方法是从检入消息中选择一个最近已修复的错误,比较所做的更改,并阅读相关部分,直到您了解问题和解决方案为止。广为宣传的安全漏洞是一个有趣的错误,因为在论坛上有很多关于它们的讨论。然后从错误跟踪器中选择一个“低落的果实”错误,并进行阅读,直到您了解如何自己修复它为止。阅读代码的大多数专业人员在修复错误或添加功能时都是偶然的。

通常,最好的代码示例几乎没有引起注意。您将立即了解它们,而无需多次阅读它们。即使看起来不错的代码通常要经过许多草稿,它们也使编写起来似乎非常容易。它产生了自相矛盾的感觉,尽管给定的代码不是您想到的第一种方式,但是给定的代码当然是显而易见的方式。

当您遇到这样的代码时,请尝试了解编写代码所涉及的见解以及所涉及的设计原则,因此,将来在遇到类似情况时,可以希望采用相同的原则。


4

在阅读一些复杂的函数时,我经常使用的一个技巧是,代码段是在不更改逻辑的情况下开始将其重构为更具可读性的代码。


1
+1:我也是。//我曾经有一个老板,他注意到重构,并指责我浪费时间。他听不懂。真是个蠢才。
Jim G.

2

如何艰难地处理“一堆文件”?它与编写自己的代码没有什么不同,除了您没有对它的组织的事先了解,除非对其进行了记录。

如果您作为一个有名的程序员,不能从“一堆文件”中弄清项目结构,要么是一个组织得很差的项目,要么是一个无能的程序员(或者在极端情况下,两者都是)。

开始阅读,尝试找到一些切入点或其他必不可少的枢轴类/方法,并对它们如何从那里组合在一起有一个了解。不会是即时的,需要时间,但是即使没有文档也可以做到。


3
“需要时间”来“建立理解”几乎是“困难”的定义。仅仅因为这是我们每天都要面对的困难,并不会因此而变得困难。“我在哪里进行更改?” 即使是专业人员,这也是一个普遍的问题。同样,源代码控制和处理大型代码库也是大学教育中的巨大漏洞之一。我想我在大学里做了一个或两个项目,它们需要多个源文件,而它们最多只能容纳10个文件。
Karl Bielefeldt

0

在阅读另一个项目的代码时,最好的希望是使用API​​或软件,也不要对变量,函数和宏名称进行过分缩写或命名,以使您可以理解它们的意图。

但是除此之外,它还需要大量的知识来跨语言,编程技术以及有关代码目的本身的知识,以便能够深入到复杂的代码中。

我目前正在尝试查看Lua如何做到这一点,但是我到达了上面的位置,其中许多标识符的名称含糊不清,并且简写为我无法弄清楚哪条线正在尝试要执行我所知道的事情,必须在功能代码中的某个时点完成……频繁出现的单字母变量以及缩写的宏/函数名正在引起我的注意。


0

看完@Berin Loritsch表示的“首先,从高处鸟瞰,鸟瞰”之后,您可以查找单元测试和/或集成测试(如果有)。

单元测试很有趣,可以看到(api-)细节如何工作。

集成测试通常可以很好地概述业务流程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.