对于企业来说,效率就是一切。开发效率的工程化建设已经开始被各大企业提到技术管理日程中。而且现阶段,无论是框架也好、模板也好,目的都是在为提升代码开发效率而努力。随着云计算的深入,端 + 云的开发模式以及完全云端化的开发模式都先后上线,这些无疑都是在对传统 IDE 开发模式的挑战。云端 IDE,会是未来的趋势吗?
云时代下,万物上云正在影响企业研发效率工程化建设
万物上云,可以说已经是不可逆的大趋势。对于企业来说,只要可以提升业务交易额、降低成本、提升收益,业务是放在本地还是云端都无所谓。但是在当前快节奏的背景下,效率就是企业的一切,企业更加关注如何更加快速、高效、敏捷地提升企业交付效率与降低运维成本,这也是为什么现如今企业研发效率的工程化建设已经被越来越多的企业提上了日程。
业务上云后,可以显著提升企业的交付效率并降低运维成本,这是已经被实践所证明过的。因此当企业从原来的技术架构中切换或建设不同的云计算服务时,都会对工程效率产生影响,而受这部分影响的最直接人群就是相关业务线下的一线开发者。理念的变化与架构的调整,都使得这群开发者感觉越来越“不舒服”。
近年来,DevOps、敏捷交付等旨在提升业务研发效率的体系不断被更多人所接纳。但是理念很好,落地在实践中却往往是另一回事。对此,InfoQ 采访了华为公司主任工程师、持续交付项目总架构师赵彦,从华为的一系列实践举措中,为大家总结如何实现研发体系的高效化。
赵彦认为,先进的理念往往需要配套同等理念的工具来并行,这样才能更好地支撑 DevOps 或敏捷开发的理念落地。同时,因为现在是一个知识爆炸的时代,对于企业和个人来说都要求站在巨人的肩膀上不断进行快速创新。那么能否进行快速创新,实际上已经成为了决定企业生存的关键因素,因此敏捷交付也被越来越多的企业提上了内部体系改造的行动表上。并且在内部体系优化改造的过程中,随着业务竞争加剧和技术进步,越来越多的企业将研发能力定位为其核心竞争力之一,开发者作为研发能力的核心代表,其自然也成为了受“影响”的对象。
云时代的大趋势对于开发者有怎样的影响?
赵彦认为,企业业务上云已经成为必然的趋势。在这种趋势下,对于普通开发者来说,他们的研发方式包括工作习惯都在不经意间产生了很大的变化,总结起来有以下 4 点:
- 交付对象发生了变化,原来交付的是单体软件,交付之后的运维是由第三方或者客户自己来负责。而现在提供给用户的是一个云端的服务,表明交付对象由单体软件变更为云端线上服务。
- 服务架构发生了变化,因为不再是单体软件,所以目前对于操作系统的依赖不会特别强。但是由于很多应用都是跨平台的,用户更多地会依赖移动端或者是通过便携式设备来访问服务,因此整个服务架构都在向着云原生的架构变化。
- 交付频率发生了变化,以前的交付是大颗粒度且有明确固定的交付日期和规律,然而现在线上的问题会瞬间反馈回来,业务要求后台必须要加速交付的节奏,因此就要在最短的时间内响应市场的变化,导致交付的上线次数更多、迭代周期更短、要求的质量更高。
- 交付模式发生了变化,现在提供给用户的不再是一款产品,而是一个服务,这个服务的最终目标就是要让用户满意。用户在实际使用过程中的需求和任何反馈都是产品不断进行快速迭代的根本性因素。在这种条件下,现在的交付模式基本上是“定义原型 - 产品上线 - 用户反馈”这样的节奏来实现快速的特性迭代。把最受用户欢迎的功能优先迭代上线,通过运维系统反馈回来的数据,观察所交付功能与预期价值是否匹配,反过来再修正商业目标与交付计划,从而形成一个闭环。如果说原来团队所走的是从 1 到 100 米的直线,那么现在就是不停的在跑圈,并且每一圈的速度会不断加快。
改变低效的现状根源要从 IDE 工具开始
不可能啊,我测试的时候好使啊!
让我们先回顾一下 IDE 工具的历史,最早大家写代码的时候其实是很简单的文本编译器,先把文本写成代码文件再拿去构建或编译,然后再通过输出日志来查看结果是否正确。
但是这种方式太过低效,所以就把调试、运行、引入第三方功能等各种各样的能力集成到编译器中去,就形成了各种各样的代码编译器。就像最常见的 Visual Studio Code 这种经过多年发展的大型 IDE 环境,其功能已经非常完整,并已经形成了非常成熟的自有开发生态。
但生态的成熟往往会带来一个问题,就是对于开发者来说这个环境太重了,且非常依赖于本地的资源系统。众所周知本地 IDE 在运行时会占用大量的系统资源,对于机器的配置要求较高,且对于移动化办公非常不友好。
在当前这种要求效率的开发环境下,尤其是在强调“团队效益”至上的企业文化中,往往需要将个别优秀程序员在业务中的成功实践当做案例来分享给团队。但是在这种相对独立的开发环境,个人的成功很难复制到整个团队中,很难做到研发分享流程的标准化。并且由于每个人都在独立的环境下进行代码编写,每个人的环境配置都不尽相同,很有可能导致两边运行的效果出现较大差异。这也是为什么很多程序员都会说:“不可能啊,我测试的时候好使啊!”
在全业务上云的当下,本地 IDE 环境在对接云端时往往出现连接缝隙,这是因为本地到云端会面临大量的如鉴权、网络稳定性等问题,所以在和云端应用或业务配合开发的时候,无法将本地 IDE 环境的效能与云端的优势发挥的最大化。
云端 IDE 如何改变开发者的使用习惯?
尽管“云正在吞噬世界”已经喊了很多年了,但开发者仍然是习惯于本地的 IDE 环境,这个多年来的习惯是很难改变的,作为华为云在云端开发环境的全新探索, CloudIDE 将如何改变用户的开发习惯呢?
赵彦认为,想改变这种习惯就要先接纳这种习惯。之所以 CloudIDE “长成”现在这个样子,是经过大量的市场调研后发现 Visual Studio Code 这款工具是最受开发者欢迎的开发工具,所以华为云 CloudIDE 在使用体验、操作体验方面都选择向 Visual Studio Code 靠拢。
这种好处就是用户从现有的本地 IDE 环境迁移到云端 CloudIDE 后,不会因为环境的改变而造成学习成本的上升;此外 CloudIDE 内置了标准化的技术栈,比如说开发 Java,半分钟之内就能得到一个 Java 的开发环境,且里面已经内置了 Java 所需的 SDK;最后用户在创建环境的时候,基于 CodeHub 的代码模板所提供给开发者样例工程,可以让开发者的开发不会从 0 开始,而是通过现有的知识积累,从 80% 开始自己的创新。
针对本地 IDE 来说,提供移动、跨设备式接入,也就是说不管用的是 PC、笔记本还是 pad,只要有输入输出设备,只要能够连接网络,都可以接入进来进行开发。
这就是云端 CloudIDE 目前所做的一些努力。
当然就目前来说,云端 IDE 相较于本地 IDE 仍存在一些不足
但是这都是可以通过技术发展去弥补的。
相较于本地 IDE 非常丰富的研发生态和极其优质的开发体验,云端 IDE 还是存在一些不足的,主要体现在开发体验层面,主要有以下几点因素:
- 浏览器因素,访问云端 IDE 环境是一定要用到浏览器的,而浏览器本身就是一个应用,自身本就会侵占部分的快捷方式,可能会屏蔽部分用户的输入,从而造成在代码编写过程中某些快捷键失灵的情况。
- 延迟因素,本地 IDE 编译器都有相应的代码补全机制,本地 IDE 只要电脑不卡就可以实现急速响应。但是如果这种机制放在云端的话就需要前后台的配合,通过后台提供服务才能响应,这就会存在一定的延迟。
- 网络因素,目前云端 IDE 必须线上才能使用,不支持离线编码,因为程序员在进行开发的时候需要云端容器来分配资源,访问的时候也需要访问如插件拓展等大量针对编程语言的特定服务,这个过程中,网络是必不可少的。
- 安全因素,很多开发者不放心将代码放到云上原因之一,很大一部分是担心云端的可用性、代码安全性、断连后能否恢复等机制是否健全的问题。云端服务的可用性是最基本要求,如果可用性不高,会降低用户的安全感,会造成用户一些诸如“在云端数据会不会丢失”等顾虑。针对这种情况 CloudIDE 做了很多优化,比如把服务专门迁移到华为云 CCE 集群服务上以此来提升服务的安全性与稳定性;对服务的容器做了严格权限控制,把开发者的高阶 Root 权限全部回收的同时,为了保证开发者能够在这种等级的权限下开展研发活动,后台做了很多的优化和配置,从而能够让开发者在受限的权限内使用容器环境。
所以说,目前用户不想迁移到 CloudIDE 上,主要是因为体验方面的原因。但是从长期来看,这种体验上的差距会通过不断的技术创新以及未来的全新的网络接入方式所慢慢的弥补。
CloudIDE 代表着未来,其已经广泛应用在了各种创新场景下
移动创新场景,CloudIDE 只是华为云 DevCloud 实现云端全流程开发中的一部分,CloudIDE 通过与 CodeHub 代码托管服务相结合,在通过 CloudIDE 服务创建共创空间时,可以直接引入 CodeHub 中的代码模板来直接创建实例,从而让开发者能够在极短的时间内形成样例代码,加快了开发者尝试新功能的效率;此外开发者应该都会感同身受,做开发也是需要灵感的,有时候这种灵感稍纵即逝,因此就需要实时的移动化办公来支持这种需求。通过 CloudIDE 即可通过一台轻量化的办公笔记本,甚至一部可以联网的智能手机就可以实现在云端的代码作业(当然,移动端的输入方式等目前暂不做讨论。),真正实现了移动化办公,不再局限在办公区域。
轻量化开发场景,这一块场景主要针对于微服务和云原生领域,因为微服务本身的代码量较小所以不会出现重载的情况,同时 CloudIDE 提供了多种内置技术栈,正好适应了微服务开发这种强调服务独立交付、独立运营的特点,所以用户在 CloudIDE 上开发微服务之后,可以快速的将应用推送到云端代码仓库,继续进行自己的微服务交付,保证 DevOps 的交付体验;此外通过 CloudIDE 服务配合 DevCloud 的其它服务工具链,可以让用户在开发完服务代码之后直接推送到云端仓库并拉起业务流水线,实现 CI、CD 的持续集成与敏捷交付能力。
教育培训场景,因为 CloudIDE 是活跃在云端的一款 IDE 工具,可以有效支持大规模并发和环境标准化能力,在大规模学生上课、考试的场景下可以通过 CloudIDE 来快速创建课堂或考场。并且在使用完毕后可以实现资源的快速释放,有效降低教育培训的成本,提高教育的效率和质量。
速度、成本与可用性对于开发者的重要性
速度、成本和可用性一直都是开发者最关注的三个因素,围绕这三个因素,也是未来云端 IDE 的重点发力方向。
- 成本的降低,开发者经常会问到这种开发的收费模式是怎样的,会与现阶段所应用的本地 IDE 环境成本进行比较。云端 IDE 环境既然在云上,其价格同云计算的收费形式类类似,都是按需收费的弹性制,与本地 IDE 相比的花费成本肯定是更低的。另外赵彦提到,随着技术的发展,云端 IDE 基座的稳定,成本只会进一步压缩,用户将会以更低廉的价格来体验云端代码服务。
- 秒级启动,目前 CloudIDE 冷启动的速度是在 40s 左右,在特定的场景下可以达到 15s。但是这种速度相较于本地 IDE 来说肯定是处于劣势的。因此未来将会努力实现秒级的冷启动,使云端加载速度能够更快。
- 交付体验的完善,分别为急速响应体验的优化与输入方式体验的提升。比如上文所提到的用手机来进行开发,但是对于移动端来说输入方式一直是个令人头疼的问题,那么未来能否通过语音或更好的方式来改善开发者在移动端输入代码的体验,这也将是未来的一个发展方向。
- AI 辅助功能,在使用本地 IDE 环境进行开发时,会经常用到本地 IDE 的代码补全机制。在云端开发同样也要如此且不限于如此。当开发者在开发应用时,很难保证其知识储备是齐全的。通过人工智能或后台大数据分析等各种科学的方法,向开发者快速推荐代码片段甚至是引导开发者使用现有的知识体系来进行开发,这对开发者来说会是一个非常大的助力。
- 插件生态的完善,相较于本地 IDE,云端 IDE 的插件生态还不是特别完善,且目前能对接到的服务相当有限,尤其是在用户将业务对接到云端 IDE 平台上后,会有大量对接第三方资源库方面的需求,因此上线及丰富插件市场将会是未来云端 IDE 的重点发展方向之一。
云端 IDE 对于企业和开发者,究竟有着怎样的价值?
古人说过一句话,工欲善其事必先利其器,想要落地先进的理念必须要有相配套的工具。从研发效率提升的角度来看,IDE 环境的变更只是其中的一个环节,从工程效率的提升来说,则是开发者从内心到接受工具变化的整个过程。
具体来说,赵彦老师总结了以下 3 点:
- 首先具体到每一名开发者,要有开放合作的心态,愿意接受先进技术所带来的有益变化,愿意将自己的资源放在云端,愿意通过知识共享来获得研发效率的提升;
- 其次企业要具备快速创新的能力和意愿,因为企业在竞争中要生存下来,依靠的不仅仅是效率,更是需要在商业层面的快速创新,只有拥有了在特定场景下更好的创新能力,才能实现更快速的创新。因此更需要一套理论结合实践的工具来做支撑,以保证在业务快速迭代的云时代下能够让研发体系向着敏捷的方向发展。
- 最后从开发者的角度来看,云端 IDE 能够让研发工作始于 80%,而不是从 0 开始。对于开发者来说,最讨厌的事情就是“纠结”,但是往往这种情绪是伴随整个研发过程的。从最开始采用怎样的语言和框架就已经开始,涉及到业务后这种纠结只会越来越多,整个纠结的过程只会让研发效率越来越慢。云端 IDE 通过与云端实例相连,在 CloudIDE 引入新项目时本身就有很多成功的样例可以参考,可以直接在前人的基础上开始做。不用担心环境配置问题,也不用纠结技术栈框架问题,从而使开发者可以集中精力来进行关键功能的开发,这是云端 IDE 对于开发者来说最主要的价值所在。
写在最后
云计算正在吞噬万物,这并不是一句空话。在 2019 年,传统企业纷纷上云,互联网企业纷纷在云原生领域开始落地,万物上云不再是一个愿望,而是一个正在加速实现的现实。从业务上云到流程上云到管理上云,再到如今将最根本的代码编写流程搬到云端,业务全流程上云已经是不可逆的趋势,也将是未来发展主流。华为云 CloudIDE 将在这条路上积极探索,开拓云计算时代下的高效研发新方向。