C++为什么能重夺年度语言?
目录
- 一、爷青回
- 1、年初依旧很多大新闻,其中一条就是TIOBE把年度编程语言颁给了C++。
- 2、这是什么概念?那一年Java的流行指数是14%。
- 二、C++为什么衰落
- 三、C++为什么重新流行
- 1、C++为什么重新流行起来了呢?
- 2、C++究竟做对了什么呢?
- 3、根本原因没有解决,C++究竟凭什么?我的回答是:时代需求使然。
- 四、C++该怎么学
- 五、“C++王者归来”系列对谈直播
一、爷青回
1、年初依旧很多大新闻,其中一条就是TIOBE把年度编程语言颁给了C++。
我特地上TIOBE看了看,意外发现一件非常有意思的事。TIOBE指数行业内的同学都很熟悉,是全球编程语言流行度的风向标。TIOBE最早始于2001年,但当年并没有选出年度语言,而是得等到2003年。2003年对于C++也是特别的一年,C++在TIOBE上的流行指数一度逼近18%,可谓如日中天,所以毫无悬念,第一届年度语言就是C++。
不过,这也是C++的顶点。虽然目前还没有听说什么TIOBE“年度语言魔咒”之类的说法,但C++成为年度语言之后一路下滑,到了2017年,C++只剩下不到5%。
2、这是什么概念?那一年Java的流行指数是14%。
Java号称C+±-,替代效应明显。然而,有意思的地方来了,当人们开始讨论用什么替代Java的时候,C++居然活了过来,在TIOBE上走出了一条微笑曲线。2022年,C++的TIOBE流行指数上大涨4.6%,这是榜单最大涨幅,19年后再次夺得了年度语言。很多分析文章没有提到的是,目前C++的流行指数重新回到12%,而上一次还是在2005年。
什么叫爷青回,这就叫爷青回。
二、C++为什么衰落
C++有太多问题,太应该衰落了。概括起来也不复杂,就三个字“太复杂”。
C++提供了大量的特性,往好了说写起来非常灵活,特别适合追求最优解的强迫症,往坏了说是严重加重了选择困难症的病情。即使你用了C++十年二十年,一定还能遇到什么地方让你感慨居然还有这么多不了解的地方。从审美的角度来说,C++不够协调统一,从学习的角度来说,C++简直是灾难。
指针就是典型。
指针是C++灵活的源泉,指针用得好,C++能玩出花来,但是用不好,C++也能玩出花来,所以,对很多程序员来说,不管是写,是读,还是改,指针都是灾难的代名词。
怎么办呢?献祭灵活性换取易用性和一致性。
譬如Java,Java继承了C++大量的语言特性,同时手起刀落剁掉了指针。Java简化了内存管理操作,有一项重要的机制叫垃圾回收(Garbage Collection),太重要以致有一个著名的梗是说,如果你去食堂吃饭,看到有人吃完收拾盘子的,那是C++程序员,吃完直接走的,那是Java程序员。
这里有个问题。我想自己收拾行不行呢?Java说,对不起,不行,不管你愿不愿意,我都要替你收拾。大家都不用收拾,所以易用。大家都不能收拾,所以一致。这里没有绝对的优劣,不过,后来无论是开发还是管理,都认为Java这种做法更节省头发。
于是,C++连同灾难性的指针一起,似乎只能死于选择太多。
三、C++为什么重新流行
1、C++为什么重新流行起来了呢?
这确实是个有意思的问题。有人说TIOBE算法不够客观,C++不可能重回2003年。这个说法我只同意一半。毕竟20年过去了,出现这么多要革C++的命的语言,著名的前有D语言后有Rust,就算这些后辈再怎么不给力,总会要分走一些使用者的。
现在C++不仅守住了基本盘,还出现了“回暖”的现象。且不管回暖的力度是不是真的像TIOBE所说的力拔头筹,但回暖本身是毫无疑问。C++肯定是做对了点什么,这才是C++重夺年度语言的新闻背后,最需要我们关注和思考的事情。
2、C++究竟做对了什么呢?
这不是一个很好回答的问题。网上有一个简单直接的回答:C++一直在更新,不断吸收编程语言的发展成果。譬如C++20,就增加了模块、概念、范围和协程四大特性。不少C++er说C++20振奋人心,为这门上了年纪的语言注入了新的活力。
不过,这个说法我同样只同意一半。C++20确实引入了一批非常有用的现代化特性,具备和后辈一争高下的基础。但是,前面也已经说过,C++的根本问题不是在于特性太少,而是在于特性太多,不要说去选择,光是去了解就已经成为了一种负担。
3、根本原因没有解决,C++究竟凭什么?我的回答是:时代需求使然。
在过去的十几年,Web开发一直处于绝对的支配地位,已经成为我们评价一门编程语言好坏的默认背景。但是,时代已经开始走出被Web支配的日子,区块链、人工智能、元宇宙,且不管这些概念背后到底取得了多少实质性的发展,但要开发这些应用,需求必然会变得空前多样,我们都需要重新选择最合适的开发方式。
而C++最不缺的就是选择。即使到了2023年,能够直接死磕底层,同时又具备现代编程语言特性的编程语言,其实仍然为数不多——C++正是其中之一。如果再加入对语言生态积累的考虑,C++几乎就是唯一的选择。
有一个说法是,无论你要做什么,总能在C++里找到趁手的工具。我想,这才是C++能在这个发展中的时代重夺年度语言的真正原因。
四、C++该怎么学
C++日久弥新,相信许多人都动过学一学C++的念头,但是,C++“难学”的名声在外,又让许多人打了退堂鼓。C++之所以让人感觉难学,主要是因为复杂和庞大。复杂是因为C++在设计之初就支持多种范式,而且不断推出新的语言特性提升竞争力,语法越来越复杂。庞大是因为类库,C++之所以生命力如此顽强,另一个重要原因是拥有一套功能强大的庞大类库。
复杂的语法和庞大的类库不但拉高了C++的学习门槛,还拉高了C++教材的编写门槛,
什么人才能广泛地了解这些内容,然后准确地总结成书,还敢打包票说书里的理解都没有偏差呢?还真有这么一个合适人选——Bjarne Stroustrup,没有谁能比C++之父更懂C++!Bjarne Stroustrup不仅发明了C++,还通过编写一系列教材打造出一条C++学习路线:
关于作者:
莫凡,网名木羊同学。娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。
五、“C++王者归来”系列对谈直播
相关文章:

