如果您是编程新手,或者您是初级开发人员,希望开始在新公司工作,那么您将要使用大型代码库的事实可能会令人不知所措。 文件,类和连接件太多,从哪里开始呢? 这是我处理此类情况的经验。
如果您是从头开始构建项目的团队的一部分,那么您应该算自己很幸运,但是,对于大多数软件工程师而言,情况并非总是如此。
如果您曾经以软件开发人员的身份加入一家新公司,那么就不要被该公司使用的代码或工具所困扰。 尽管这很重要,但这不应该是您的主要目标。 相反,应着重于了解业务,事情如何运作,如何赚钱,公司及其各个利益相关者的目标,愿景和使命。


在必要时提出问题以澄清疑问,并始终在公司全体会议上进行聆听-不要认为这是理所当然的。 代码库很重要。 但是没有生意就不会存在
接下来要做的是从用户或客户角度使用产品。 要求团队提供您可以使用的模拟帐户。 玩应用程序-不要试图破坏事情。 您不是笔测试人员或Q / A测试人员。 只要走一条幸福的路就可以了解事物的运作方式。 熟悉该应用程序可以使您处于适当的位置,以解决以后由用户报告的投诉。
克隆存储库,确保您拥有环境变量的所有值,对云服务AWS的访问权限或团队使用的任何第三方服务,最重要的是,目标是在本地数据库中拥有相同的生产数据。 如果您加入团队,请要求他们转储生产数据库并交给您副本。 您不需要具有生产数据库的确切副本,但需要非常相似的内容,也许是先前备份的转储,这将使您很容易调试和更好地了解应用程序。 如果使用Postgres,则可以使用pg_restore命令轻松导入转储。 每个主要数据库都有执行此操作的方法,请检查您的文档。


如果本地没有大量数据,则会遇到可能难以调试或理解应用程序的情况。 另外,请确保由于您在本地具有prod数据库的确切副本,因此不会将电子邮件发送给用户。 大多数框架都阻止电子邮件在本地发送。 在rails中,此config.action_mailer.delivery_method = :letter_opener将阻止电子邮件在本地发送。 检查您的框架文档。
扫描源代码不是为了了解其中的所有内容,而是要注意模式,编程样式,可重用的类,第三方库和代码味道。 这样做时,您会看到一些经常被引用的类,这很可能是可重用的类,了解它们的工作方式将提高您的生产率。


在Hingeto,当我第一次加入LongRunningJob时,我们有一个名为LongRunningJob的类,这是在浏览源代码时经常看到的类之一。 您应该做笔记,并标识公共API或此类。 如果您使用类型化的语言,请算自己很幸运,因为如果您使用诸如ruby之类的动态语言,您可以轻松判断出API接受什么。 您将需要像鸭子一样嘎嘎叫的东西。 您不必用笔在纸上记笔记,可以将其放在要点中。 或者,如果您托管n GitHub,则可能是代码库Wiki
如果您至少要确保存在适当的测试范围,或者将其作为优先级进行修复。


在阅读源代码时,您会遇到写得不好的代码。 您的胆量是要重构并提高PR,这样您才能将您的第一个PR合并到生产中—这就是灾难的征兆。 永远不要,我再重复一次。 不要在代码库上尝试新的Martin Fowler或Bob Martin技能,尤其是在可行的情况下。 这样做可能会破坏您所知道的许多事情。 是的,至少对于您而言,该代码看起来可能不太好,但是有很多因素导致您不了解该代码。 不要笑或嘲笑写它的家伙,你不知道发生了什么,但至少它起作用了。 如果世界上最大的科技公司都有代码味道。
尝试修复错误报告将使您快速了解我们应用程序的不同部分。


始终要求为您分配一些故障单。 这不仅使您与公司息息相关,而且有助于您对系统的理解。
尝试解决错误时,应使用允许您逐步执行代码的调试器。


