软件开发技术报告-广西北部湾经济区开放开发报告
来自itmagination,纯机翻,看重点。
今年早些时候,ITMAGINATION的.NET开发人员Andrzej Frydryszak参加了一些关于软件开发的会议。我们编制的清单列出了会议与会者从美国和欧洲一些顶级工程领导者那里听到的最重要的观点。这里是:
1. 可观察性[跟踪,监控和日志记录]至关重要!
您正在开发软件,并已准备好部署它。所有测试均通过,测试覆盖率处于不错的水平。知道了这一点,我们就可以部署我们的代码,并继续和平地工作。尽管这不是最佳方案(尽管很少见),我们的代码仍然可能失败。是的!因此,开发人员需要始终观察他们的代码,并让它一直报告指标。如果发生任何故障,您需要准备好系统来将日志交付给您。正如安杰伊所写的:
可观察性至关重要。没有它,开发人员就是盲目的。它使我们有机会随时对系统中发生的每个问题做出反应。
2.同时使用“无服务器”和“服务器”方法是一种很好的做法。在这种情况下,我们从这两种软件开发方法中受益。
无服务器是一种运行应用程序(似乎)而不涉及任何服务器的方式。当然,这是一个重大的简化 - 总是涉及服务器;只有在这种情况下,您不会对它们做任何事情,并且它们是预先配置的。它被吹捧为新的黑色,除了...这不是所有疾病的完美补救措施。对于初学者,如前所述,您无法配置基础服务器。你也不知道引擎盖下是什么东西。主要缺点是该方法同时具有主要优点。您不必配置任何内容,因此与其说部署⇾ 担心,不如说是部署 ⇾ 忘记。
无服务器或服务器解决方案都有好处。在现代系统中,通常结合使用两种方法来获得大部分解决方案。
3. 容器化一切!Kubernetes 是一项热门技术!
并非所有的软件开发趋势都是好主意。你还记得CoffeeScript或Ruby吗?可悲的是,我们做到了。幸运的是,Kubernetes(K8S)似乎不会加入悲伤谷中的两者。K8S使DevOps专家的生活变得更加容易。
以下是将容器化和容器编排作为技术策略的核心租户可以预期的好处:
除了显而易见的好处之外,我们还会给你留下一些案例研究,我们希望这些案例研究能激励你,帮助你决定使用 Kubernetes 是否适合你,并展示出更深入的好处:
其他值得一看的案例研究:
对如何优化 K8s 部署或它是否是您当前规模的正确选择有任何疑问?请务必与我们联系,与我们的 DevOps 能力负责人 Maciej Gos 交谈。
4. 在软件架构方面,我们应该分而治之
大尺寸的巨石有点像昨天的故事。它们困扰着开发人员很长一段时间,尽管现在不是了。将庞大的单元代码库拆分为更小规模的应用程序是新的做事方式。它可以防火您的应用程序,降低错误频率,并使应用程序更安全,以防万一发生错误。缺点是,应用程序变得更难测试软件开发技术报告,并且需要更多的资源来做到这一点。对于规模较小的团队,维护整体式架构仍然更有意义。
将整体式应用程序划分为独立的微服务。
5. 开源和自由软件是未来的方式。
分别来自Meta(曾经是Facebook)、Google和Netflix的React、Angular和Zuul,是无数开发人员每天在工作中使用的工具。如果没有这些组织免费向所有愿意使用它们的人发布工具,每个人的工作都会更加困难。无数的服务不会看到曙光,因为编写这些应用程序太难或太耗时。所有原因都是因为在编写它们之前,人们必须弄清楚如何例如,自己编写用于规模的前端,而不分享所学到的经验教训,这将是非常低效的。
这就是为什么我们必须赞扬开源和免费软件维护者,创作者以及所有为创建和维护此类软件做出贡献的其他人。
创建工具/技术并使其开源(或使其免费)会给组织带来永恒的荣耀。
6. 使用架构模式。
软件开发中有一个共同的规则 - 不要重新发明轮子。知道我们以前可能遇到过与其他人相同的问题,该规则变得更加有价值。这就是为什么来自世界各地的工程师和开发人员使用架构模式来构建他们的项目 - 而不是浪费时间思考如何找出其他人已经提出的解决方案。
许多现代软件都使用 CQRS 和事件溯源等模式。不要重新发明轮子,使用模式。
7. 编程语言在不断发展。
事实上,我们有越来越新的编程语言,这并不奇怪。他们都来来去去,然后离开被其他人取代。没有人再用Algol或Pascal编码了。然而,一位老前辈C仍然存在,尽管这是一个值得自己探索的话题。
一个值得注意的方面是它们在这些年中演变的方式。起初,命令式语言是唯一的。然后,面向对象语言的繁荣来了,现在,有些人可能会争辩说,它们被更灵活的语言所推倒,混合了一些命令式,函数式和面向对象的特征。
语言的发展方式越来越独立于我们工作的系统。现代语言是跨平台的。由于DevOps的发展,语言选择变得越来越不重要。
8. 得益于现代化的基础设施,复杂性正在从应用程序转移到外部平台。
地下室物理服务器上的经典基础设施被云提供商和相关技术所取代。我们有虚拟机即服务,数据库即服务以及许多其他基础设施作为服务。软件解决方案中的规划专业已经转移到基础架构的高级设计,因为许多功能都可以基于它实现自动化。此外,我们还有容器和容器编排。它接管了复杂性,因为我们可以将系统划分为更小,更简单的部分。
应用程序代码更加独立于平台。然而,复杂性在于基础设施和运营。应用程序开发人员越来越关注业务逻辑。DevOps工程师负责其余的工作。
9. SCRUM != 敏捷
采用特定的过程通常会导致习得的行为,最终导致习惯。至少,这是它的理论。
然而,在某些情况程停留在人们只是为了走过运动而跋涉的过程,但行为从未发展。这样想想,你见过多少开发团队经历了所有的Scrum仪式,但实际上并没有以敏捷的方式工作?太多了?我们同意。
那么,您能做些什么呢?首先,团队支持,这始终是需要建立的第一步。如果你的团队没有看到使用这种方法工作的价值,那么从长远来看,所有的过程和仪式都不会太大的影响。
第二步是确保你有一个伟大的Scrum主管和项目经理,以确保良好的实践得到传递,并且任何异议都是
第三步是要意识到:当敏捷价值观和Scrum框架没有任何优点时,强迫它扼杀人们的喉咙,这将使你无处可去,很快。我们已经在标题为“Scrum不是每个IT项目的答案(itmagination.com)”的文章中详细介绍了这一点。
SCRUM可以是敏捷的,但它并不能保证敏捷性。敏捷性来自行为,而不仅仅是流程。
10. 持续安全
正如我们之前多次写的那样,安全不能是事后的想法。我们不能简单地“留待以后再做”。检查应用程序的安全问题必须从第一天起就集成到DevOps流程中,并集成到开发流程本身中。幸运的是,我们可以使用很少的工具来使该过程无摩擦。其中之一是Snyk。它是一个全面的工具,可以“[f]ind并自动修复代码,开源依赖项,容器和基础架构即代码中的漏洞[...]”。
我们必须在开发周期中应用安全检查程序。安全是信任的基础 - 未来的货币。
11. 审核云提供商服务的价格
由于三个主要的云提供商几乎没有竞争,他们提供的服务差异(或多或少)是任意的。现实地讲,我们可能看到的唯一区别是服务价格的差异。这就是为什么,对这个特定的提供商有偏见并不一定是坏事。实际上,大多数情况下,几乎没有区别。
选择您熟悉并已知道的任何提供商。边走边评估,不要害怕改变。
云提供商没有虚拟竞争,也没有成本套利。云基础设施成本非常依赖于通货膨胀和衰退。
12. 一切都可以“即服务”完成。
平台即服务, 基础设施即服务, 数据库即服务, 软件即服务, 后端即服务...我们为您保留了更多的例子,您应该了解我们的观点。您能想到的一切都可以由第三方完成并出售给您。
使用这些服务是一种权衡。你放弃了一些控制,变得更精简,能够更快地迭代,以及预先节省一些钱。
由于云提供商和无服务器方法的重要性的增长软件开发技术报告,每个软件都可以作为服务完成。
13. 每个人都使用Visual Studio Code。
Visual Studio Code风靡全球。拥有微软的支持,拥有开源许可证,用TypeScript编写以及允许轻松扩展功能的组合是伟大的决定。到目前为止,文本编辑器是现代程序员中最受欢迎的选择。其他选择,例如基于Intellij的集成开发编辑器(IDE)或Vim,都在Code的阴影中,尽管JetBrains的Fleets可能会改变这一点。
借助多个扩展和自定义工具,VS Code 成为开发人员中最受欢迎的 IDE。
14. TensorFlow现在被广泛使用。
Google的机器学习框架TensorFlow是程序员中非常受欢迎的选择。首先,它在GitHub上排名前20位的存储库中名列前茅。然后,有多个端口,包括JavaScript端口,团队在他们的例如React Native应用程序或React或任何其他JS框架中的Web应用程序中使用它们。这提供了巨大的灵活性,并允许团队将解决方案嵌入到许多解决方案中。
多亏了TensorFlow,我们可以在Web应用程序中实现AI解决方案。训练模型由库提供。开发人员应该专注于培训他们。
15. 一个好的长期招聘策略是雇用年轻人并对他们进行培训。
雇用青少年是一个很好的长期战略。虽然没有适合所有公司的“最佳策略”,但雇用初级员工并培训他们绝对是培养和留住内部人才的最佳方式之一。
雇用初级员工是随着时间的推移慢慢扩大团队规模的好方法,并且与雇用可能按照自己的方式行事的人相比,建立一种更容易塑造的内部文化。青少年也给出了一个新的视角,并且更多地接触当前的趋势。
在某些情况下,这并不理想,例如,当您的公司需要非常快速地扩展和开发新功能时。如果你有一个小型的内部团队,由于不切实际的开发期望,他们总是试图赶上他们的积压工作,这也不是最好的。在这种情况下,聘请外部技术合作伙伴来帮助开发,同时扩大内部团队的规模可能是一个很好的中间解决方案。
雇用年轻人来培训他们作为一种策略并非没有陷阱。你团队中的年轻人没有经过以前的公司的审查,他们没有工作经历,这很可能是一个成功或错过。不幸的现实是,虽然这种策略可以通过适当的薪酬方案获得很好的待遇,但初级员工可能会发现自己可以通过简单地移动公司来使自己的薪水翻倍,三倍甚至四倍,而不是等待或推动晋升或加薪。
这就是为什么拥有透明的薪水和工资表如此重要,以向人们展示他们在职业道路上可以在哪里以及如何进步。这就是为什么拥有出色的入职计划也非常重要的原因,以确保花在培训青少年上的时间花得值,并使导师和学员都受益。
根据许多研究,软件开发人员的一个很好的长期招聘实践是雇用没有经验的工程师,并培训他们进入组织的方式。
就是这样。2022年最具影响力的十五个趋势。哪一个在你的方面最有影响力?我们错过了什么吗?让我们知道!