C++为什么能重夺年度语言?
目录一、爷青回1、年初依旧很多大新闻,其中一条就是TIOBE把年度编程语言颁给了C。2、这是什么概念?那一年Java的流行指数是14%。二、C为什么衰落三、C为什么重新流行1、C为什么重新流行起来了呢?2、C究竟做对了什么呢?3、根本原因…...

视频监控实时接入——以海康威视为例(2023.2.16)
海康威视实时视频监控接入学习 2023.2.16引言1、视频协议简介1.1 RTSP——Real Time Streaming Protocol(实时流传输协议)1.2 RTMP——Real Time Messaging Protocol(实时消息传输协议)1.3 HLS——HTTP Live Streaming(…...
推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统是什么。
1. 推荐算法的初步理解 如果说互联网的目标就是连接一切,那么推荐系统的作用就是建立更加有效率的连接,推荐系统可以更有效率的连接用户与内容和服务,节约了大量的时间和成本。 1.1 推荐系统主要解决问题 任务一:挖掘长尾:帮助用户找到想要的物品(音乐、商品、新闻),…...

新手小白入门必看!如何批量注册Twitter账号?
Twitter是目前海外比较流行的社媒营销平台,所以很多从事跨境电商行业的朋友都需要利用多个Twitter账号来推广营销,但是注册和管理多个Twitter账号其实并不是简单的事情。龙哥将会在这里详细讲讲该如何批量注册并且让这些账号不会因为关联被封号ÿ…...

虚拟环境的创建以及labelme的使用教程
本来打算是将这两部分分开的,但写完虚拟环境的创建似乎字数太少了,不过二者有关联,所以就放一起了。简单介绍一下,虚拟环境的创建有win11系统已经Ubuntu系统,labelme教程包括了下载及其使用的全部流程,以及…...

CSS中的BFC详细讲解(易懂)
带你用最简单的方式理解最全面的BFC~~~1.先了解最常见定位方案普通流元素按照其在 HTML 中的先后位置至上而下布局行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为完整的一个新行所有元素默认都是普通流定位浮动元素首先按照普通流的位置…...

华为3面,官网显示面试通过了...开始泡池子,进入漫长等待期
背景: 现在双非本科,非计算机科班,有算法方面的奖,有嵌入式开发经历,官网显示面试通过,短信说录用情况在十个工作日内告知,看别人的说法应该是泡池子了。 全程视频面试,一天面完三…...
【新2023】华为OD机试 - 构成的正方形数量(Python)
构成的正方形数量 题目 输入 N 个互不相同的二维整数坐标, 求这 N 个坐标可以构成的正方形数量。(内积为零的两个向量垂直) 输入 第一行输入为 N,N 代表坐标数量,N为正整数。N <= 100 之后的 K 行输入为坐标 x y以空格分隔,x, y 为整数, -10 <= x, y <= 10 输…...

ElasticSearch之RestClient操作索引库和文档
前言:上文介绍了使用DSL语言操作索引库和文档,本篇文章将介绍使用Java中的RestClient来对索引库和文档进行操作。 希望能够加深自己的印象以及帮助到其他的小伙伴儿们😉😉。 如果文章有什么需要改进的地方还请大佬不吝赐教&#x…...

Lp正则化
一、L1 和 L2范数(norm)A norm is a mathematical thing that is applied to a vector. The norm of a vector maps vector values to values in [0,∞). In machine learning, norms are useful because they are used to express distances: this vect…...

云原生 -- Docker进阶(Docker-compose,Docker网络简单介绍)
Dockerfile的构建过程 每条保留字段必须为大写字母。Dockerfile每行只支持一条指令,但是每条指令可以带多个参数,并且每条保留字指令后面至少要带有一个参数。从上到下依次执行。每条指令都会创建一个新的镜像层,并提交新的镜像。 大致流程…...
taskset命令:让进程运行在指定CPU上
1. 操作场景 taskset命令,可用于进程的CPU调优,可以把云服务器上运行的某个进程,指定在某个CPU上工作。 本节操作指导用户使用taskset命令让进程运行在指定CPU上。 2. 操作步骤 2.1. 执行如下命令,查看云服务器CPU核数。 cat …...

Pod基本概念与Pod应用生命周期
Pod是一个逻辑抽象概念,kubernetes创建和管理的最小单元,一个Pod由一个容器或多个容器组成。特点:一个Pod可以理解为是一个应用实例,提供服务Pod中容器始终部署在一个Node上Pod中容器共享网络、存储资源Pod主要用法:运…...

DDL 数据定义语言
DDL 数据定义语言 目录概述一、库的管理1、库的创建2、库的修改【一般不修改,容易出现错误】3、库的删除二、表的管理【重要】1、表的创建2、表的修改3、表的删除4、表的复制 【可以跨库复制】练习题概述 数据定义语言 库和表的管理 一、库的管理 创建、修改、删除…...

设计模式概述
1. 概念 设计模式概念的提出: 设计模式最早于1977年在建筑设计行业中被 克里斯托夫亚历山大(Christopher Alexander) 在他的著作 《建筑模式语言:城镇、建筑、构造》 中提出。 软件工程界在1990年开始了设计模式话题的研…...

华为OD机试 - 箱子之形摆放(Python)| 真题+思路+考点+代码+岗位
箱子之形摆放 题目 有一批箱子(形式为字符串,设为str), 要求将这批箱子按从上到下以之字形的顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。 例如:箱子ABCDEFG,空地宽度为3,摆放结果如图: 则输出结果为: AFG BE CD 输入 输入一行字符串,通过空格分隔,前面部…...

第九章:创建用户和用户权限
Windows:创建用户:第一种方法创建用户:先点右上角的工具,然后点击AD用户和计算机双击skills.com打开目录,再双击Users,进入文件夹中在右框中右击空白处,新建用户填充好用户信息后点击下一步然后…...
如何制定人生目标
一、如何分解目标 人生终极目标并不一定要多详细精确,但一定要被分解,要分成长期目标、中期目标和一系列的短期目标,其中短期目标又可以分解为你能够马上操作的一个个的小目标。 二、目标制定的原则 目标制定遵循 SMART-W 原则: …...

用户认证概述
文章目录一、用户身份认证1.1 单一服务器模式1.2 SSO(Single Sign On)模式1.3 Token模式二、JWT令牌2.1 JWT 令牌说明2.2 JWT令牌的组成2.3 JWT 问题和趋势2.4 JWT 测试一、用户身份认证 1.1 单一服务器模式 一般过程如下: 用户向服务器发送…...
XQuery FLWOR + HTML
XML 实例文档 我们将在下面的例子中继续使用这个 "books.xml" 文档(与上一节中的文件相同)。 在您的浏览器中查看 "books.xml" 文件。 在一个 HTML 列表中提交结果 请看下面的 XQuery FLWOR 表达式: for $x in doc(&…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...