如果您阅读其他人的源代码,您如何处理代码?您在寻找什么模式(数据类型、循环、控制流的使用……)?你能读多久别人的代码而不感到无聊?到目前为止,您发现的最令人兴奋的模式是什么?
6 回答
起初,我忽略了更改代码的冲动。这有时很难做到。但是先了解后改变可以为自己节省很多讨厌的“学习经历”。
接下来如果格式不好,重新格式化。如果有,请使用代码格式化程序。这是因为您倾向于查看缩进,如果这很糟糕,那么您对代码的理解也是有问题的。
然后,如果有复杂的数据结构,我喜欢画一个小图。这里的挑战是让它尽可能简单。大图挂在墙上很有趣,但大多数时候,它们看起来很麻烦。所以这是浪费时间。
如果你最终理解了一段代码的作用,请写评论。这是必不可少的,否则下次您来这里时您将无法理解它。
下一步是创建单元测试。现在您不仅可以测试代码,还可以测试您对代码的理解。
最后,如果你理解它并且你知道它可以(并且需要)更好,改变它。但一定要运行测试。除非您从每个已解决的错误中获得报酬。
一个时髦的新术语是Code Spelunking。
谢谢,如果我理解正确,第一步是识别上下文,第二步是识别 API,然后将 API 放在上下文中。我只是意识到这有点像看一座建筑或一件艺术品,你可以专注于使用的材料,或者部件的功能,尝试不同的视角,判断部件如何融入整体......关于发现的过程:这里——数学家是如何思考的
除了明显的“自上而下”的一般方法之外,这取决于我阅读它的原因:代码审查、尝试理解一些可用的代码以适应我自己的使用、尝试学习新技术等.
它还很大程度上取决于语言。如果是 OOPL,我可能会这样做:
- 首先寻找主要的类关系,并尝试了解每个类的主要职责。
- 查看类之间的交互以了解它们如何协作。
- 查看关键类的接口,了解它们为合作者提供了哪些“服务”。
- 如果重要的是了解它们是如何工作的而不是它们负责什么,那么请查看这些非平凡的方法。
这完全取决于您正在阅读的代码类型。它是 Web 应用程序、服务还是桌面应用程序?当我开始阅读其他人的代码时,我通常会开始寻找使用的设计模式。或者对于特定于框架的东西。但是,如果您要进行审查,这也是如此。如果您是为了自己的兴趣而阅读并学习一些东西,那真的没有答案 - 您应该彻底阅读并理解代码。
在最终产品中选择一个你理解的项目,看看它是如何组合在一起的。如果你有单元测试,那么它们是一个很大的帮助。