假设您想开始为具有数千个LOC的开源项目做出贡献.关于如何开始学习/攻击新系统的方式/建议我很有意思.
学习有目的.如果您考虑到一些目标,我认为您将学到最好的东西 - 修复此问题或添加该功能.开始寻找您需要进行更改的可能位置.向后跟踪控制线程以找出如何到达代码中的那一点.此外,采用代码的"鸟瞰"视图 - 查看布局和结构.好的代码将具有描述性名称,告诉您希望每个类和方法都适用.看看您是否能够识别实现模式并查看它们的使用位置和方式.不要在文档中放入太多的文件 - 文档可以很好,但它们通常与代码实际上不同步.让代码本身成为最好的文档.
如果你想要我认为有助于学习如何从代码中学习的书籍,我会查看Diomidis Spinellis的书籍代码阅读:开源视角和代码质量:开源视角.
对于您的具体问题,我将从Code Reading开始.但两者都是好书.
浏览代码,寻找您认为自己知道发生了什么的地方.阅读这些部分,看看你的初步想法是否成立,然后尝试修改它,看看你是否可以改变它来做其他事情.
我建议稍微按照项目路线图进行指导,这样您就可以继续发现新功能和错误修复的位置,这样您就可以以有意义的方式做出贡献.
另外,请阅读文档和可能存在的任何旋转文档(功能规格,需求规格等).这可以进一步帮助您更快地学习代码绳索:)
不要在细节上花太多时间.
不要试图在开始时理解整个系统.
重点是尝试理解一个相对"独立"的模块或组件,它在过去被添加为一个实体(特征).这通常在你的脑力可以应付的大小限制范围内,因为它是由其他人同时作为一个模块完成的.
在将更多组件或"碎片"消化和组装在一起后,您对整个系统的理解将得到改善.
工具非常有用:Doxygen + GraphViz,或者Visual Studio中的"理解",调用和调用者图形等软件,"查找全部"和"查找所有引用"等.