今年早些时候,我们参加了几个关于软件开发的会议。我们汇编的清单是会议参加者听到的最重要的观点。这里是
◆ 1.可观察性[跟踪、监控和记录]是至关重要的
你正在开发你的软件,你已经准备好部署它了。所有的测试都通过了,测试覆盖率也达到了一个不错的水平。知道这一点后,我们可以部署我们的代码,并继续平静地工作。尽管这不是最理想的情况(而且很罕见),我们的代码仍然可能失败。是的!因此,开发人员需要一直观察他们的代码,并让它一直报告指标。万一有什么故障,你需要让你的系统准备好向你提供日志。正如Andrzej所写的。
可观察性是至关重要的。没有它,开发者就是瞎子。它使我们有机会随时对系统中发生的每个问题作出反应。
◆ 2.同时使用 "无服务器 "和 "有服务器 "方法是一种很好的做法。在这种情况下,我们可以从两种软件开发方法中获益。
Serverless是一种运行应用程序的方式(似乎),没有任何服务器参与。当然,这是一个重大的简化--总是有服务器参与其中;只是在这种情况下,你不需要对它们做任何事情,而且它们是预先配置好的。它被吹捧为新的黑科技,除了......它并不是解决所有疾病的完美疗法。首先,你不能配置底层服务器,正如我们之前提到的。你也不能真正知道引擎盖下有什么。这个主要的缺点同时也是这个方法的主要优点。你不需要配置任何东西,所以与其说是部署⇾担心,不如说是部署⇾忘记。
无服务器或有服务器的解决方案都有好处。在现代系统中,将两种方法结合起来以获得大部分的解决方案是很常见的。
◆ 3.容器化一切!Kubernetes是一项热门技术!
并非所有的软件开发趋势都是好主意。你还记得CoffeeScript或Ruby吗?遗憾的是,我们有。幸运的是。Kubernetes(K8S)似乎并不打算加入这两个人的悲哀谷。K8S正在使DevOps专家的生活变得更加、更加、更加容易。
以下是引入容器化和容器编排作为技术战略的核心条款所能带来的好处。
你将能够轻松地优化你的IT基础设施成本
由于无缝扩展,你的用户可以期待更高的可用性和更好的服务水平协议
使用Kubernetes使你的团队更容易使用多云解决方案
由于容器和容器编排工具与技术无关,你可以使用任何你想要的技术来建立一个更精简的团队。
通过容器化, 你不再遇到 "它在我的机器上能用 "的 老问题了
在收购了一家金融科技初创公司后,西北互惠银行必须整合云原生和内部流程之间的工作流程,更频繁地进行部署,并统一其团队的操作,以确保他们的客户继续获得他们所习惯的无缝体验。
使用Kubernetes帮助他们将部署速度提高了25倍以上,从一年24次到10个月500次以上,计划内的中断已经成为过去,由于他们的API管理是部署在Kubernetes上的整体堆栈的一部分,基础设施成本大幅下降。你可以在案例研究中了解更多关于这些要点、向AWS的过渡、使用微服务、更新的开发者自主权,以及让他们的450万客户对其服务的质量和速度感到满意。在Capital One的案例中,底线是一个大话题。他们的估计显示,如果不使用K8s自动和轻松扩展的能力,他们的AWS基础设施成本将很容易增加两倍甚至四倍。
他们通过使用Kubernetes看到的其他好处是新产品的上市时间,现在只需2周,而以前可能需要3个月或更多的时间。开始关注Kubernetes开发的主要原因?Capital One的团队希望提高他们处理流数据的速度,以便在欺诈检测和信贷决策领域做出关键决策,以及处理对银行日常运营至关重要的其他大数据和机器学习应用。
你可以在案例研究中了解更多关于这些要点、部署速度的提高、K8s如何帮助统一Capital One的开发环境等等。
除了显而易见的好处外,我们将留给你一些案例研究,希望能给你带来启发,帮助你决定使用Kubernetes是否适合你,并展示更深入的好处。
缩短新功能的上市时间,将配置速度从几个月提高到几分钟,并确保一家为7500万用户服务的教育公司的高SLA。
在包括许多产品在内的复杂开发环境中,应用程序版本之间的停机时间为零,新的部署时间从几小时缩短到几秒钟,新的发布速度提高了3倍。
Zalando 这家欧洲时尚电子商务领导者使用K8s进行扩展,实现了多种业务用例,如当日交付、多租户、增加他们的产品和地理范围,并使他们能够重新编写和创建他们一直作为定制软件使用的所有SaaS产品。
Adidas 电子商务网站的加载时间减少了一半,每天发布多次,而不是每月一次,由于阿迪达斯转向云原生,开发人员的自主性大大增强。
◆ 4.当涉及到软件架构时,我们应该分而治之。
大尺寸的单体在某种程度上是一个昨天的故事。它们长期困扰着开发者,但现在不会了。将巨大的单元代码库分割成较小规模的应用程序是新的做事方式。它可以使你的应用程序防火,减少错误的频率,使应用程序在发生错误时更加安全。缺点是,应用程序变得更难测试,而且需要更多的资源来完成。对于规模较小的团队来说,维护一个单体机仍然更有意义。
将一个单体应用分成独立的微服务。
◆ 5.开源和自由软件是未来的方式。
React, Angular,以及Zuul,分别来自Meta(曾经是Facebook)、谷歌和Netflix,是无数开发者每天在工作中使用的工具。如果没有这些组织向所有愿意使用它们的人免费发布的工具,每个人的工作就会变得更加困难。无数的服务将不会出现在阳光下,因为编写这些应用程序太难或太耗时了。所有这些都是因为,在编写这些应用程序之前,人们必须弄清楚如何为规模编写前端,而不分享所学到的经验将是极其低效的。
这就是为什么我们必须赞扬开源和自由软件的维护者、创造者以及所有其他为创造和维护这种软件做出贡献的人。
创造一种工具/技术并使其开源(或使其免费)给组织带来永恒的荣耀。
◆ 6.使用架构模式。
在软件开发中,有一条常见的规则--不要重新发明车轮。由于知道我们很可能曾经面临过与别人相同的问题,这条规则就变得更加有价值了。这就是为什么世界各地的工程师和开发人员使用建筑模式来组织他们的项目--而不是浪费时间去思考如何找出别人已经想出的解决方案。
许多现代软件都使用CQRS和Event Sourcing等模式。不要重新发明轮子,使用这些模式。
◆ 7.编程语言在不断发展。
我们有越来越多新的编程语言的事实并不奇怪。它们都是来来去去,离开后又被其他语言取代。没有人再用Algol或Pascal编码了。然而,有一个老前辈,C,仍然存在,尽管这是一个值得单独探讨的话题。
一个值得注意的方面是它们多年来的演变方式。起初,命令式语言是唯一存在的语言。然后,面向对象的语言蓬勃发展,现在,有些人可能会争辩说,它们正被更灵活的语言所淘汰,这些语言混合了一些命令式、函数式和面向对象的特性。
语言的发展方式越来越独立于我们工作的系统,以及与之相关的系统。现代语言是跨平台的。由于DevOps的发展,语言的选择变得越来越不重要了。
◆ 8.由于现代基础设施的存在,复杂性正在从应用程序转移到外部平台。
在地下室的物理服务器上的传统基础设施被云供应商和相关技术所取代。我们有作为服务的虚拟机、作为服务的数据库和作为服务的许多其他信息元素。软件解决方案中的主要规划已经转移到了基础设施的高水平设计,因为很多东西可以在此基础上自动化。此外,我们还有容器和容器协调。它接管了复杂性,因为我们可以把系统分成更小、更简单的部分。
应用程序代码变得更加独立于平台。然而,其复杂性在于基础设施和运营。应用程序开发人员越来越专注于业务逻辑。DevOps工程师处理其余部分。
◆ 9.SCRUM != AGILE
采用特定的过程通常会导致学习行为,最终导致习惯。至少,这是它的理论。
然而,在某些情况下,过程仍然是过程,人们只是为了走过场而苦苦挣扎,但行为从未发展。这样想吧,你见过多少开发团队经历了所有的Scrum仪式,但实际上没有以敏捷的方式工作?太多了吗?我们同意。
那么你能做什么呢?首先,团队认同,这始终是需要建立的第一步。如果你的团队没有看到使用这种方法论工作的价值,那么所有的过程和仪式在长期内都不会有什么进展。
第二步是确保你有一个伟大的scrum master和项目经理,以确保良好的实践被传递下去,并确保任何反对意见被采纳。
第三步是认识到:当敏捷价值和Scrum框架没有任何价值时,将其强行灌输到人们的喉咙里,会让你很快就一无所获。我们已经在我们的文章中详细介绍了这一点以及更多的内容,标题为 “Scrum isn’t the answer for every IT project”.
SCRUM可以是敏捷的,但它并不能保证敏捷性。敏捷性来自于行为,而不仅仅是过程。
◆ 10.持续安全
正如我们之前多次写到的,安全不能是事后的想法。我们不能简单地 "留待以后"。"检查应用程序的安全问题必须被整合到DevOps流程中,并且从第一天起就被整合到开发流程本身。幸运的是,我们可以使用一些工具来使这个过程无摩擦。其中之一是 Snyk.它是一个全面的工具,可以 "发现并自动修复你的代码、开源依赖、容器和基础设施中的漏洞[...]。"
我们必须在开发周期中应用安全检查程序。安全是信任的基础--未来的货币。
◆ 11.审计云供应商的服务价格
由于三个主要的云计算供应商几乎不存在竞争,他们提供的服务的差异是(或多或少)任意的。在现实中,我们可能看到的唯一差异是服务价格的差异。这就是为什么,对这个特定的供应商有偏见并不一定是坏事。大多数情况下,确实没有什么区别。
选择你感到舒服的,并且已经了解的供应商。边走边评估,不要害怕改变。
云供应商没有虚拟竞争,没有成本套利。云基础设施的成本非常依赖于通货膨胀和经济衰退。
◆ 12.一切都可以 "作为服务 "来做。
平台即服务,基础设施即服务,数据库即服务,软件即服务,后端即服务......我们没有给你更多的例子,你应该明白我们的意思。你能想到的一切都可以由第三方完成并出售给你。
使用这些服务是一种权衡。你放弃了一些控制权,以便变得更精简,能够更快地进行迭代,并在前期节省一些资金。
由于云供应商和无服务器方法的重要性的增长,每一个软件都可以作为一个服务来完成。
◆ 13.每个人都在使用Visual Studio Code。
Visual Studio Code在全世界掀起了一场风暴。拥有微软的支持,拥有开源许可证,用TypeScript编写,并允许轻松扩展功能,这些都是伟大的决定。到目前为止,文本编辑器是现代程序员中最受欢迎的选择。其他选择,如基于Intellij的集成开发编辑器(IDE)或Vim,都在VS Code的阴影下,尽管 JetBrains’ Fleets可能会改变这种状况。
由于有多种扩展和定制工具,VS Code成为开发者中最受欢迎的IDE。
◆ 14.如今,TensorFlow被广泛使用。
TensorFlow,谷歌的机器学习框架在程序员中是一个非常受欢迎的选择。首先,它在GitHub的前20个最受欢迎的存储库里。然后,有多个端口。支持 JavaScript ,这些团队在他们的例如。React Native应用程序,或 web apps in React或任何其他 JS 框架。这提供了巨大的灵活性,并允许团队将解决方案嵌入许多解决方案中。
由于TensorFlow,我们可以在网络应用中实现AI解决方案。训练的模型是由库提供的。开发人员应该专注于训练它们。
◆ 15.一个很好的长期雇佣策略是雇佣年轻工程师并对他们进行培训。
雇用年轻工程师是一个良好的长期战略。虽然没有适合所有公司的 "最佳战略",但雇用年轻工程师并培训他们绝对是成长和保留内部人才的最佳方式之一。
雇用年轻人是一种很好的方式,可以随着时间的推移慢慢扩大你的团队,并建立一种内部文化,与雇用那些可能已经定型的人相比,更容易塑造。初中生还能提供一个新的视角,并更多地接触到当前的趋势。
在一些情况下,这并不理想,例如,当你的公司需要快速扩展和开发新功能时。如果你有一个小的内部团队,由于不现实的开发期望,他们总是试图赶上他们的积压工作,这也不是最好的。
雇用年轻工程师培训他们的策略并不是没有陷阱的。在你的团队中的初级员工没有经过以前公司的审查,他们没有工作经历,而且很可能是一击即中。不幸的现实是,虽然这种策略在适当的补偿方案下可以很好,但初级雇员可能会发现自己的位置,他们只需转移公司,而不是等待或推动晋升或加薪,就可以使自己的工资翻倍、三倍甚至四倍。
这就是为什么要有透明的工资和薪资表,向人们展示他们在职业道路上的发展方向和方式。这就是为什么拥有优秀的入职培训计划也非常重要,以确保花在培训后辈上的时间得到很好的利用,并使导师和学员都受益。
根据许多研究,对软件开发人员来说,一个很好的长期雇用做法是雇用没有经验的工程师,并对他们进行培训,让他们了解组织的方式。
这就是了。2022年最有影响的15个趋势。在你看来,哪一个是最有影响的?我们错过了什么吗?请告诉我们。