成为一名优秀的程序员需要长期的磨练,最好的办法就是加入编码标准高的公司。作者想给大家的是如何通过简单的调整开发流程,让代码看起来更好看。本文汇集了作者长期审查代码的经验,可以补充学术论文、发布数据集或分析Kaggle竞赛的解决方案。本文的目标读者是研究人员、数据科学家和初级软件开发人员。每一步只需不到5分钟,而且这些调整会迫使您做得更好。使用版本控制跟踪代码中的更改位置对代码进行版本控制似乎是显而易见的必须做的事情,但事实并非如此。作者的导师是一个非常聪明的人,他开发了一种算法来实现哈伯德模型的量子蒙特卡罗。该代码被世界各地的许多研究人员用来推进“凝聚态物理”的理论。当开始使用这个算法时,我惊讶地发现没有中心化的存储库。代码交换通过电子邮件进行。科学家开发的错误修复和新功能不会与其他用户交换。此外,我还看到同事如何使用不同的文件夹来控制代码版本。GitHub或其他服务上的代码版本控制和集中存储库是必要的,许多研究人员正在这样做。但是如果没有计算机科学,大多数教授和研究生都处于使用文件夹进行版本控制和通过电子邮件发送代码的阶段。问题:你什么时候需要在你的项目中开始使用git?答:从第一行代码开始。问题:您什么时候需要在GitHub上创建存储库并将代码推送到其中?答:从第一行代码开始。如果您觉得由于法律或其他原因不能公开共享您的代码,您可以创建一个私有存储库。在所有其他情况下,请访问公共存储库。等到代码看起来不错再公开是错误的。如果GitHub存储库中有不完善的代码,我的许多同事都会感到非常不安全。他们担心别人会认为他们是糟糕的程序员。事实上,根本没有人会评判你。另外,你现在写的每一个代码在六个月后看起来都会很糟糕。私有存储库总比没有存储库好。公共存储库再次比私有存储库更方便。Kaggle比赛的参与者在比赛结束后发布他们的管道是一个很好的做法,这对参与者和社区都有帮助。此外,还有一个名为Sourcegraph的工具可以在所有公共Github存储库中搜索代码。非常方便,可以提高工作效率。不要推送到master分支在团队中工作时,不要直接推送到master分支。创建一个单独的分支,并在其中工作,创建一个拉取请求(PR),将拉取请求合并到主分支中。这比直接pushtomaster错误要复杂得多,因为为了合并pullrequest,更改必须通过各种检查。手动检查是由协作者执行的代码审查。自动检查包括语法、样式、测试等。单独工作时,没有代码审查的机会,但自动检查功能仍然可以使用。在GitHub上调整设置是非常有必要的,即使有遗嘱也不会出现pushtomaster。如上所述,这可以防止错误并节省意志力。图源:unsplash使用持续集成/持续交付(CI/CD)系统来完成创建分支和合并的过程是一个开销,主要是为了允许对代码更改进行检查。建立持续集成系统后,每一个创建的pullrequest都需要进行检查,只有通过所有检查后,才能合并pullrequest。提供CI/CD功能服务的软件有很多,比如GitHubActions、CircleCi、Travis、Buildkite等,推荐使用GitHubActions。完全免费,可在私人和公共存储库中使用,并且易于设置。这一切听起来很复杂,但实际上,这只是向存储库添加配置文件的问题。简单示例:我的图书馆具有辅助功能。作者检查代码风格、格式并运行测试。复杂示例:在Albumentations库中,检查语法和代码风格、运行测试、检查自动文档构建以及针对不同的python版本和操作系统(Linux、Windows、MacOS)执行操作。注意:需要在GitHub存储库中更改设置,以便如果所有检查都在绿色区域中,则无法合并拉取请求。Linters这些工具不会更改代码,但会检查代码并发现可能存在的问题,这些工具称为linters。最常用的是flake8。它可以查找:Pep8错误和警告。一致的命名约定。函数的圈复杂度。和一组插件的其他内容。这是一个强大的工具,建议将其添加到CI/CD配置以及预提交挂钩中。Pre-commit钩子在上一步中提到了在提交之前在本地运行格式化程序的重要性。假设black和isort,需要运行:black.isort,这很麻烦,更好的解决方案是使用这些命令(例如“code_formatter.sh”),创建一个bash脚本并运行脚本。像创建脚本这样的方法非常流行,但问题是除非被迫,否则人们不会这样做。有一个更好的解决方案,预提交挂钩。这个想法类似于bash脚本,但是您希望在每次提交之前运行的内容将在执行时运行:gitcommit-m"
