65.9K
CodeProject 正在变化。 阅读更多。
Home

是什么让软件程序员成为专业人士?

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.38/5 (25投票s)

2019年6月17日

CPOL

15分钟阅读

viewsIcon

28804

软件专业人士大多数时候都会遵循的最佳实践

引言

很多人编写代码,但并非所有编写代码的人都将自己视为专业程序员。要成为专业人士需要什么?本文列出了您作为软件开发专家所采取的实践。根据我的经验,这些实践中的许多都未在编码学校教授,但它们对于向客户交付高质量软件至关重要。

在介绍这些实践之前,让我们先简要考虑一下编写代码的几类人群。

修补匠

修补匠是指偶尔编写几行代码的人,可能是在 Excel 中编写宏,可能是在 IFTTT 或 Microsoft Flow 中连接服务,或者可能是在数据库中运行的脚本。修补匠也可能使用 Basic 或 JavaScript 等语言来为自己的个人使用和娱乐创建程序或网站。

业余爱好者

当程序员开始为他人编写软件或网站,尤其是当程序员因此获得报酬时,他/她就从修补匠转变为业余爱好者。业余程序员经常创建优秀的软件并写出好的代码。但要被认为是专业人士,程序员需要遵循一些实践。

专业人士

以下列表代表了我认为每位专业软件开发者都会遵循的实践。正如所有事情一样,在某些情况下,一项或两项实践可能不被专业人士执行,但这是合理的;但我认为大多数人会同意,专业人士在大多数时候都会遵循所有这些实践。

  1. 使用版本控制
  2. 异地备份所有内容
  3. 跟踪每个版本的更改、修复和增强功能
  4. 保留正在使用的每个已部署版本的相关源代码
  5. 将您的软件副本存入托管
  6. 使用自动化构建
  7. 安排构建
  8. 编写回归单元测试
  9. 使用缺陷跟踪系统
  10. 使用系统来跟踪正在开发的任务和功能
  11. 让客户了解软件开发的进展情况
  12. 定期更新所使用的第三方软件
  13. 了解安全风险
  14. 确保符合 PCI、HIPAA、SOX 和 PII 等行业标准
  15. 持续学习
  16. 投资开发工具
  17. 正确许可开发工具和软件
  18. 编写关于软件的文档
  19. 记录您的活动

1. 使用版本控制

所有专业软件开发者都应使用版本控制系统。很难想象有什么解决方案不适用于版本控制。如今,大多数开发者使用 GIT,但也有许多开发者使用 Subversion (SVN)。所使用的版本控制系统应具有以下功能:

  • 允许人们添加注释来解释每次提交,并跟踪谁进行了提交
  • 允许人们查看每个文件的提交历史记录
  • 允许人们恢复到软件的早期版本
  • 允许人们比较不同提交之间的代码更改

将每个产品版本或提交的文件压缩打包,而不是使用版本控制系统,这是业余程序员的标志。

2. 异地备份所有内容

专业程序员将确保他/她编写的所有代码定期备份,并且该备份需要位于异地,以防止因火灾、洪水、盗窃或其他事件导致所有源代码丢失。鉴于当今互联网的普及,这通常很容易实现。仅仅使用 github 或 bitbucket 等在线存储库进行版本控制,在大多数情况下几乎可以完全满足这一实践。除了源代码备份外,专业人士还将确保用于构建软件的工具和流程的脚本和命令也已远程备份。专业程序员应该能够从零开始,购置一台新计算机,并通过从异地备份中恢复所有软件来重建继续开发软件所需的一切。

3. 跟踪每个版本的更改、修复和增强功能

软件专业人士提供的不仅仅是软件,他们还会提供最新版本中包含的所有新功能的列表。当然,还应该有一个完整的列表来包含初始版本的内容。此外,还应提供已修复的错误列表以及其他更改,例如性能和安全的明显增强。软件专业人士会跟踪发布期间所做的每一次代码更改背后的原因。这通常对客户很有帮助,因为当客户寻找某个功能或修复时,您可以告知他们需要升级到特定版本才能获得它。

4. 保留正在使用的每个已部署版本的相关源代码

现代版本控制软件允许我们查看代码在任何时间点的样子。专业人士应该能够轻松快速地查看任何客户当前已实现的软件版本的代码样子。这有助于开发人员更快地解决客户报告的问题,并为软件创建修复。

5. 将您的软件副本存入托管

没有人愿意考虑自己可能离世的可能性,但作为一名软件专业人士,您应该考虑这种可能性,并采取措施确保如果您不幸发生意外,您的客户能够继续使用您的软件。请确保除了您自己之外,还有其他人可以在需要时访问您的源代码以及构建和支持它所需的所有工件和流程。

