在过去的 30 年中,软件开发取得了很大进展。曾经人们在自己的计算机上管理软件开发生命周期 (SDLC),在自己的桌面编写代码、调试代码、构建代码并发布代码。源代码存储在文件服务器上,并在每天结束时保存一个压缩文件来管理。如果你完全使用具有中央服务器的代码版本控制软件(CVS) 或版本控制系统(SVN),会使分支和代码合并成为真正的挑战。发布软件意味着将“黄金”软盘发送给制造商,制造商将软件实际运送到商店和目录供应商。
今天这个过程更容易也更复杂。大多数新软件都是通过浏览器交付的。远程开发团队使用复杂的中央代码存储库管理大型代码库。他们通过问题跟踪和沟通工具协作,并使用专门为此需求而设计的工具进行持续集成和持续部署。软件即服务(SaaS,software as a service)交付模型允许团队随时发布新功能。
这个过程需要大量的软件工具。可能有些人会说,有张舒服的办公椅和宽屏显示器也能改善开发流程,但在这里我们主要讨论软件工具。
那么现代软件开发需要哪些软件工具呢?下文列出了5个必要工具。
集成开发环境(IDE)
编写代码的难度与日俱增,开发人员需要一个能够跟上发展的工具。好的 IDE允许代码编辑、语法高亮、代码补全、源代码控制管理、编译和调试,此外还能提供某种形式的扩展应用程序编程接口(API,Application Programming Interface),让任何人都可以增强编辑器的功能。
如果没有非常特殊的需求,我建议使用Visual Studio Code(VS Code),因为它是目前最流行、最强大、最开放和最高效的IDE。VS Code由微软构建和维护并且开源,它几乎可以处理任何扔给它的编程语言,并且有数千个有用的扩展,因此非常受欢迎。VS Code是到目前为止的首选工具,有超过 2000 万开发人员在使用它。添加人工智能自动写代码插件(GitHub Copilot,GitHub 基于人工智能的编程辅助),为开发人员使用它提供了更多动力。
通讯工具
新冠疫情改变了开发团队合作的方式,突然间,开发团队人员都在家里工作。当他们无法见面沟通时,就需要一种新的交流方式。聊天群组(Slack)加多人手机云视频会议软件(Zoom)成为了必要,并延续到现在。
Slack因为应用广泛拥有庞大的插件库和集成库,可以让你在到处搜索前就做到很多想不到的事情。Zoom则是各种团队和会议在事实上的视频会议工具。Slack和Zoom集成在一起可以让一切变得既简单又强大。我非常推荐这种协作方式,因为这两种工具受众很广,使你更容易与整个组织的员工、客户和供应商进行沟通,而不仅限于开发团队。
另外我也推荐Microsoft Teams,它是将聊天和视频会议结合在一个应用程序。
源代码版本控制
分布式版本控制系统(Mercurial) 曾经有一段时间是这里的佼佼者,但源代码控制工具的最后赢家显然是Git。如果不使用Git就显得有些落伍了。
Git 是一个分布式的版本控制系统,但正确使用它需要一个集中的存储库,而GitHub显然是该领域的领导者。GitHub 是我的选择,因为它太过常见,且其不仅仅是一个代码存储库。目前,GitHub 是一个面向开源软件项目领先的托管平台。每家公司都应该多少在 GitHub 上有些自我展示。
GitHub的一些附加功能包括问题跟踪、代码审查以及构建和部署过程。GitHub 甚至以其基于Visual Studio Code的Codespaces功能引领浏览器中的IDE。
源代码控制方面次之的是GitLab,它以开源版本提供,几乎在所有方面都紧随 GitHub。
功能标志
我必须承认,一年前我甚至不知道功能标志(feature flags)是什么。现在,随着SaaS解决方案允许通过单击鼠标打开和关闭功能,它们的使用正在增长。你可以通过功能标志以任何喜欢的方式来控制功能——按公司、按客户级别或按用户。这使你可以做到一些事情,例如部署一个测试版或在一小部分客户群上测试“金丝雀”部署方式,了解新功能如何在生产中落地。
用于功能管理的SaaS平台LaunchDarkly是佼佼者,它可以让你对应用程序及其功能的部署方式进行强大的控制。技术领先又还在继续扩展其功能集的公司很难不去选择。
持续集成/持续部署(CI/CD)工具
多年来我一直在做持续集成。但是持续部署更新、更具挑战性,甚至有点可怕。CI/CD需要构建软件、运行测试,将工件放在正确的位置,配置云资源,将应用程序部署到多个位置,以及任何数量的不同活动。这些活动从代码上传的那一刻起就尽可能快地进入了获取代码的过程。
许多团队正试图将从代码上传到部署的时间,从几天缩短到十五分钟。你没有看错,这就是可怕的部分——如此迅速地将某些东西投入生产意味着你需要准备好快速做出反应。从好的方面来说,如果出现问题,较短的部署时间可以提供即时反馈,使开发人员能够将最近更改的上下文牢记在心,并在错误发生时更快速、更轻松地修复错误。
正确执行CI/CD需要强大的工具包。幸运的是,有CircleCI可以做到这一切,它与大量的框架和系统连接以快速构建和部署应用程序。我喜欢CircleCI的完整功能集、速度和合规性。
此外,开源CI/CD工具Jenkins也是一个值得推荐的工具。
IDE、沟通工具、源代码控制、功能标志和CI/CD是进行现代软件开发最基本的五种工具。这些工具互相协同,以最大限度地减少编码和将代码投入生产的用时。此外,它们也都是可以基于云,让你不必担心工作之外的其他事情。无论是在基于云的IDE中进行编码,还是使用强大的CI/CD工具在几分钟内进行部署,这些工具都将为软件开发过程铺平道路。