目录
介绍
修补者
业余爱好者
专业人士
1.使用版本控制
2.备份网站外的所有内容
3.跟踪每个版本中的更改,修复和增强功能
4.保持源代码与正在使用的每个已部署版本相关
5.在托管中保留您的软件副本
6.使用自动构建
7.安排构建
8.写回归单元测试
9.使用Bug跟踪系统
10.使用系统跟踪正在开发的任务和功能
11.让客户了解软件开发的进展
12.定期更新第三方软件使用
13.了解安全风险
14.确保正确遵守行业标准,如PCI,HIPAA,SOX和PII
15.继续教育自己
16.投资您的开发工具
17.适当的授权开发工具和软件
18.编写有关软件的文档
19.记下你的活动记录
总结
介绍许多人编写代码,但不是每个人,其编写代码,都认为自己是专业程序员。成为一名专业人士需要什么?本文列出了您在成为软件开发专业人员时所采取的做法。根据我的经验,许多这些实践并没有在编码学校中教授,但它们对于你向客户提供高质量的软件至关重要。
在介绍这些实践之前,让我们先简要考虑编写代码的不同类。
修补者修补者是一个在这里和那里写几行代码的人,也许是Excel中的宏,可能连接IFTTT或Microsoft Flow中服务的人,或者可能是在数据库中运行的脚本。修补者还可以使用诸如Basic或JavaScript之类的语言来创建程序或网站以供他们个人使用和享受。
业余爱好者当程序员开始为其他人编写软件或网站时,程序员成为业余爱好者而不是修补者,特别是当程序员对她/他的工作进行补偿时。业余程序员经常创建好的软件并很好地编写代码。但是要被认为是专业的,程序员会遵循几种做法。
专业人士以下列表代表了我认为每个专业软件开发人员将遵循的实践。就像在所有事情中一样,在某些情况下,这些实践中的一个或两个不是由专业人员执行是有道理的; 但我相信大多数人会同意专业人士大部分时间都遵循所有这些做法。
- 使用版本控制
- 备份网站外的所有内容
- 跟踪每个版本中的更改,修复和增强功能
- 保持与正在使用的每个已部署版本相关的源代码
- 保管您的软件副本
- 使用自动构建
- 安排构建
- 写回归单元测试
- 使用bug跟踪系统
- 使用系统跟踪正在开发的任务和功能
- 让客户了解软件开发的进展情况
- 保持第三方软件定期更新
- 了解安全风险
- 确保正确符合PCI,HIPAA,SOX和PII等行业标准
- 继续教育自己
- 投资您的开发工具
- 适当授权开发工具和软件
- 编写有关软件的文档
- 记下您的活动日记
所有专业软件开发人员都应使用版本控制系统。很难想象一个不适用版本控制的解决方案。今天,大多数开发人员使用GIT,但许多开发人员也使用Subversion(SVN)。使用的版本控制系统应具有以下功能:
- 允许人们添加解释每个签入的注释,并跟踪是谁签入的
- 允许人们查看为每个文件签入的更改历史记录
- 允许人们恢复到早期版本的软件
- 允许人们比较签入时所做的代码更改
压缩每个产品版本或签入的文件,而不是使用版本控制系统,是业余程序员的标志。
2.备份网站外的所有内容专业程序员将确保她/她写的所有代码都定期备份,并且备份需要是一个异地位置,以防止在发生火灾,洪水,盗窃时丢失所有源代码,或其他一些事件。鉴于当今互联网的无处不在,这通常很容易实现。在大多数情况下,简单地使用像github或bitbucket这样的在线存储库进行版本控制几乎完全符合这种做法。除了备份源代码外,专业人员还将确保用于构建软件的工具和流程的脚本和命令也可以远程备份。一个专业的程序员应该能够从零开始,获得一台新电脑,并重建一切需要继续开发的软件,从场外备份恢复所有的软件。
3.跟踪每个版本中的更改,修复和增强功能软件专业人员不仅为客户提供软件,还提供最新版本中包含的所有新功能的列表。当然,还应该有一个完整的初始版本内容列表。此外,还应提供已修复的错误列表以及其他更改,例如对性能和安全性的显着增强。软件专业人员跟踪发布期间每次更改代码的原因。当客户端正在寻找功能或修复时,这通常很有用,因为您可以告诉他们需要升级到特定版本才能获得它。
4.保持源代码与正在使用的每个已部署版本相关现代版本控制软件让我们可以看到代码在任何时间点上的外观。专业人员应该能够轻松快速地查看代码如何查找任何客户端当前已实现的任何软件版本。这有助于开发人员更快地解决客户端报告的问题,并为软件创建修复程序。
5.在托管中保留您的软件副本没有人喜欢考虑他们自己死亡的可能性,但作为一名软件专业人士,您应该考虑这种可能性并采取措施确保您的客户可以继续使用您的软件,如果您遇到不幸的事情。确保除了您自己之外的其他人可以获得对源代码的访问权限以及在需要时构建和支持它所需的所有工件和流程。
6.使用自动构建构建软件将我们从源代码带到部署到客户端或生产系统的最终输出。虽然构建通常很简单,但它们可能会变得更加复杂。出于这个原因,专业开发人员将建立一个自动构建过程,该过程将所有源代码编译并组合到可以部署的软件包中。可以自动化的小任务,以便不会忘记它们包括将代码标记为发布版本,以便编译器优化输出,或将其最小化,或根据需要对其进行模糊处理。自动构建通常会更新版本号,并且通常还会按特定顺序执行多个步骤。最初可以使用简单的批处理/命令文件自动构建流程; 但许多专门用于构建软件产品的专业使用工具。
7.安排构建在专业人员创建自动构建之后,安排构建只是下一步,并且希望是一个小步骤。许多开发人员计划构建每天自动运行一次或两次。当多个开发人员为代码做出贡献时,这尤其有利。一些开发人员甚至配置版本控制系统以在每次签入代码时启动构建。如果构建所需的工件从其存储库签入中排除,或者如果代码检查了受到不利影响的代码,则频繁构建可帮助开发人员更快地识别在系统的另一部分的错误。
8.写回归单元测试我承认在某些情况下,为您的软件编写单元测试没有意义。但我相信,在几乎所有情况下,即使对于像Cobol和Visual Basic这样的旧语言,开发人员也会编写单元测试来验证软件中的重要逻辑是否正确运行,并且不会被新的增强或相关错误修复无意中改变。对于不熟悉单元测试的人来说,启动和运行单元测试框架需要几个小时甚至几天,但是一旦你拥有它,你就会发现这些测试让你有很大的自由来做出改变并且安心您所做的更改并未破坏客户所依赖的现有逻辑。
9.使用Bug跟踪系统让我们面对现实吧,几乎所有软件都有错误,或者根本不是用户想要的东西。软件开发人员需要跟踪何时发现这些错误以及谁发现了这些错误,以便他们可以进行仔细的修复并为受影响的系统和用户提供补丁或修复。错误跟踪系统可以帮助您软件的所有客户和用户了解错误,有时还可以解决错误,直到应用修复程序。它还可以让您的客户知道他们只需要升级到您的最新版本以获取该错误的修复程序。此外,它还可以帮助您跟踪修复的时间和位置,以便您可以通过修复,后续问题管理相关问题,或者只是提醒您自己已修复此错误。
10.使用系统跟踪正在开发的任务和功能软件专业人员了解提供高质量的软件包括跟踪大量细节。跟踪所有需要完成的事情的系统和地点非常有价值。您的系统可能像Trello板一样简单。理想情况下,您将拥有尚未完成的所有内容列表以及尚未完成的所有操作。大多数任务板至少使用三列:待办,执行和完成。即使您认为任务已完成,如果您尚未编写与该功能相关的文档,或者更改了安装包以包含该功能的依赖项,您可能认为它并未真正完成。该系统还可以帮助您记住项目的状态并与他人共享状态或共享要完成的工作。
11.让客户了解软件开发的进展在大多数软件开发项目中,与最终用户(即“客户”)的频繁交互极大地增加了您创建的软件满足其需求的机会。频繁的沟通还可以帮助您管理客户对何时向他们提供功能以及这些功能如何运作的期望。虽然软件开发的瀑布方法描述了预先收集所有需求,但是如果您在开发过程中让客户参与进来,并且可以向他们展示产品,那么真正能够收集到所有细节的可能性非常小。专业软件开发人员在向他们提供有关软件进展的最新信息之前,不会让他们的客户陷入数周或数月的困境。
12.定期更新第三方软件使用大多数开发人员依赖某些第三方软件来减少生成客户所需软件所需的时间。对于Web开发人员,这可能包括Microsoft .NET,Angular,React,JQuery和Java等框架。但是在这些框架中偶尔会发现安全漏洞和性能问题,以及其他漏洞,因此软件专业人员会定期更新最新版本的框架,以获取安全补丁和修复程序,以提高其通过的软件的安全性和性能。他们传递给客户的软件。
我建议您保留软件和软件开发过程使用的所有第三方软件的列表,并且每年至少两次查看列表,以便将每个依赖项更新为最新版本。
13.了解安全风险专业软件开发人员明白,他们通常比雇用他们编写代码的客户拥有更多的软件开发知识。因此,他们理解编写安全代码,黑客不容易滥用的代码,是他们的责任。与开发IOT设备的嵌入式驱动程序的开发人员相比,创建Web应用程序的软件开发人员可能需要解决更多的安全风险,但每个人都需要评估软件易受滥用的不同方式,并采取措施消除或减轻这些风险。
尽管可能无法保证任何软件不受攻击,但专业开发人员会花时间学习和了解其软件中可能存在的漏洞,然后采取后续步骤来降低其软件易受攻击的风险。保护您的软件免受安全风险的影响通常包括静态分析工具和流程以减少安全错误的引入,但它主要依赖于教育那些编写代码的人。
OWASP(https://owasp.org)是开发人员了解可能存在的漏洞以及减轻这些漏洞的方法的良好资源。
14.确保正确遵守行业标准,如PCI,HIPAA,SOX和PII编写符合行业法规的软件也是软件专业人员的责任。客户有责任要求软件告知开发人员他们需要软件来满足HIPAA,GDPR,PCI,SOX或PII等特定法规。但是,软件专业人员有责任了解这些法规如何影响软件和软件开发过程。客户可以向开发人员建议规则对代码有何影响,但如果您是软件专业人员,你将直接参考法规,并澄清你自己对文档的解释。
15.继续教育自己技术不断变化,因此专业人员将不断学习新的工具,技术和软件语言,以提高效率并编写持续时间更长的软件。即使是使用相同语言和环境编程十年的开发人员也可能会发现有新的工具和流程可以帮助他们编写更好的代码。也许需要静态代码分析工具可以帮助您找到代码中的错误,或者您可以通过从瀑布式方法切换到敏捷方法来学习编写更好的代码。编写Visual Basic 6代码的开发人员可能会意识到他们可以开始编写更多的模块化代码并使用类来促进可能的Java重写,但仍需要数年时间。如果你不是偶尔做一些研究来寻找改进的方法,我认为你不能认为自己是一个专业的软件开发人员。(如果您正在阅读本文,您可能是专业人士或计划成为一名专业人士!)
16.投资您的开发工具一个好木匠不使用便宜的锯子,一个好的软件开发人员不只是使用最便宜的工具和设备。幸运的是,对于软件开发人员来说,许多非常好的工具都可以免费使用。有些工具确实需要花费一点钱,但通过付费获得的生产率提高通常非常值得。
除了软件工具之外,日复一日地坐在计算机上编写代码的开发人员也可能从拥有好的硬件中获益。一台拥有大量内存、快速硬盘和互联网连接的电脑可能会让你每天都有几分钟甚至几小时的等待时间。多个显示器,舒适的键盘,鼠标和椅子可以帮助您每天更有效地编写代码。花时间投资可以提高生产力的小东西,即使只是少量。
17.适当的授权开发工具和软件客户希望他们雇用的人员符合道德规范。好吧,也许不道德的客户不期望道德行为或愿意视而不见,但如果你宣称自己是一名专业的软件开发人员,我相信你也宣称你做的是道德的,而道德的一部分是支付用于开发软件解决方案的资源。这意味着您将为用于开发的工具支付正确的价格和许可费用。这也意味着您不会使用免费或社区版本的工具来开发明显不符合该版本开发产品使用规则的专业解决方案。正如您可能正在为您的客户编写软件一样,那些创造了你用来提高你的生产力的工具的人和公司也在试图通过编写他们的软件来谋生。
18.编写有关软件的文档专业人员编写有关该软件的文档,以帮助可能需要接管代码维护和增强的未来开发人员。有时候,未来的开发者可能就是你自己。系统图,流程图,用例图和代码中的注释解释了复杂的位,这些都有助于未来的开发人员维护软件,如果你没有这样做的话。
19.记下你的活动记录专业人员经常在软件开发过程中记录他们的活动。这些笔记可以用于多种目的,但大多数情况下它们都有益于自己 也许你记录为什么你选择一种方法而不是另一种 ,也许您列出了决策的预期利弊。也许您会跟踪执行IT维护的频率或解决问题的方法。您可以跟踪与他人的互动以及任务和职责的记录。专业人士也会使用这些笔记来帮助解释他们花费时间的地方,并解释为什么开发工作落后于计划,以及发生这种情况的时间。
总结我为那些刚接触软件开发的人写了这篇文章,特别是那些完成编写软件程序并希望从事专业职业的人。文章中涉及的大多数项目都没有正式的软件教育程序,但是是编写高质量软件的一个重要方面。为自己的生活而编写软件的个人可能希望实现所有这些实践,以便让现有和潜在客户对其工作的质量和专业性充满信心。