6. 使用自动化构建

构建软件将我们从源代码转化为部署给客户或生产系统的最终输出。虽然构建通常从简单开始,但它们可能会变得更加复杂。因此,专业开发人员将设置自动化构建过程,该过程将编译所有源代码并将其合并到一个可部署的包中。可以自动执行的小任务,以避免遗漏,包括将代码标记为发布构建,以便编译器可以优化输出,或最小化输出,或根据需要混淆输出。自动化构建通常会更新版本号,并且还经常按特定顺序执行多个步骤。构建过程可以最初使用简单的批处理/命令文件进行自动化;但许多专业人士使用专门为构建软件产品设计的工具。

7. 安排构建

在专业人士创建了自动化构建之后,安排构建只是下一步,而且希望是一个小步骤。许多开发人员会安排构建每天自动运行一两次。当多名开发人员为代码做出贡献时,这尤其有利。一些开发人员甚至会将版本控制系统配置为每次提交代码时都启动一个构建。频繁的构建有助于开发人员更快地识别错误,如果构建所需的工件被排除在他们的存储库提交之外,或者他们提交的代码对系统中其他部分的​​代码产生了不利影响。

8. 编写回归单元测试

我承认,在某些情况下,为您的软件编写单元测试可能没有意义。但我相信,在几乎所有情况下,即使对于 Cobol 和 Visual Basic 等旧语言,开发人员也会编写单元测试来验证软件中的重要逻辑是否正确运行,并且不会因新功能或相关的错误修复而无意中被更改。对于不熟悉单元测试的人来说,设置并运行一个单元测试框架需要几个小时甚至几天的时间,但一旦您有了它,您就会发现测试让您能够自由地进行更改,并且让您安心地知道您所做的更改不会破坏您的客户所依赖的现有逻辑。

9. 使用缺陷跟踪系统

让我们面对现实,几乎所有软件都有缺陷,或者无法像用户期望的那样工作。软件开发人员需要跟踪这些缺陷何时被发现以及由谁发现,以便他们能够谨慎地修复并为受影响的系统和用户提供补丁或修复。缺陷跟踪系统可以帮助您的所有客户和用户了解缺陷,有时还可以告知他们如何规避缺陷,直到应用修复为止。它还可以让您的客户知道他们只需要升级到最新版本即可获得缺陷修复。此外,它还可以帮助您跟踪何时何地进行了修复,以便您可以管理与修复相关的后续问题、跟进问题,或者仅仅是提醒自己您已经修复了该缺陷。

10. 使用系统来跟踪正在开发的任务和功能

软件专业人士明白,交付高质量的软件包括跟踪许多细节。有一个系统和地点来跟踪所有需要完成的事情非常有价值。您的系统可以像 Trello 板一样简单。理想情况下,您将有一个尚未完成的所有事项列表以及尚未开始的所有事项列表。大多数任务板至少使用三个列:待办、进行中和已完成。即使您认为一项任务已完成,但如果尚未为其编写相关文档,或未修改安装包以包含该功能的依赖项,您仍可能认为它尚未真正完成。该系统还有助于您记住项目状态并与他人共享状态或要完成的工作。

11. 让客户了解软件开发的进展情况

在大多数软件开发项目中,与最终用户(又名“客户”)的频繁互动极大地增加了您创建的软件满足其需求的几率。频繁沟通还有助于您管理客户对功能交付时间和功能行为的期望。尽管瀑布式软件开发方法描述了在项目初期收集所有需求,但如果您在开发过程中让客户参与进来并向他们展示不断发展的产品,那么您真正能够收集到所有细节的可能性非常小。专业软件开发人员不会让他们的客户在黑暗中等待数周或数月,然后才向他们提供软件进展的更新。

12. 定期更新所使用的第三方软件

大多数开发人员都依赖某些第三方软件来缩短为客户生产软件所需的时间。对于 Web 开发人员来说,这可能包括 Microsoft .NET、Angular、React、JQuery 和 Java 等框架。但是,这些框架有时会发现安全漏洞、性能问题和其他错误,因此软件专业人士会定期更新到最新版本的框架,以获得安全补丁和修复,从而提高他们交付给客户的软件的安全性和性能。

我建议您维护一份您软件和软件开发流程所使用的所有第三方软件的列表,并且您至少每半年审查一次该列表,以便将每个依赖项更新到最新版本。

13. 了解安全风险

专业软件开发人员理解,他们通常比聘请他们编写代码的客户拥有更多的软件开发知识。因此,他们明白编写安全代码(不容易被黑客滥用的代码)是他们的责任。开发 Web 应用程序的软件开发人员可能需要解决比为 IOT 设备编写嵌入式驱动程序的开发人员更多的安全风险,但每个人都需要评估软件易受攻击的不同方式,并采取措施消除或减轻这些风险。

