没有人能真正精通C++

news2024/12/28 3:39:21

任何说自己很懂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也曾表示自己并非100%精通C++,他提到:“C++存在一些错综复杂的陷阱,大多数人甚至没法写出一个简单的没有漏洞或错误的类。”

3、世界仍然需要C++

当前编程世界中的真相是,你可以选择任何适合你得编程语言。如果有人反驳这个观点,那便会被贴上“语言霸凌”的标签,编程语言只是一个程序员需要学习和使用的工具。如果Python能够帮助你很好的完成工作,为什么还要使用C++呢?

目前很多开发者已经认为C++是一种濒临死亡的语言,但事实上并不是这样。如果开发人员需要从头开始构建一些东西,例如操作系统、游戏或其他基础软件,C++目前仍被认为是实现这些目标的首选语言,当然在面对很多现代应用开发时使用复杂性过高的C++会变得很痛苦。

C++为了不限制程序员的想法,包含了太多的范式,包括面向对象(灵活应用virtual继承+shared_ptr)、模块化(type rich programming和meta programming)、函数式编程(lambda,配合文件),以及面向过程编程。然而当前世界上的大多数需求,只需要用到面向对象或函数式编程。

显然,无论是对于C++还是其他语言,几乎没有人能够做到对它们百分百了解,尤其是当语言复杂性和特性随着版本更新而不断变化的情况下。C++只是在这种情况下会变得更甚,并且由于这种经典语言的名气效应,人们会给C++程序员设定更高的标准。

大多数C++程序员都存在着这样一种心态——“如果我能遵守这些规则,避免炫技、避免犯错,我就可以避免把枪口对准自己的脚。”一个很明显的道理是,当你被问及是否了解C++时,最好的答案是:我对C++的了解足够多,所以我认为我并不足够了解这种语言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/772139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

050、事务设计之Percolator事务模型

Percolator 背景 Bigtable: 大表打散每行到各个节点,每一行作为一个kv。解决的问题 一个事务涉及的行在多个节点,如何用单行对一个事务进行控制,实现原子性。 快照隔离级别(snapshot ) 白色点:代表事务开始…

.Net5 mvc项目UseBrowserLink插件功能失效的原因

前期基于.Net Framework创建的Web项目,使用了BrowserLink插件协助前端开发,功能一直都比较稳定,后来项目迁到.Net5 ,发现BrowserLink 已经失去了从浏览器定位到项目源代码的功能,希望在后面的版本还能继续支持此版本&a…

分区类型ID一键变身!快速改变分区类型ID的简单方法

分区类型ID是什么? 想要改变分区类型ID,先得明白分区类型ID是什么。大多数电脑用户可能只熟悉分区和分区类型,实际上有5种分区类型:主分区、可扩展固件接口(EFI)、扩展分区、逻辑分区和Microsoft保留分…

gitbash2.41安装教程——2023.07

文章目录 1、下载安装包2、安装 1、下载安装包 进入官网下载,官网链接 上面有多种系统可以选择,我是windows,点击windows进行下载 这里可以直接下载最新版本的git 2.41.0 64位。 下载可能有点慢,耐心等待。 2、安装 下载完…

什么是云应用程序?

应用程序优先的云服务的日益普及导致应用程序与云服务的融合程度比以前更深。应用程序和云之间的运行时边界正在从虚拟机转移到容器和函数。集成边界正在从仅访问数据库和消息代理转向应用程序的机械部分混合并在云中运行的边界。在这个最终架构中,应用程序是“云绑…

02 QPushButton的基本使用

Tips: 在使用控件的时候如果没有智能提示,可能是没有包含头文件 在运行时,报【invalid use of xxx】可能是没有包含相关头文件 如果出现中文乱码:设置编译器的编码格式为UTF-8 本节主要包含创建一个按钮控件、显示按钮、设置按钮的父窗口、设…

【java】【基础2】程序流程控制

目录 一、最经典的三种执行顺序 二、分支结构 2.1 if 2.2 switch 2.3 if与switch区别 三、循环结构 3.1 for循环 3.2 while循环 3.3 do-while循环 3.4 三种循环区别 3.5 补充知识:死循环 3.6 补充知识:循环嵌套 四、跳转关键字:br…

轮廓提取demo

