前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么不会 C++ 不能算合格的专家程序员?

为什么不会 C++ 不能算合格的专家程序员?

作者头像
开发者技术前线
发布于 2022-05-24 03:46:36
发布于 2022-05-24 03:46:36
6660
举报

作者 | Shalitha Suranga AI前线

译者 | 平川

策划 | 闫园园

本文最初发布于 Level Up Coding 博客。

1掌握 C++ 可不容易,但一旦你掌握了,就会获得丰厚的回报。

通常,程序员在他们的编程生涯中会使用多种编程语言。然而,我们也看到,有些程序员一直在使用同一种编程语言。例如,我们经常遇到有几十年经验的 Java 专家和 C# 专家。但是,学习多种语言会使你在软件开发生涯中更加自信和娴熟。例如,如果你掌握了 Go 语言,你就会了解几个令人印象深刻的语言设计概念,提高自己的通用编程技能。

学习 Python 也很好,因为我们可以用 Python 知识来编写任何自动化脚本,而且很有成效。学习一种新的编程语言无疑会给我们带来独特的经验和新的技术专长。与其他流行的编程语言相比,C++ 语言能带给我们许多好处。与其他现代语言不同,学习 C++ 确实不容易,很费时间。因此,现在大多数程序员都跳过了 C++ 的学习,并且更喜欢那些提供更抽象的开发环境的现代语言。

我将解释一下,为什么学习 C++ 是所有努力成为编程专家的程序员的必修课。

2C++ 激励你学习计算机科学基础知识

每一个技术上合理的软件程序背后,都可以找出几个核心的计算机科学理论。例如,Git 程序使用了图论、散列和许多基本的计算机科学算法。例如,以下是 Git 代码库中的合并排序实现:

Git 中的合并排序实现,作者截图

如今,每个商业实体通常都会向云计算生态系统发展,并努力实现业务流程的自动化。因此,现在大多数程序员通过编程解决商业问题,而不是与计算机科学相关的问题。

但是,即使是从事面向商业的软件开发项目,他们也经常要运用计算机科学理论来编写更好的代码,使软件更有效率。因此,对每个程序员来说,计算机科学理论知识都是必不可少的。

毫无疑问,C++ 是一种高级语言,它提供了比 C 语言更高级、对人更友好的抽象。但是,C++ 鼓励人们像 C 语言一样使用指针和手动管理内存。另外,C++ 标准库的设计注重计算机科学概念、性能和灵活性,而不是仅仅注重开发的便利性。因此,当你学习 C++ 时,会无意中学习到计算机科学的基础知识。

3使用 C++ 构建轻量级、高性能、简单的解决方案

大多数现代编程语言专注于用类似伪代码的语法来隐藏底层技术细节,而在性能、轻量化和灵活性方面考虑不多。但是,C++ 仍然可以生成轻量级的二进制文件,是编写性能优先的软件系统的最佳选择。

像 Golang 这样符合现代潮流的编程语言,通过提供类似 C 语言的最小语法和自动内存管理(通过垃圾收集)与 C++ 竞争。但是,Go 会生成很大的二进制文件,所以它不适合于轻量级的场景。这就是为什么大多数程序员使用 Go 来构建高性能的云工具,因为对云环境来说,二进制文件的大小并不是问题。在高性能、轻量级的软件开发方面,程序员仍然喜欢用 C++ 而不是 Go。

Go 通常是静态链接标准库实现,当我们导入 fmt 时,它会将一个 1.2MB 的 Go 最小二进制文件增加到 1.8MB。C++ 通常是动态链接,当我们包含 iostream 时,它会将一个 16.5KB 的最小二进制文件增加到 17.3KB。在 GNU/Linux 平台上,Go 二进制文件大小增加了 50%,而 C++ 二进制文件大小增加了不到 5%。

上述简单的实验证明,C++ 更适合于高性能、轻量级的软件开发。C++ 是一种复杂的全加载语言,但通过选择自己偏好的特性,你仍然可以编写出最小的代码。下面这篇文章将帮助你练习用任何编程语言编写最小的代码:帮助你编出更好代码的 5 个编程原则。

4C++ 技巧能让你更快地学习其他编程

