如何在不熟悉的代码库中快速上手

当你开始一份软件工程师的新工作时,无论这是你的第一份还是第十份工作,你能做的最好的事情之一就是快速适应你的新代码库。根据你加入的公司类型,你可能会很轻松地进入工作,或者你可能会被立即投入并期望立即开始贡献。了解你的新公司是如何运作的,包括高层和微观层面,这将帮助你弄清楚如何在短期和长期内产生重大影响。

虽然您可能不需要立即贡献代码,但熟悉您将要使用的新代码库仍然很重要。无论别人给你分配的是你的第一个项目,还是你是一个自我指导的角色,快速跟上进度都是给你的新团队留下深刻印象的好方法。

我记得我第一次开始在一个真正的生产代码库中工作。我刚刚完成了一个为期3个月的助教任务,并且我只使用了来自我或我同学项目的代码库。尽管我加入的公司很小,有一个相对较新的代码库(不到4年的历史),几乎没有技术债务,但我还是被所有东西的规模和规模压垮了。我注意到的第一件事是有这么多的文件。我觉得我不知道在哪里可以找到任何东西,我的训练营项目突然感觉很渺小!

从那以后,我在几个不同的代码库中工作过,每个代码库与下一个代码库都有很大的不同。大多数公司都有某种形式的技术债务,为了开始贡献,我不得不迅速跟上每一项技术的进度。

下面是我学到的一些方法,你可以用它们来加快速度:

  1. 要从广泛的角度和详细的角度看问题
  2. 快读代码!
  3. 修正错误
  4. 编写测试
  5. 与其他工程师结对提问
  6. 好处:活动

要从广泛的角度和详细的角度看问题

无论您通常关注的是大局还是小细节,从两个角度看代码库都是很重要的。如果您在某一领域较强,那么您可以从与您习惯的相反的角度查看代码,从而获得一些新的见解。当您从更广的角度来看时,您可以查看代码库的整体组织,或者几个系统如何协同工作。当您查看详细视图时,您可以尝试理解特定模块的实现。

下面是从各个角度看代码库时需要回答的一些问题:

  • 使用了什么语言和库/框架?
  • 文件结构是什么?
  • 哪些是常用的外部依赖关系?
  • 您已经选择了一个文件或一个模块——这个文件或模块做什么,如何做?
  • 您是否注意到任何编码样式模式?
  • 你对代码质量的总体印象如何?

看一下文件结构

采用广视图的最重要目标之一是查看文件结构。如果您使用的是单回购,这可能意味着只查看文件的特定子集,而不是整个回购。如果你正在开发一个更小的服务或应用程序,把所有东西放在一起看会很有帮助。

了解代码库的结构将有助于您了解在哪里编写或调试代码。当开始一份新工作时,在哪里工作往往比做什么或如何做更棘手。如果您已经对所从事工作背后的组织和结构有了大致的了解,那么您将更容易找到需要编辑的文件或添加新文件的正确位置。

例如,以下是我使用create-react-app创建的一个小应用程序的示例文件结构:

快读代码!

下一个建议可能看起来很明显,但它非常重要!当您开始一项新工作时,实际阅读现有代码是加快速度的好方法。这可以通过代码审查,也可以在您调查任务时自己进行。阅读代码将帮助您更详细地了解特定文件中发生的情况,并帮助您获得开始工作的代码库区域的上下文。

另外,一定要把知识传递下去!例如,如果您在代码评审中提出了一个问题,那么当其他人提出这个问题时,您现在有权回答这个问题。

修正错误

修复bug是在不熟悉的代码库中提高速度的最佳方法之一。它不仅可以帮助您更多地了解您正在开发的产品,而且还可以在您解决问题时积极地帮助用户。修复bug还可以帮助您理解某些东西是如何端到端工作的,或者几个系统是如何连接在一起的。

这方面的一个个人例子是,我修正了一个错误,即CSV下载错误地包含了额外的数据。这是一个报告了一段时间的问题,但没有人花时间去调查它。在解决这个bug的过程中,我通过UI中的流程来了解用户的体验。然后我遍历了代码,以弄清楚实际发生了什么。事实证明,bug修复只是简单地删除了几行代码,但在解决这个问题的过程中,我对产品的特定部分以及它是如何实现的了解了很多。

与其他工程师结对提问

另一种快速赶上进度的方法是与在公司工作时间比你长的工程师配对,即使只比你长几个月。这些工程师将对代码库的特定领域有更多的领域知识——他们将能够帮助您了解为什么系统以特定的方式构建,或者由于技术债务而可能出现的“陷阱”和黑客行为。

例如,我正在构建一个新功能,最初认为我需要从头构建一个复杂的UI组件。然而,当我与我的队友配对时,她向我展示了一个我可以利用的现有组件。这节省了我的时间,因为我可以专注于理解已经存在的代码,而不是从头开始。更好的是,我知道下次开始一个类似的项目时在哪里检查现有的组件。

编写测试

除非您的公司非常严格地遵循测试驱动开发,否则代码库中可能有几个区域缺乏测试覆盖。当您遇到任何没有编写测试的代码时,编写一些!编写测试将帮助您理解正在查看的代码是如何工作的,它将要求您考虑代码周围的边界情况。您甚至可能发现一个错误,因为代码没有处理某个边界情况。

好处:活动

如果您的公司举办黑客松,这是了解更多代码库或相关技术的好方法,您可能还不熟悉这些内容。在这种情况下,花时间提前调查和计划是很重要的,这样在项目实际实现时就不会耗尽时间。在调查阶段,您可能会遇到不熟悉的代码。如果您是代码库或黑客马拉松的新手,我建议您选择范围非常有限的项目。

例如,我在一个黑客马拉松项目中为每个环境添加不同颜色的图标,所以当开发人员打开许多选项卡时,就很容易识别开发、阶段和生产。在这种情况下,实现相对简单,但找到编写代码的位置则更具挑战性。这个项目是一次很好的学习经历,因为它帮助我理解了代码库中我不一定会遇到的部分。我还了解到我们代码库中的一些怪癖,这将有助于在未来的代码评审中牢记在心。

结论

以上就是我在不熟悉的代码库中加快速度的6个技巧。如果您开始一份新工作,或者甚至改变角色或团队,希望这些提示能帮助您在新的代码库中感到舒适和自信。你还有其他有用的技巧吗?请在评论中分享!

想要阅读更多简的文章,请访问她的博客,完整的面试

关于作者

简•菲利普斯

简是Pinterest的软件工程师。她在核心网络平台团队工作,帮助提高Pinterest的网络基础设施和开发速度。在室内设计和服装行业工作后,Jane参加了General Assembly的Web Development浸入式程序学习编码。