为什么每一名程序员都应该学习 C++?

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

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

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

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

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

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

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

image.png

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

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

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

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

使用 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 个编程原则。

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

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

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

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

与操作系统 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 头文件:
image.png

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

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

  • Electron
  • React Native
  • Flutter
  • Neutralinojs

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

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

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

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

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

小结

我们已经讨论了在编程生涯中学习 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

了解更多软件开发与相关领域知识,点击访问 InfoQ 官网:https://www.infoq.cn/,获取更多精彩内容!

目录
相关文章
|
9天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
31 4
2023/11/10学习记录-C/C++对称分组加密DES
|
4月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
92 0
|
2月前
|
IDE Java 程序员
C++ 程序员的 Java 指南
一个 C++ 程序员自己总结的 Java 学习中应该注意的点。
26 5
|
2月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
2月前
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
30 1
|
5月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
5月前
|
人工智能 分布式计算 Java
【C++入门 一 】学习C++背景、开启C++奇妙之旅
【C++入门 一 】学习C++背景、开启C++奇妙之旅
|
5月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
5月前
|
小程序 C++
【C++入门 二 】学习使用C++命名空间及其展开
【C++入门 二 】学习使用C++命名空间及其展开
|
5月前
|
C++
C++基础知识(四:类的学习)
类指的就是对同一类对象,把所有的属性都封装起来,你也可以把类看成一个高级版的结构体。