虽然不可能保证任何软件都免疫攻击,但专业开发人员会花时间学习和理解其软件中可能存在的漏洞,然后采取后续措施来降低其软件易受攻击的风险。保护您的软件免受安全风险通常包括使用静态分析工具和流程来减少安全错误的引入,但主要依赖于对编写代码的人进行教育。

OWASP (https://owasp.org) 是开发人员了解潜在漏洞和缓解这些漏洞的方法的一个很好的资源。

14. 确保符合 PCI、HIPAA、SOX 和 PII 等行业标准

编写符合行业法规的软件也是软件专业人士的责任。要求软件的客户有责任告知开发人员他们需要软件符合特定的法规,例如 HIPAA、GDPR、PCI、SOX 或 PII。但软件专业人士的责任是理解这些法规如何影响软件和软件开发流程。客户可能会向开发人员建议法规对代码有什么影响,但如果您是软件专业人士,您会直接参考法规并澄清您对文件的解释。

15. 持续学习

技术不断变化,因此专业人士将不断学习新的工具、技术和编程语言,以提高效率并编写更持久的软件。即使是已经在相同的语言和环境中编程了十年的开发人员,也可能会发现新的工具和流程可以帮助他们编写更好的代码。例如,静态代码分析工具可以帮助您查找代码中的错误,或者您可以通过从瀑布方法转向敏捷方法来学习编写更好的代码。编写 Visual Basic 6 代码的开发人员可能会意识到他们可以开始编写更模块化的代码并使用类来方便即将到来的 Java 重写,尽管这仍需数年时间。如果您不经常进行一些研究来寻找改进的方法,我认为您无法将自己视为一名专业的软件开发人员。(如果您正在阅读本文,您可能已经是专业人士或正计划成为一名专业人士!)

16. 投资开发工具

一个好的木匠不会使用廉价的锯子,一个好的软件开发人员也不会只使用最便宜的工具和设备。幸运的是,对于软件开发人员来说,许多非常好的工具都是免费使用的。有些工具确实需要花费一点钱,但通过付费获得的生产力提升通常物有所值。

除了软件工具之外,整天坐在电脑前编写代码的开发人员可能会受益于拥有良好的硬件。一台拥有大量内存、快速硬盘和良好互联网连接的计算机可以为您节省每天数分钟甚至数小时的等待时间。多显示器、舒适的键盘、鼠标和椅子可以帮助您每天更有效地编写代码。花时间投资那些可以提高您生产力的小事物,即使只是很小的提高。

17. 正确许可开发工具和软件

客户期望他们雇佣的人能够道德地工作。好吧,也许不道德的客户不期望道德行为,或者愿意视而不见,但如果您将自己定位为专业的软件开发人员,我相信您也声明您以道德的方式行事,而道德的一部分就是为用于开发软件解决方案的资源付费。这意味着您将为开发工具支付正确的价格和许可费用。这也意味着您不会使用免费或社区版本的工具来开发明显不符合该版本使用规则的专业解决方案。就像您可能通过为客户编写软件来谋生一样,那些创建您使用的工具来提高生产力的人也试图通过编写自己的软件来谋生。

18. 编写关于软件的文档

专业人士会编写关于软件的文档,以帮助未来可能需要接管代码维护和增强的开发人员。有时,未来的开发人员可能是您自己。系统图、流程图、用例图以及代码中解释复杂部分的注释,都有助于在您不在时维护软件。

19. 记录您的活动

专业人士在软件开发过程中经常做笔记。这些笔记可以起到多种作用,但最常受益的是您自己。也许您会记录为什么选择一种方法而不是另一种方法。也许您会列出某个决定的预期好处或坏处。也许您会跟踪执行 IT 维护的频率或如何解决某些问题。您可能会记录与他人的互动以及任务和职责的记录。专业人士还使用这些笔记来帮助解释他们如何花费时间和为什么开发会延迟,以防这种情况发生。

摘要

我写这篇文章是为了那些刚接触软件开发的人,特别是那些完成了软件开发课程并希望成为专业人士的人。文章中涵盖的大多数项目都没有在正式的软件教育项目中进行,但它们是编写高质量软件的基本方面。靠自己为生的人可能希望实施所有这些实践,以便让当前和潜在的客户对其工作的质量和专业性感到放心。

如果您觉得这个列表遗漏了什么重要内容,请告诉我,以便我们改进这篇文章,使其成为开发人员的良好参考。

请稍后回来查看未来的文章,届时我将介绍使软件开发“团队”成为专业团队的那些实践。

© . All rights reserved.