任何说自己熟悉 C++ 的人可能都是夸大其词。
我想你可能已经注意到了,是的,当今大多数程序员都在使用 Python、Rust、Go 或其他新编程语言。大多数人不再需要掌握 C、C++ 等旧编程语言,甚至很多程序员已经开始从手工编码转型为 AI 编码。
但即便如此,仍有许多人自认为了解并掌握了古老的编程语言 C++,但其实他们大多都是在夸大其词。这句话出自 Louis Brandy 的一篇博客文章“永远不要相信那些自称了解 C++ 的程序员”。
1. C++的“双峰”特性
在博客中,Brandy 提到,他在长期采访 C++ 程序员的过程中,开始意识到 C++ 的一个非常重要的特性:C++ 是一种“双峰”语言。也就是说,刚接触 C++ 的开发人员会觉得它非常简单,但随着对它的了解越来越多,他们的自信心就会被这门语言的巨大复杂性慢慢摧毁,直到犯下足够多的错误,如下图所示。
程序员,特别是那些学过 C 语言的程序员,经常会很快学会 C++,并且觉得自己非常熟练。这些程序员会告诉你他们精通 C++,但事实并非如此。
随着他们继续学习 C++,他们将经历这段挫折的低谷,在那里他们将充分体会到语言的全部复杂性。但好消息是,程序员可以很容易地认识到低谷前和低谷后的区别。如果你向低谷后的人提到 C++ 的复杂性,他们会描述他们对 C++ 的数百次挫折。而低谷前的人会说 C++ 只是带有类的 C。
2. 没有人能真正掌握 C++
当然,很多程序员把这个说法当成了笑话,但也有很多人对这个理论的正确性争论不休。在 Reddit 上,程序员们分享了他们对这个说法的看法。一位技术经理提到,在面试时,他会让程序员以 1-10 的等级描述自己的 C++ 水平。如果答案高于 6,那么就需要详细谈谈该语言的细节。
此外,面试官也提到,建议程序员在面试时尽量不要直接说自己对哪种语言掌握的比较好,而是要和面试官沟通自己擅长处理哪些具体类型的业务或问题。否则,当你遇到技术爱好者时,很容易在面试中暴露你的无知。
在当前 AI 主导的世界里,古老的语言 C++ 似乎更多地成为了帮助人们建立知识体系和销售书籍的工具,而不是真正用于生产的语言。一些 Reddit 用户分享了他们在简历上写自己精通 C++,却无法回答智能指针和右值引用等问题的尴尬经历。
事实上,很多开发人员在使用 C++ 时并不了解其细节,大多数使用了几十年 C++ 的人也不敢说自己非常熟悉这门语言。就连 C++ 之父 Bjarne Stroustrup 也曾说自己对 C++ 并非 100% 精通。他提到:“C++ 有一些错综复杂的陷阱,大多数人甚至无法编写出一个没有漏洞或错误的简单类。”
3. 世界仍然需要 C++
当前编程世界的真相是,你可以选择任何适合自己的编程语言。如果有人反驳这一观点,他们就会被贴上“语言霸凌者”的标签。编程语言只是程序员需要学习和使用的工具。如果 Python 能帮你很好地完成工作,为什么要使用 C++?
现在很多开发者认为 C++ 是一种正在消亡的语言,但事实并非如此。如果开发者需要从头开始构建某些东西,例如操作系统、游戏或其他基础软件,C++ 仍然被认为是实现这些目标的首选语言。当然,由于 C++ 的复杂性,在面对许多现代应用程序开发时使用 C++ 会变得很痛苦。
为了不束缚程序员的思路,C++包含了太多的范式,包括面向对象(虚拟继承+shared_ptr的灵活应用)、模块化(类型丰富编程和元编程)、函数式编程(lambda,带文件)、过程化编程等。然而,目前世界上绝大部分的需求,只需要面向对象或者函数式编程。
显然,没有人能够 100% 地了解 C++ 或任何其他语言,尤其是当语言的复杂性和特性随着每个版本而变化时。C++ 更是如此,而且由于这种经典语言的名气,人们对 C++ 程序员的要求更高。
大多数 C++ 程序员都有这样的心态 —— “如果我能遵循这些规则,避免炫耀,避免犯错误,我就能避免搬起石头砸自己的脚。” 这是一个显而易见的事实,当有人问你是否了解 C++ 时,最好的回答是:我对 C++ 了解得足够多,所以我认为我对这门语言还不够了解。
4.最后分享一个完整的c/c++后端知识体系
本知识体系基于凌盛教育c/c++Linux服务器开发架构教程,经过数万学员反馈,不断迭代技术知识图谱,贴合市场实际岗位需求,以项目为核心,通过30+大大小小的项目,学习和了解c/c++后端开发技术,目前已更新至第13版,需要的朋友可以点击领取。
一些过去的视频
高并发场景的三种锁方案:自旋锁、互斥锁、原子操作的优缺点
后端开发必学4种分层结构:B+/B-tree、时间轮、跳转表、LSM-Tree
检测内存泄漏的5种方法,让你重新认识C++内存管理
一步一步实现线程池(120行)、实现异步操作、解决项目性能问题
需要获取更多c/c++后端服务器开发相关视频技术:点击领取
1. 勤奋的基础
②设计模式
③C++新特性
④Linux项目管理
2.高性能网络设计
①异步网络库zvnet
②网络原理
③协程框架NtyCo的实现
④基于dpdk的用户态协议栈的实现
⑤ 高性能异步io机制io_uring
3. 基本组件设计
①水池型组件
②高性能部件
③开源组件
4.中间件开发
①Redis
②MySQL
③卡夫卡
④gRPC,微服务间通信的基石
⑤nginx
5. 开源框架
①游戏服务器开发skynet
②分布式API网关
③高性能存储spdk文件系统实现(项目)
④ 高性能计算CUDA
⑤并行计算与异步网络引擎工作流程
⑥ 物联网通信协议MQTT的实现框架Mosquitto
6.云原生
①Docker
②Kubernetes
7. 性能分析
①性能和测试工具
②观测技术BPF和EBPF
③ 内核源代码机制
8.分布式架构
②分布式文件系统
③分布式协作
四、项目实践 1.dkvstore实现 2.图床共享云存储 3.微服务即时通讯
此项目部分由凌盛的讲师进行了总结,在课程中,你可以将上述详细的技术细节与过往的项目经验相结合,从而提高学习效果。