红宝石生态系统可以很好地替代其默认调试器Pry REPL。 如果您编写elixir,它将在其标准库中附带一个非常有趣的调试器。 Java开发人员也可以使用IntelliJ功能。 一个好的调试器可以帮助您逐步完成代码,以了解事物是如何连接和堆叠的。
是的,可以安全地做出假设,但是可以更安全地与团队其他成员分享您的假设,并在您消除疑问后提出任何问题。 这将向您的队友显示您自己进行了一些研究,并最大程度地减少了他们必须做的解释。


分享您的假设后提出问题也将帮助你们双方节省时间。 但不要忘记始终将想法贯穿整个团队。
在此之前的技巧讨论了做您自己的假设然后在团队中运行这些假设的安全性。 本技巧还鼓励您使用代码库,尝试了解所发生的情况,尝试调试和解决问题,但是如果您仍然无法弄清为什么以某种方式编写某些内容或为什么不断获得某种内容,值,无论情况如何,只有您伸出手并请队友与您配对。


如果您经常与他们联系,他们很有可能也会做很多事情,这很成问题。 但是,如果您偶尔与他们联系,并让他们知道您的尝试,您将赢得他们的尊重。
您不应该责怪任何人,但是如果您要用Git来责备。 如果您遇到了代码库或一行代码,则不理解尝试使用git怪。 最好与该行的提交作者联系,而不是与您觉得有吸引力或与之交谈的人联系。


为了git blame path/to/file一个文件git blame path/to/file git blame -L n path/to/file怪一个文件从特定行开始。 其中n是行号。 运行git help blame以获得更多可以传递给别人的参数。
我在多个代码库上工作,无法全神贯注。 在构建新功能或尝试修复错误时遇到错误,我使用grep在整个代码库中搜索匹配的字符串或引发异常的类。 这很简单,下面是您需要的所有grep。
$ grep'要搜索的字符串'-n path / to / file.py
将在文件中搜索字符串“要搜索的字符串” 。
$ grep'foo'-iRn路径/
将在路径目录中搜索字符串foo。 选项i用于不区分大小写的搜索。 因此, Foo将匹配foo 。 选项R用于执行递归搜索,选项n用于显示行号。 使用grep命令搜索函数,类,代码库中的任何标识符或任何文本字符串。
你可以跑
$ man grep在您的终端上可使用的所有grep好东西。
当出现异常时,您应该感到高兴,这表明您正在取得进步。 如果您的语言没有更好的方法来显示选择加入定制解决方案的堆栈跟踪。
要适应您雇主的代码库,您要付出比常规9到5个工作更多的费用。 软件开发并非易事。


软件开发并非易事。 如果您在周末有空闲时间,可以使用它来浏览源代码以更好地理解源代码,这将使您在团队中占优势。 如果您知道可以改善您的工作流程或公司团队工作流程的工具或服务,则还应该提出建议。 它可以是自定义的松弛集成,更好的日志记录服务和新的库,可以随时向团队提出建议,并让他们知道为什么它可以提高生产力。
我个人编写了自定义的shell和vim脚本,以帮助我度过不得不键入许多命令的麻烦。 还有一个技巧是别名您公司项目的目录。 在我的终端上,我可以输入
$铰链&&混合
这将带我到mxed目录,这是Hingeto的项目之一。 我还设置了一堆其他别名。 如果使用Z Shell,则很容易在.zshrc创建此别名。
掌握新的代码库是一个旅程。 您花费在代码库上的时间越长,您对代码库的了解就越多,花费在代码库上的时间越少,做出有意义的贡献所花费的时间就越长。
当我第一次加入Hingeto时,我更关心的是开发新功能,我一直想构建新的东西,使用新的框架。 我觉得我们的流程可以做得更好,我花了很多时间不了解我们现有系统的工作方式。 通过时间的流逝,从我对工程立项和冲刺计划的讨论中的参与程度可以看出,我不了解我们现有的工作方式。 我的CTO必须加强工作,并告诉我,大多数软件工程师都是受雇维护现有系统而不是构建新系统的。 我不得不改变我对项目的看法。
总是想构建新的东西是很好的,但是当您维护现有的东西时,您的投资回报率更高。 最后,最好不要缺少它,只有当您了解现有系统时,才会发生这种情况。
如果您有任何帮助的提示,请在下面的评论中告诉我们。
感谢您的阅读。