2022年软件开发的十五种趋势 - geekculture


以下是通过参加了一些关于软件开发的会议搜集到的软件开发趋势:

1. 可观察性[跟踪、监控和记录]是至关重要的!
你正在开发你的软件,并且你已经准备好部署它。所有的测试都通过了,测试覆盖率也达到了一个不错的水平。知道了这一点,我们就可以部署我们的代码,并继续平静地工作。尽管这不是最理想的情况(也很罕见),但我们的代码仍然可能失败。是的! 因此,开发人员需要一直观察他们的代码,并让它一直报告指标。万一有什么故障,你需要让你的系统准备好向你提供日志。

可观察性是至关重要的。没有它,开发者就是瞎子。它让我们有机会随时对系统中发生的每个问题做出反应。

2. 同时使用 "无服务器 "和 "有服务器 "方法是一个很好的做法。
在这种情况下,我们可以从两种软件开发方法中获益。
无服务器是一种在没有任何服务器参与的情况下运行应用程序(看似)的方式。当然,这是一个重大的简化--总是有服务器参与其中;只是在这种情况下,你不需要对它们做任何事情,而且它们是预先配置好的。它被吹捧为新的黑科技,除了......它并不是解决所有疾病的完美疗法。首先,你不能配置底层服务器,正如我们之前提到的。你也不能真正知道引擎盖下有什么。这个主要的缺点同时也是这个方法的主要优点。你不需要配置任何东西,所以与其说是部署⇾担心,不如说是部署⇾忘记。

无服务器或有服务器的解决方案都有好处。在现代系统中,通常会加入两种方法来获得大部分的解决方案。

3. 容器化一切! Kubernetes是一项热门技术!
并非所有的软件开发趋势都是好主意。你还记得CoffeeScript或Ruby吗?很遗憾,我们有。幸运的是,Kubernetes(K8S)看起来并不像要加入这两者的悲哀谷中。K8S正在使DevOps专家的生活变得更加、更加、更加容易。

以下是引入容器化和容器协调作为你的技术战略的核心条款所能带来的好处。

  • 你将能够轻松地优化你的IT基础设施成本
  • 由于无缝扩展,你的用户可以期待更高的可用性和更好的SLA
  • 使用Kubernetes使你的团队能够更容易地使用多云解决方案
  • 由于容器和容器编排工具是不分技术的,你可以使用任何你想要的技术来建立一个更精简的团队
  • 通过容器化,你不再遇到 "它在我的机器上能用 "这一古老的问题

Capital One案例研究 | Kubernetes:
在 Capital One 的案例中,底线是一个很大的话题。他们的估计表明,如果不使用 K8s 自动轻松地进行扩展和缩减的能力,他们的 AWS 基础设施成本将轻松增加三倍甚至四倍。
他们通过使用 Kubernetes 看到的其他好处是新产品的上市时间,现在只需 2 周,而之前可能需要 3 个月或更长时间。
开始关注 Kubernetes 进行开发的主要原因是什么?
Capital One 的团队希望提高他们为欺诈检测和信用决策领域的关键决策,以及其他对日常至关重要的大数据、机器学习应用处理速度效率、包括银行的日常运作。

其他案例:
Pearson案例研究 | Kubernetes:
缩短新功能的上市时间,将配置速度从几个月提高到几分钟,并确保为一家服务于 7500 万用户的教育公司提供高 SLA。

Prowise 案例研究 | Kubernetes:
应用程序版本之间的停机时间为零,新部署几小时到几秒,在包含许多产品的复杂开发环境中,新版本的速度提高了 3 倍。

Zalando 案例研究 | Kubernetes:
欧洲时尚电子商务领导者使用 K8s 实现可扩展性,支持多种业务用例,如当日交付、多租户,增加其产品和地理范围,并使他们能够重写和创建所有 SaaS 产品他们一直用作定制软件。

阿迪达斯案例研究 | Kubernetes:
电子商务网站的加载时间减少了一半,每天发布多次而不是每月一次,由于阿迪达斯转向云原生,开发人员拥有更多的自主权。

