2020年我们为什么要学习C/C++?其实C/C++依然在这些领域称霸

学习C++的一大好处在于,它可以帮助我们理解生命周期(Lifetime)和所有权(Ownership)的概念,以及类型的抽象,还可了解到怎样利用类型保持API的使用方式不变。除此之外,为何各种高级语言层出的今天,学习C++仍颇有价值?本文将为你道来。

“C++已死”

大学时代,我就听过这样的说法——差不多十多年前的事儿了。那时候至少在美国,Java已经成了各公司的主流语言。程序员也许都很熟悉Joel Spolsky在2005年12月对JavaSchools发起的批驳。此外,作为微软应对Java的手段,2000年左右推出的C#也有C++杀手的称号。这之后,动态语言风靡一时,Ruby和Python开始流行起来。那么,既然有了这些好用的语言,我们为什么还要选择C++语言呢?它难道不是C语言进阶版吗,就像当初的汇编语言进阶版一样?如果有时间,建议大家听一下Herb Sutter的演讲,讲得很好;时间有限的话也可以只看这个较短的视频演讲,其中包含有具体案例。从TIOBE语言排行榜中我们可以发现,在过去逾十多年的时间里,C++一直稳居最受欢迎语言列表的第三名。对一个老牌语言来说,这个成绩不算差了。这让我想到了另一个问题……

大家怎么看待指针?

大多立即将C++与指针关联起来的人都学错了。“带类的C语言”已经是老一套了。根据我个人经验,它糟糕透了。在C语言中,将多维数组作为函数参数传送、执行指针运算、以手动方式管理内存(就好像没有容器与智能指针一样)、实现双向链表等等,所有这些都是我们应当在C语言的课程上学过的。也许通过这种方式来学习C++并没有什么错?好吧,再想想。

当然,专业的程序员应当理解指针的工作方式,但它已经不是现代C++的主旨了。C++一直持续不断地发展,昨天正确的代码到了今天可能就成了糟糕的编程风格。

该语言正在经历大浪淘沙的过程,套用Bjarne Stroustrup博士的一句话,“C++就像一种新语言,各部分组合较之前更为顺畅。其更高层次的编程风格较之前更为自然,也一如既往的高效。”现在,C++有了Lambda表达式、内存模型(Memory Model)、Range-based for loops、移动语义(Move Semantics)、可变参数模板(Variadic Template)以及所有其他类似的高级功能,这些都能协助我们完成手上的工作。你是否也有一些旧代码需要按新标准来更新呢?不要担心,Clang-tidy就是你的救星!这个工具非常酷,可以通过静态分析找出老式风格代码,并给出修改建议。在使用C++时,工具的缺乏一直很令人头疼,不过这种情况正在改变。你以为只有Java才有自动重构功能?谷歌的Chandler Carruth在演讲中提到了使用Ninja编译LLVM/clang的问题,现在它们都能运用自动重构,立即生成1亿行的C++代码了。

企业代码库的现实场景

很多计算机科学专业的本科生以为自己将会走上像摇滚明星、忍者或者超级英雄那样的事业之路:“只管等着让世界看到我的能力!”这种想法源于他们自认为“是优秀人才,并非常人”。本来抱着一腔期待,准备投身于长时间的设计,以及实现复杂的算法(至少我以前是这么想的),然后获得了第一份工作,结果很快就被20年的老代码给打垮了。有着固定缓存的strcpy函数分散在数百个文件、上千行函数、五个版本的手写linked lists中——请感受一下。于是你卷起袖子,动手收拾这个烂摊子。结果你的主管对你说道:“不要着急,年轻人,公司老早就要求实现这个功能了。不,我们不准备使用新的GCC编译器,别的团队都还没准备好呢。”现在你开始思考:“我哪里犯错了呢……”

这个问题可不是C++所特有的,还会出现在调试一些由Reflection的爱好者所创建老旧的Java代码时。如果你是一名Web开发者,很可能会遇到一些PHP的问题。即便使用Ruby,Python或者一些较新的语言,那些枯燥的工作也都会榨干你的精力。“你能把那个按钮挪到右边并改成粉色吗?”这就是大多数公司在工作中的现实场景。

我想说的是:除了大量遗留问题,或者无聊的代码之外,还存在着少量既有挑战性,又有趣味性的工作,而这些工作有些刚好是C++能发光发热的领域。

C++称霸的领域:游戏、HPC、编译器、金融财务领域等等

如果不想把时间全用在增删改查之类的实现上,也许你可以考虑学习C++语言,并选择一个领域。下面我会给出一些建议。

游戏行业:几乎所有3A游戏都是使用C++编写的。大众公认电子游戏的开发者是软件行业里回报最高的工作之一,也是需求量最大的领域之一。因为速度非常重要,所以编写高效的代码就是最基本的要求。除了要懂C++之外,精通游戏开发更应注重理论与模式的钻研,而不限于特定的API或者Library。通常还必须具备高超的图形与数学技能,这些知识足够你活到老学到老。

HPC:以极限速度处理数据,要求对底层硬件有深刻的理解,这类知识可以直接应用在语言中。通用图形处理器(GPGPU)及CUDA、OpenCL之类的并行计算框架的出现,引发了对有这类技术的C++程序员的需求。如果深入到科学计算领域,还有很多能做的工作。不知你是否听说过机器学习?这是当今的热门话题。

编译器:这是我最喜欢的领域,LLVM项目如此成功,以致于很难找到一种既未使用LLVM库编写前端,也没有使用LLVM生成字节码的流行语言,而这些全都是C++。尽管编译器是以各种语言编写而成,但其背后的实现原理是相同的。我们使用优化器、静态分析程序、调试程序、标准库、链接器以及所有其他相关的工具来工作。

金融领域:除此之外,金融领域也有很多工作需要有能力编写低延迟代码的程序员。在这个领域,数学背景也是一大加分亮点。该领域的大多工作可能都涉及到开发与维护高频使用的交易平台。另外如果不想挂着程序员的名头,这个领域也是很棒的选择。可以说负责设计并实现金融数学模型的宽客(Quant)职位是所有程序员中最有可能获得高额奖励的。


以上只是我的几个建议,这些领域的共通点在于:无法通过数量取胜——让一大堆Java新手去解决问题,还指望他们得出有效、可维护的解决方案是不可能的。这里面需要很多行业内部的知识门道,只有跟这方面的前辈共过事后才能了解到,也就是说,这些人的可替换性很低。公司必须付给他们更高的薪水,并让他们解决自己感兴趣的问题,才能把人留住。当然,到处都有简单而枯燥的工作,但如果从事的是自己真心喜爱的工作,我们一般也会更有耐性。

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容