赞
踩
C++ 开发走过了漫长的岁月。尽管新的语言不停涌现,还是丝毫没有动摇这个跨平台语言的影响力,C++ 赋予了开发者对系统资源和内存最大程度的控制能力。不过,C++ 开发也有其不足之处。本文将详述 C++ 开发人员与我们的产品专家分享的一些痛点,同时也推荐了一些行之有效的应对方法。
在涉及到实现第三方解决方案,或尝试一项新技术时,C++ 程序员通常是积极的决策者。他们一般在具有一定计算能力的计算机或笔记本上工作,也有一些不能经常享受一流的 DevOps 管道工具等问题。
以下是八个 C++ 开发的主要痛点:
构建和编译速度估计是现在最常听到开发人员抱怨的问题了。构建缓慢,也意味着开发者有更多喝咖啡、闲聊的时间,或者因为上下文切换(Context Switching)导致工作质量降低。构建缓本质上也会导致迭代频率降低。
C++17/ C++20 针对提升生产力作了一些改变,但并不表示可以缩减编译时间。在这一点上,模板文件就是一个例子,它们反倒延长了编译时间。C++ 组件应该可以大幅减少编译时间,但是需要花费时间进行迁移。
C++ 大概是最受欢迎的全栈语言,也是一个复杂的语言。C++ 能直接支持高级类类型(Higher Kinded Types)、维度分析(例如 Boost 单元)以及其他的功能范例。在 C++17 还包含了标准库以帮助查找 CPU 缓存行大小。
所以,这也难怪很多相对高级的开发者依然在学习隐藏功能,试图探索优化开发的新方式。
DevOps 有四大基础支柱:持续集成,持续测试,持续交付,持续监控,以此加强可视化操作,随时洞察执行情况。然而,当进程速度缓慢时,经常会产生服务器故障或其他管道并发症。
更为糟糕的是,如果迭代和发布缓慢进行,测试也会相应减少。工作会越来越复杂,开发者需要找到出错点,这在 C++ 中更为困难。而一个小小的代码错误可能在之后的管道中引发一系列问题。
因为无法手动定位代码错误,最终可能导致团队间的冲突,或不同员工的沟通问题。
C++ 缺少补充工具。以依赖关系为例,JavaScript 的程序员可以使用 NPM,或选择其他工具。Java 的开发者广泛使用 MAVEN. 但在 C++,主流上没有可信赖的工具可供使用。
也有一些有效的解决方案,但是需要每天地进行维护,这让开发人员慢慢地失去了兴趣。另外,还要考虑到这些解决方案需要进行培训或新员工培训,这些培训更是一种多余的压力和麻烦。开发者不开心=结果糟糕。
正如上面所描述的,低效和不恰当的开发进程最终导致缺陷产品,而这些缺陷产品的发布往往是因为时间紧迫。已经发布的产品需要进一步打补丁或修复(开发者的附加工作),这种情况在各个部门越发地常见了。
CISQ 的一项调查发现,在 2018 年,因为劣质软件导致美国公司的损失高达 2.8 万亿美元,其中 18.22% 仅由技术问题造成。
最理想的情况是,C++ 开发者快速测试、快速得出结果,进而实现快速迭代。这种方式有利于开发者及时进行修复,缩减开发时间,最终高效地将产品推向市场,同时帮助更好地计划和产品设计。但现实往往不如人愿。
构建时间漫长导致迭代减少,这也意味着测试将减少(不稳定测试减少,测试的覆盖范围缩小),或是市场发布的时间延长(如果所有测试都合理且缓慢地开展了)。更糟的是,现存的或遗留项目组中的单元测试开展更为艰难。
典型的开发管道一般包含上千个代码行(LoCs),这些代码有时甚至会压倒强大的个人工作站。这类的机器阻塞问题可以通过本地网络的空闲 CPU 解决,同时避免以任何方式或形式损害其他机器的性能。
毫不夸张,就算事先进行过容量计算,庞大的构建和编译也可能导致开发者机器宕机。除了要应对日常的消极情绪,开发者还要跟 IT 经理打交道,但这些问题 IT 经理通常也无力应对。
前期产品设计和计划,对整个开发生命周期影响重大。如果在产品交付的最后一刻,所有的工作人员都在手忙脚乱地控制破损或修复缺陷,那么他们就很少有时间去收集有效的数据,也无法专心致志地提高产品质量。
解决上述痛点问题有许多方法,下面列举了使用最频繁、最有效的3种方法。
1 – 在代码旁标注通俗易懂的注释
如前所述,用 C++ 编码较为复杂。而且项目的开发通常需要多个团队远程协作,编写数千个代码行,要让大家准确理解工作进展都会变得尤为困难。因此,注释是用“高级”的英语词句描述程序开发目标的一门“艺术”。
注释的撰写最好在实际编写 C++ 代码之前,用一些“高水平”的说明解释程序的进展,切记不要重复一些显而易见的事情。通过一些合适、多样的名称进行说明,大部分程序都可以像普通语言一样通俗易懂。
尤其在项目重新开放,或者新的开发人员需要熟悉产品时,注释的作用就很大了。
2 – 使用自动化的 DevOps 管道
简而言之,自动化驱动创新,也让 C++ 开发者更能集中精力享受编写代码或创建功能分支的工作。自动化和编制正成为现代开发管道不可分割的一部分,这并非只是巧合。
高速开发并不意味着服务器瓶颈或其他管道并发症已经根除了。不过,在更高水平测试和代码分析的辅助下,新增的 DevOps 问题,如配置漂移、意外覆盖和团队冲突,也变得更容易察觉和处理。
3 – 创建一个加速开发周期
即插即用的分布式进程处理方案,例如 Incredibuild,充分利用了本地网络或公有云中的闲置 CPU,将每一个工作站转换为拥有数百个内核的超级计算机,加速任务执行。同时,Incredibuild 的低维护也大幅减少了 IT 管理成本。
使用 Incredibuild 让整个项目开发都受益不浅,具体包括:
C++ 开发实现可视化和透明化,如今已不再是天方夜谭。我们可以深入开发管道内部,观察、分析、监控构建进程,找出错误、瓶颈,实时解决问题,优化产品质量。
此外,尽管拥挤的高峰时段和紧迫的截止日期可能对 IT 基础架构要求较高,但现在,我们可以充分利用公共云中的数千个内核和机器来加速开发,甚至让多个团队远程协作同一个项目。
虽然本文提到的痛点依旧常见,但有了这些解决方案,它们将不再成为你的日常困扰。
点击了解 Incredibuild 加速 C/C++ 构建编译的解决方案,并获取试用 License!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。