4. 当涉及到软件架构时,我们应该分而治之
大规模的单体在某种程度上是一个昨天的故事。它们长期困扰着开发者,不过现在已经不是了。将巨大的单一代码库分割成较小规模的应用程序是新的做事方式。它可以使你的应用程序防火,减少错误的频率,使应用程序在发生错误时更加安全。缺点是,应用程序变得更难测试,而且需要更多的资源来完成。对于规模较小的团队来说,维持一个单体还是比较有意义的。

将一个单体应用划分为独立的微服务。

5. 开源和自由软件是未来的方式。
React、Angular和Zuul,分别来自Meta(曾经是Facebook)、谷歌和Netflix,是无数开发者每天在工作中使用的工具。如果没有这些组织向所有愿意使用它们的人免费发布的工具,每个人的工作就会变得更加困难。无数的服务将不会出现在阳光下,因为编写这些应用程序太难或太耗时了。所有这些都是因为,在编写这些应用程序之前,人们必须弄清楚如何为规模而编写前端,而不分享所学到的经验将是极其低效的。

这就是为什么我们要赞扬开源和自由软件的维护者、创造者以及所有其他为创造和维护这种软件做出贡献的人。

创造一种工具/技术并使其开源(或使其免费),给组织带来永恒的荣耀。

6. 使用架构模式
在软件开发中,有一条常见的规则--不要重新发明车轮。知道我们很可能曾经面临过与别人相同的问题,这条规则就变得更有价值。这就是为什么世界各地的工程师和开发人员都使用建筑模式来构造他们的项目--而不是把时间浪费在思考如何找出别人已经想出的解决方案上。

许多现代的软件都使用CQRS和Event Sourcing等模式。不要重新发明轮子,要使用这些模式。

7. 编程语言在不断发展。
我们有越来越多的新的编程语言这一事实并不奇怪。它们都是来来去去,离开后又被其他语言取代。没有人再用Algol或Pascal编码了。然而,有一个老前辈,C,仍然存在,尽管这是个值得单独探讨的话题。

一个值得注意的方面是它们在这些年里的演变方式。起初,命令式语言是唯一存在的。然后,面向对象的语言蓬勃发展,现在,有些人可能会争辩说,它们正被更灵活的语言所排挤,这些语言混合了一些命令式、函数式和面向对象的特性。

语言的发展方式越来越独立于我们工作的系统,也越来越独立于我们的系统。现代语言是跨平台的。由于DevOps的发展,语言的选择变得越来越不重要了。

8. 由于现代的基础设施,复杂性正在从应用程序转移到外部平台。
在地下室的物理服务器上的传统基础设施被云供应商和相关技术所取代。我们有作为服务的虚拟机、作为服务的数据库和作为服务的许多其他信息元素。软件解决方案中的主要规划已经转移到了基础设施的高水平设计,因为很多东西可以在此基础上自动化。此外,我们还有容器和容器协调。它接管了复杂性,因为我们可以把系统分成更小、更简单的部分。

应用程序代码变得更加独立于平台。然而,复杂性在于基础设施和运营。应用程序开发人员越来越关注业务逻辑。DevOps工程师处理其余部分。

9. SCRUM != AGILE
采用特定的流程通常会导致学习行为,最终形成习惯。至少,这是它的理论。

然而,在某些情况下,流程仍然是流程,人们只是为了走过场而苦苦挣扎,但行为从未发展。这样想吧,你见过多少开发团队经历了所有的Scrum仪式,但实际上没有以敏捷的方式工作?太多了吗?我们同意。

那么你能做什么呢?首先,团队买入,这永远是需要建立的第一步。如果你的团队没有看到使用这种方法工作的价值,那么从长远来看,所有的流程和仪式都不会有什么进展。

第二步是确保你有一个优秀的Scrum主管和项目经理,以确保良好的实践被传递下去,并确保任何反对意见被采纳。

第三步是认识到:当敏捷价值和Scrum框架没有任何价值时,将其强行灌输到人们的喉咙里,会让你很快就一无所获。我们在题为 "Scrum不是每个IT项目的答案(itmagination.com)"的文章中已经详细介绍了这一点以及更多的内容。

SCRUM可以是敏捷的,但它并不能保证敏捷性。敏捷性来自于行为,而不仅仅是流程。