语言程序员根据自己的喜好学习各种编程语言。有些程序员在开始从事企业级软件开发项目时学习编程语言。同时,有些程序员倾向于把学习编程语言作为一种业余爱好。有些语言很容易掌握,有些则需要不断的试验来获得进一步的经验。

由于复杂的语法(C++ 有 60 个关键词)、多功能的标准库、面向硬件的开发环境以及鲜为人知的最佳实践,C++ 需要更多的时间来获得专业工作经验。C++ 是一种多范式、多功能的编程语言。换句话说,你可以在用 C++ 编写代码时制定自己的编程风格和最佳实践。

学习 C++ 标准库和开发模式需要扎实的计算机科学知识和技术能力。因此,当你精通 C++ 时,学习一门新语言就是小菜一碟。

5与操作系统 API 交互的最佳语言

每个操作系统都为开发者提供了一个可编程接口,用于处理操作系统级的操作,如进程管理、文件处理、GUI 渲染和网络请求处理(通过套接字)。所有这些 API 都暴露了基于 C/C++ 的接口,因为每个操作系统都是用 C/C++ 编写的。

GNU/Linux 系统以 C 语言头文件的形式提供 Unix 风格的 API 和 GTK GUI 库。MacOS 也提供 Objective-C 接口,我们可以通过 Apple Clang LLVM 编译器来使用。因此,我们可以用 C++ 直接访问任何操作系统级的 API,因为 C++ 是 C 的超集,而且苹果编译器允许开发者混合使用 C++ 和 Objective-C。例如,请看 Electron 如何在 C++ 源文件中使用 GTK C 头文件:

Electron 中的文件选择对话框源代码,作者截图

另一方面,其他所有的编程语言都需要特定语言的绑定来访问操作系统的 API。由于这个原因,几乎所有的操作系统级框架都是用 C++ 编写的。看看下面这些基于 C++ 的框架:

  • Electron
  • React Native
  • Flutter
  • Neutralinojs

另外,像 Chromium、Firefox、Tensorflow、LLVM 和 V8 这样的大型软件项目也使用 C++ 作为主要的开发语言。

6C++ 知识有助于你做出更好的技术决策

程序员不仅按照规范编写代码,他们还设计软件系统及组织项目结构。设计阶段在软件开发中非常重要,因为它为整个软件系统奠定了基础。我们经常要在设计阶段和开发阶段做出技术决策。

C++ 是一种复杂的语言——你有许多方法来解决同一个编程问题。另外,C++ 被设计成一门速度很快的语言,但让程序员可以充分控制程序的执行,按照自己的意愿优化代码。因此,你需要谨慎地作出技术决策,根据自己的偏好,为自己的需求选择最佳的 C++ 特性。

C++ 是一种多范式语言,尽管大家都知道它是一种基于 OOP 的语言。一些程序员使用 C++ 编程时会采用传统的 OOP 范式。同时,有些程序员使用 C++ 编程时会采用过程以及函数编程范式。有时,我们经常不得不避免使用一些 C++ 特性,以便简化我们的源代码。例如,谷歌的 C++ 风格指南建议不要使用 C++ 异常。所有这些情况都能提高我们的技术决策能力。

7小结

我们已经讨论了在编程生涯中学习 C++ 的好处。目前有二十多种稳定的、功能齐全的、流行的编程语言。没有一种编程语言被称为“最好的编程语言”——每一种编程语言都在特定领域有着良好的表现。因此,学习五种自己喜欢的、精心挑选的编程语言,并称它们为“我最好的编程语言”,是一个明智的决定。

如果你仔细挑选五种编程语言,从各方面进行考虑——毫无疑问,C/C++ 也会在你的名单上。我在这篇文章里介绍了我最喜欢的编程语言:每位开发人员都应该学习的 5 种编程语言。

学习 C++ 而不学习 C,就像学习 React.js 应用开发而不试验原生 JavaScript 和 DOM 一样——所以,先学习 C,然后进一步学习 C++,可以为你的编程生涯带来上面所有的好处。

感谢您的阅读,采访下?你用什么语言呢?

查看英文原文:

https://levelup.gitconnected.com/why-every-programmer-should-learn-c-during-their-careers-959e1bc2ea68

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发者技术前线 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
How Do You Test AI Systems?--你如何测试AI系统
RonSchmelzerContributor(Ron SchmelzerContributor公司)
顾翔
2020/05/20
7110
ML Ops:数据质量是关键
ML Ops 的发展弥补了机器学习与传统软件工程之间的差距,而数据质量是 ML Ops 工作流的关键,可以加速数据团队,并维护对数据的信任。
机器之心
2020/10/27
8580
ML Ops:数据质量是关键
别掉队!2020年将出现的7种新兴自动化Web测试趋势,你知道吗?
在最近几年中,技术以多种形式发展。从开发到测试再到持续交付,我们已经看到了IT行业的许多变化。但是,软件测试过程遇到了最积极的变化,特别是在测试过程中引入自动化之后,测试人员可以轻松便捷地测试Web应用程序或网站。
小小科
2020/06/10
6500
质量保障的方法和实践
传统的质量保证通常需要在进行任何测试之前进行大量的准备工作和脚本编写。这导致在接近deadline日期时发现软件中的更多错误。从敏捷测试开始,更多的质量保证涉及自动化测试和持续集成。这种方法在软件开发周期开始时就发现了大多数错误,并随着周期的进行进行了修复。达到减少了在项目结束时需要解决的错误的目的,从而可以无缝、轻松地交付。
FunTester
2020/09/08
5510
面向AI应用的测试思考
“ 人工智能(AI)已无处不在,AI正在为各行各业赋能,并以前所未有的速度全方位地改变着我们的生活。然而,由于AI是一种新的编程范式,无论在学术界还是工业界,对于AI测试的研究和实践尚处于起步阶段。”
Criss@陈磊
2020/09/08
1.6K0
MLOps:构建生产机器学习系统的最佳实践
你可能已经听过很多次了,但只有一小部分机器学习模型投入生产。部署和运行机器学习模型对于大多数已经开始将ML应用于用例的行业来说都是一个挑战。在这篇文章中,我将分享一些MLOps的最佳实践和技巧,它们将允许您在生产环境中使用您的ML模型并正确地操作它。在我们开始之前,让我们讨论一下我们可能都知道的典型的ML项目生命周期。
deephub
2021/04/16
1.3K0
软件测试:概念篇
目的:验证软件有或没有问题。 原则:以客户为中心,遵循软件测试的规范、流程、标准和要求。
测试开发社区
2019/09/20
7530
软件测试:概念篇
算法工程师的日常工作内容?你想知道的可能都在这里
有很多小伙伴可能都对未来的工作内容有所好奇,不知道所谓的算法工程师到底日常在做什么,而我以后能不能胜任?
AI算法与图像处理
2019/09/17
1.7K0
算法工程师的日常工作内容?你想知道的可能都在这里
未来的QA测试工程师
软件测试和编程项目快速增长的体量已经让QA别无选择,只能用更有效的自动化解决方案代替人工操作。IT领域正在朝着自动化软件技术方面快速发展。由于越来越多的企业采用敏捷方法并应用DevOps,因此质量保证不再是启动前的阶段。它贯穿整个产品生命周期。
FunTester
2020/01/10
6760
如何测试人工智能模型:QA入门指南
https://dzone.com/articles/how-to-test-ai-models-an-introduction-guide-for-qa-1
顾翔
2020/05/21
1.6K0
如何测试人工智能模型:QA入门指南
如何有效提升软件测试质量?
软件质量保障 | 测试质量保障、自动化工具/框架、平台开发、算法测试、BAT/TMD大厂测试岗面试题/面经分享、测试团队建设与管理、测试新技术的分享。 偶尔也聊聊个人工作的收获与经验。可以帮忙内推字节、阿里、百度等大厂。
互联网金融打杂
2022/08/01
1.2K0
如何有效提升软件测试质量?
新词:QA-Ops
QAOps是指通过使用DevOps思维方式来保持软件质量。DevOps指软件开发(Dev)和IT运维(Ops),并在开发和IT运营之间建立关系。将DevOps引入业务实践的目的是改善两个业务部门之间的协作。
FunTester
2020/04/08
7970
「AI工程论」AI的透明性(Transparent)及一种多因素评估方法
让人工智能发挥作用的一个基石是机器学习——机器从经验和数据中学习,并随着学习而不断提高的能力。事实上,机器学习的研究和应用的爆炸式增长使得人工智能成为了最近的兴趣、投资和应用热点。从根本上说,机器学习就是给机器大量的数据来学习,然后使用复杂的算法,从学习中归纳出机器从未见过的数据。在这种情况下,机器学习算法是教会机器如何学习的配方,而机器学习模型是这种学习的输出,然后可以归纳为新的数据。
用户7623498
2020/08/05
8560
「AI工程论」AI的透明性(Transparent)及一种多因素评估方法
机器学习下的持续交付
机器学习在行业中的应用变得越来越流行,然而相对于传统软件开发,例如Web服务或者Mobile应用来说,这类程序的开发、部署和持续改进也变得更加的复杂。它们的功能改变通常由以下三个维度驱动:
ThoughtWorks
2020/03/13
5830
AI智能体的开发流程
AI智能体的开发流程是一个多阶段、迭代的过程,它将机器学习、软件工程和领域知识结合在一起,旨在创建一个能够感知、推理、学习和行动的自主系统。下面是一个详细的AI智能体开发流程。
数字孪生开发者
2025/06/16
2130
AI智能体的开发流程
模型运营是做什么的(概念模型数据库)
我们过去几年的调查表明,很多不同行业的机构对机器学习(ML)越来越感兴趣。有几个因素促成人们在产品和服务中运用机器学习。首先,机器学习社区已经在企业感兴趣的许多领域实现了研究的突破,并且大部分研究都通过预发表和专业会议演示进行了公布。我们也开始看到研究人员共享出在流行的开源框架中编写的示例代码,有些甚至共享出了预先训练好的模型。企业和机构现在还可以从更多的应用案例从中吸取灵感。非常有可能在你感兴趣的行业或领域里,你可以找到许多有趣的机器学习的应用并借鉴参考。最后,建模工具正在被改进和优化,同时自动化工具已经可以让新用户去解决那些曾经是需要专家才能解决的问题。
全栈程序员站长
2022/08/01
8080
模型运营是做什么的(概念模型数据库)
训练数据也外包?这家公司“承包”了不少注释训练数据,原来是这样做的……
在机器学习领域,训练数据准备是最重要且最耗时的任务之一。实际上,许多数据科学家声称数据科学的很大一部分是预处理的,并且一些研究表明,训练数据的质量比你使用的算法类型更为重要。
AI科技大本营
2020/03/16
8740
训练数据也外包?这家公司“承包”了不少注释训练数据,原来是这样做的……
在软件开发中实施人工智能和敏捷管理的9种方法
几十年来,人工智能通过帮助各行各业的企业蓬勃发展,证明了其价值。从汽车制造厂的机器人到预测货币和库存变动到交易员,人工智能是我们生活的一部分。
Java架构师历程
2019/03/08
1.3K0
在软件开发中实施人工智能和敏捷管理的9种方法
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(一)
2006 年,Geoffrey Hinton 等人发表了一篇论文,展示了如何训练一个能够以最先进的精度(>98%)识别手写数字的深度神经网络。他们将这种技术称为“深度学习”。深度神经网络是我们大脑皮层的(非常)简化模型,由一系列人工神经元层组成。在当时,训练深度神经网络被普遍认为是不可能的,大多数研究人员在 1990 年代末放弃了这个想法。这篇论文重新激起了科学界的兴趣,不久之后,许多新论文证明了深度学习不仅是可能的,而且能够实现令人惊叹的成就,其他任何机器学习(ML)技术都无法匹敌(在巨大的计算能力和大量数据的帮助下)。这种热情很快扩展到许多其他机器学习领域。
ApacheCN_飞龙
2024/05/24
1.3K0
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(一)
机器学习正在改变软件测试的未来(Computing)
大多数软件开发团队认为他们的软件测试能力不足。他们明白质量缺陷所带来的影响是巨大的,在质量保证方面投入了大量资金,但仍然没有得到想要的结果。这并不是因为缺乏人才或努力,而是因为软件测试的技术效率极低。软件测试这一行业一直没有得到很好地发展。
谭雪儿
2020/12/18
9200
相关推荐
How Do You Test AI Systems?--你如何测试AI系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档