另一个过程...
在阅读了 Andy Hunt 的 “Pragmatic Thinking and Learning - Refactor Your Wetware”(没有直接解决这个问题)后,我总结了一些可能值得一提的技巧:
观察行为:
如果有 UI,那就更好了。使用该应用程序并获得关系的心理地图(例如链接、模式等)。如果有帮助,请查看 HTTP 请求,但不要过分强调它——您只需要轻松、友好地了解应用即可。
确认文件夹结构:
再一次,这很轻。只要看看什么属于哪里,并希望结构足够语义——你总是可以从这里得到一些顶级信息。
自上而下分析调用堆栈:
在纸上或其他媒介上浏览并列出清单,但尽量不要打字——这会让你大脑的不同部分参与进来(如果必须的话,可以用乐高积木搭建)——函数调用、对象和最接近顶层的变量。看看常量和模块,如果可以的话,请确保不要深入研究细粒度的功能。
思维导图!
也许是最重要的一步。为您当前对代码的理解创建一个非常粗略的映射。确保快速浏览思维导图。这可以让你大脑的不同部分(主要是 R 模式)均匀分布,从而在地图上发表意见。
- 创建云、盒子等。最初认为它们应该出现在纸上。随意用句法符号表示框(例如,'F'-Function、'f'-closure、'C'-Constant、'V'-Global Var、'v'-low-level var 等)。使用箭头:传入数组作为参数,传出作为返回,或者对你来说更自然的东西。
- 开始绘制连接以表示关系。如果它看起来很乱也没关系 - 这是初稿。
- 进行快速粗略修改。它太难阅读了,做另一个快速组织,但不要做多个修订。
打开调试器:
- 验证或使映射后的任何概念无效。跟踪变量、参数、返回等。
- 跟踪 HTTP 请求等以了解数据的来源。查看标头本身,但不要深入了解请求正文的详细信息。
再次使用思维导图!
现在您应该对大多数顶级功能有了一个不错的了解。
- 创建一个新 MindMap,其中包含您在第一个中遗漏的任何内容。您可以花更多时间处理这个问题,甚至添加一些相对小细节——但不要害怕它们可能与之前的概念相冲突。
- 将此地图与您上一张地图进行比较,消除您之前提出的任何问题,记下新问题,并记下相互矛盾的观点。
- 如果地图太模糊,请修改此地图。尽可能多地修改,但尽量减少修改。
假装它不是代码:
如果你可以用机械术语来表达,那就去做吧。其中最重要的部分是为应用程序的行为和/或代码的较小部分提出隐喻。认真想想荒谬的事情。如果是动物,怪物,星星,机器人。会是什么样的。如果是在星际迷航中,他们会用它做什么。考虑很多事情来衡量它。
综合大于分析:
现在你想看的不是“什么”,而是“如何”。任何通过你循环的低级部件都可以取出并放入无菌环境(你控制它的输入)。你得到什么样的输出。系统是否比您最初想象的更复杂?更简单?需要改进吗?
贡献点东西,伙计!
编写测试、修复错误、评论、抽象。你应该有足够的能力开始做一些小的贡献并且失败是可以的:)!请注意您在提交、聊天、电子邮件中所做的任何更改。如果你做了一些卑鄙的事情,你们可以在它投入生产之前发现它 - 如果有什么问题,这是让队友为你解决问题的好方法。通常听队友的谈话会让你的思维导图发生冲突的事情变得清晰。
简而言之,最重要的事情是使用自上而下的方式让大脑的尽可能多的不同部分参与进来。如果可能的话,它甚至可以帮助关闭您的笔记本电脑并将您的座位面向窗外。研究表明,执行截止日期会在截止日期后约 2.5 天产生“压力宿醉”,这就是为什么截止日期通常最好在星期五进行。所以,放轻松,没有时间紧迫,现在为自己提供一个可以安全失败的环境。在您深入了解细节之前,大部分内容都可以相当匆忙地完成。确保您不会绕过对高级主题的理解。
希望这对你也有帮助:)