10. 持续安全
正如我们以前多次写过的那样,安全不能是事后的想法。我们不能简单地 "留待以后"。检查应用程序的安全问题必须被整合到DevOps流程中,并且从第一天开始就整合到开发流程本身。幸运的是,我们可以使用一些工具来使这个过程无摩擦。Snyk就是其中之一。这是一个全面的工具,"找出并自动修复你的代码、开源依赖、容器和基础设施作为代码的漏洞[...]"。

我们必须在开发周期中应用安全检查程序。安全是信任的基础--未来的货币。

11. 审计云供应商的服务价格
由于三个主要的云计算供应商几乎不享有竞争,而且他们提供的服务的差异是(或多或少)任意的。在现实中,我们可能看到的唯一差异是服务价格的差异。这就是为什么,对这个特定的供应商有偏见并不一定是坏事。大多数情况下,确实没有什么区别。

选择你感到满意的、已经了解的供应商。边走边评估,不要害怕改变。

云供应商没有虚拟竞争,也没有成本套利。云基础设施的成本非常依赖于通货膨胀和经济衰退。

12. 一切都可以 "作为一种服务 "来做。
平台即服务,基础设施即服务,数据库即服务,软件即服务,后台即服务......我们没有给你更多的例子,你应该明白我们的意思。你能想到的一切都可以由第三方完成并出售给你。

使用这些服务是一种折衷。你放弃了一些控制权,以便变得更精简,能够更快地迭代,同时也能在前期节省一些钱。

由于云供应商和无服务器方法的重要性的增长,每一个软件都可以作为一个服务来完成。

13. 每个人都在使用Visual Studio Code
Visual Studio Code在世界范围内掀起了一场风暴。有微软的支持,有开源许可证,用TypeScript编写,并允许轻松扩展功能,这些组合都是伟大的决定。到目前为止,文本编辑器是现代程序员中最受欢迎的选择。其他选择,如基于Intellij的集成开发编辑器(IDE)或Vim,都在Code的阴影下,尽管JetBrains的Fleets可能会改变这种情况。

由于有多种扩展和定制工具,VS Code成为开发者中最受欢迎的IDE。

14. 如今,TensorFlow被广泛使用
TensorFlow是谷歌的机器学习框架,在程序员中是一个非常受欢迎的选择。首先,它在GitHub的最多星级存储库中排名前20。然后,有多个端口,包括JavaScript端口,团队在他们的例如React Native应用程序,或React或任何其他JS框架的Web应用程序中使用。这提供了巨大的灵活性,并允许团队将解决方案嵌入许多解决方案中。

由于TensorFlow,我们可以在网络应用中实现AI解决方案。用于训练的模型是由库提供的。开发人员应该专注于训练它们。

15. 一个很好的长期雇用策略是雇用后辈并培训他们
雇用后辈(后起之秀的年轻人)是一个很好的长期战略。虽然没有适合所有公司的 "最佳策略",但雇用后辈并培训他们绝对是成长和保留内部人才的最佳方式之一。

雇用后辈是一个很好的方式,可以随着时间的推移慢慢扩大你的团队,并建立一个内部文化,与雇用那些可能已经定型的人相比,更容易塑造。初中生还能提供一个新的视角,并更多地接触到当前的趋势。

在一些情况下,这并不理想,例如,当你的公司需要迅速扩大规模和开发新功能时。如果你有一个小的内部团队,由于不现实的开发期望,他们总是试图赶上他们的积压工作,这也不是最好的。在这种情况下,雇用一个外部技术合作伙伴来帮助开发,同时同步扩大内部团队的规模,可能是一个很好的中间解决方案。

雇用后辈来培训他们的策略并不是没有陷阱。加入你的团队的年轻人没有经过以前公司的审查,他们没有工作经历,而且很可能是一击即中。不幸的现实是,虽然这种策略在适当的补偿方案下可以很好,但初级雇员可能会发现自己处于这样的位置:他们只需转移公司,而不是等待或推动晋升或加薪,就可以使自己的工资翻一番、三番,甚至四番。

这就是为什么拥有透明的工资和薪资表是如此重要,以显示人们在职业道路上可以在哪里以及如何晋升。这就是为什么拥有优秀的入职培训计划也非常重要,以确保花在培训后辈上的时间得到很好的利用,使导师和学员都受益。