note 步骤: 1.滤波(使用高斯核对原图卷积) 2.取梯度(使用sobel核对步骤1之后的图卷积得到x,y两个方向的梯度分量) 3.合成梯度图(x,y两个方向的梯度分量相加) 4.取梯度平方和矩阵(x*x y*y) 5.取八邻域掩膜(3x3矩阵) 6.根据掩膜,合成梯度图&#x…

AIC8800 WIFI调试记录

问题:AIC8800 USB 接口WIFI模块无法识别 现象: 上层:WIFI打不开 驱动层:usb无法识别到AIC8800模块 A133P:/ $ lsusb Bus 001 Device 001: ID 1d6b:0002 Bus 001 Device 002: ID 1a40:0101 Bus 002 Device 001: ID 1d6b:0001 Bus…

postgresql regular lock常规锁申请与释放 内幕 以及fastpath快速申请优化的取舍

​专栏内容: postgresql内核源码分析 手写数据库toadb 并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 定义 每种常规锁都需要定义几个要素,它由结构体 Lo…

MySQL中这14个小玩意,让人眼前一亮!!!

前言 我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。 1.group_concat 在我们平常的工作中,使用group by进行分组的场景,是非常多的。 比如想统计出用户表中…

跨境电商市场迎来发展新机遇,如何利用IPIDEA扩大市场份额

根据Adobe Analytics的数据,美国消费者在亚马逊Prime Day期间花费了127亿美元,同比增长6.1%,创下历史新高。这一数据表明,亚马逊的会员日促销活动,持续吸引着消费者的关注和购买欲。跨境电商的迅速发展为普通商家提供了…

不得不会的软件测试bug分析定位技巧

目录 1.web前端 2.web后端 3.性能测试 身为测试工程师,总有一道绕不过去的坎就是定位bug,这其实是非常花费时间的。 也许有很多人不以为然,觉得无非就是发现bug后提交bug管理系统,描述操作步骤,预期结果和实际结果…

正则表达式与文本处理器

文本处理器三剑客:grep(查找) sed awk 正则表达式:由一类特殊字符以及文本字符所编写的一种模式,处理文本当中的内容 其中的一些字符不表示字符的字面含义,这些字符表示控制或者通配的功能 通配符&…

PageHelper分页失效,只能查出第一页

PageHelper分页失效&#xff0c;只能查出第一页 1. 现象2. 原因3. PageHelper工作原理 1. 现象 分页代码如下&#xff1a; int pageId Constants.ONE;boolean isHasNextPage;do {PageHelper.startPage(pageId, Constants.DEFAULT_PAGE_SIZE);List<String> projectIdLi…

python发送邮件yagmail库

yagmail库发送邮件简洁&#xff0c;代码量少 多次测试文件发送只能接收到表、文档、pdf、ppt import yagmaildef send_yagmail(sender, send_password, addressee, hostsmtp.qq.com, port465):yag yagmail.SMTP(sender, send_password, host, port)img_url https://img2.bai…

kali密码攻击之在线攻击hydra

hydra与hydra-graphical 1.介绍 Hydra是一款非常强大的暴力破解工具&#xff0c;它是由著名的黑客组织THC开发的一款开源暴力破解工具。Hydra是一个验证性质的工具&#xff0c;主要目的是&#xff1a;展示安全研究人员从远程获取一个系统认证权限 支持以下协议爆破&#xff1…

Redis实战案例21-消息队列

1. 基于JVM的阻塞队列的局限 JVM内存限制问题&#xff0c;大量订单出现时&#xff0c;可能会超过JVM阻塞队列上限&#xff1b;阻塞队列并不能持久化&#xff0c;因为内存不能持久化&#xff0c;出现异常或者宕机之类的故障时&#xff0c;出现数据丢失&#xff1b; 所以引出消息…

Linux内核的任务:

硬件与软件之间的中间层&#xff1a;内核在技术层面上充当硬件和软件之间的中间层&#xff0c;负责将应用程序的请求传递给硬件&#xff0c;并处理硬件设备和组件的寻址和操作。 应用程序的接口&#xff1a;对于应用程序来说&#xff0c;内核是它们与硬件之间的接口。应用程序通…

基于 chinese-roberta-wwm-ext 微调训练 6 分类情感分析模型

一、模型和数据集介绍 1.1 预训练模型 chinese-roberta-wwm-ext 是基于 RoBERTa 架构下开发&#xff0c;其中 wwm 代表 Whole Word Masking&#xff0c;即对整个词进行掩码处理&#xff0c;通过这种方式&#xff0c;模型能够更好地理解上下文和语义关联&#xff0c;提高中文文…