跨平台开发成本高,我们宁愿编写两次代码
极客时间编辑部
讲述:初明明大小:4.50M时长:04:55
直到最近,Dropbox 都在使用一个通过 C++ 在 iOS 和 Android 之间共享代码的移动技术策略。这个策略背后的想法很简单:用 C++ 编写一次代码,而不是用 Java 和 Objective C 编写两次代码。现在,Dropbox 已经完全放弃了这个策略,转而使用每个平台的原生语言。这个决定是由于与代码共享相关的隐藏成本太高,比只编写两次代码的开销要多得多。Dropbox 将这些开销分为四大类,以下为 Dropbox 的观点。
1. 自定义框架和库的开销
关于使用 C++,最容易预见的开销是需要构建框架和库。首先,框架让我们可以与主机环境交互,构建一个功能齐全的移动应用程序。其次,这些库将取代我们本可以在平台原生语言中使用的默认语言 / 开源标准。
注意,与 Python 或 C# 等其他可能的非原生语言相比,这些成本在 C++ 中特别高,因为它缺少一个功能齐全的标准库。虽说如此,C/C++ 是唯一一种编译器同时受到谷歌和苹果支持的语言,因此,使用另一种语言将会产生一系列其他需要处理的问题。
2. 自定义开发环境的开销
移动生态系统有许多工具可用来提高开发效率。移动 IDE 非常丰富,谷歌和苹果投入了大量的资源,力争在各自的平台上为开发人员提供最佳的开发体验。我们远离了这些平台的默认选项,也就放弃了其中的一些好处。最值得注意的是,使用平台原生语言的调试体验通常优于在平台默认 IDE 中使用 C++ 代码的调试体验。
在自定义开发环境中,我们必须投入时间构建支持 C++ 代码共享的工具。最重要的是,我们需要一个定制的构建系统,它创建了包含 C++ 代码以及 Java 和 Objective-C 封装器的库,并且能够生成 Xcodebuild 和 Gradle 都能识别的目标文件。这个系统对我们的资源是一个很大的拖累,因为它需要不断地更新以支持两个构建系统中的更改。
3. 处理不同平台差异的开销
尽管 iOS 和 Android 应用程序都是“移动应用程序”,通常都具有相同的特性和功能,但平台本身存在一些影响实现的差异。即使在我们开始采用跨平台策略时非常相似的东西,随着时间的推移也会产生很大的差异(例如,与相机相册的交互)。
因此,你甚至不能真正地编写一次代码就在不同的平台上运行。你必须花费大量的时间将代码集成到不同的平台中,并编写特定于平台的代码,而有时这些代码就位于 C++ 层本身,这使得只编写一次代码理论上的好处没有达到预期的效果。
4. 培训、招聘和留住开发人员的开销
最后,但同样重要的是培训或招聘那些将在我们定制程度非常高的技术栈上进行开发的人员的成本。当 Dropbox 开始采用这种移动策略时,我们有一个由经验丰富的 C++ 开发人员组成的核心团队,这个小组启动了 C++ 项目,并在 Dropbox 培训其他移动开发者如何为代码库做贡献。
随着时间的推移,这些开发人员转向其他团队和其他公司,留下来的工程师没有足够的经验来填补技术领导的空缺,并且越来越难招聘到具有相关 C++ 经验、对移动开发感兴趣的高级工程师来替代他们。
因此,我们最终失去了维护 C++ 代码库的关键专业知识。重新获得这种专业知识的方法是,要么寻找并招聘具备这种特殊技能的求职者,我们曾尝试招聘这个职位超过一年,但没有成功;要么针对内部移动(或 C++)工程师缺少的技能集对他们进行培训,当你没有具备该技能集的人员来执行培训时,这实际上是不可能做到的。即使在核心团队离开之前,移动工程师通常也对学习 C++ 不感兴趣,所以找人来接受培训也是一个大问题。
除了招聘问题,我们自己的技术栈也导致留住开发人员成为一个问题——移动开发者根本不想从事 C++ 项目开发。这导致许多有才华的移动工程师离开了这个项目,而不是费力地使用一个维护得不是很好的自定义技术栈。
所以,尽管编写一次代码听起来很划算,但是相关的开销使这种方法的成本超过了所能获得的好处。最后,我们不再通过 C++(或任何其他非标准方式)共享移动代码,而是用平台的原生语言编写代码。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- 李亚洲当初可不是这么说的。开始时的优势全部成了结束的理由,不值得反思吗
- 包罗万象C++开发不好招也是一个大问题
收起评论