原标题:2020年,咱们为什么要学习C++?
来历:CSDN(CSDNnews)
学习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++一向继续不断地开展,昨日正确的代码到了今日或许就成了糟糕的编程风格。
C++继续完善进程
(图片来历:https://isocpp.org/std/status)
该言语正在阅历大浪淘沙的进程,套用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新手去处理问题,还盼望他们得出有用、可保护的处理方案是不或许的。这里边需求许多职业内部的常识门路,只要跟这方面的长辈共过过后才干了解到,也便是说,这些人的可替换性很低。公司有必要交给他们更高的薪水,并让他们处理自己感兴趣的问题,才干把人留住。当然,处处都有简略而单调的作业,但假如从事的是自己诚心喜欢的作业,咱们一般也会更有耐性。
作者:Krzysztof Szatan
译者:孙薇
选自《程序员》杂志
-END-
供给PPT课件,教育大纲,源码,MOOC视频,习题回答及试验指导书
作者:钱能
定价:69.80元
ISBN:9787302521266
扫码,优惠购书
授课演示
额定资源赠送
- 假如你是教师,选用了这本书作教材,请将提交给教育秘书或许教务处的订书信息截图发到邮箱:itbook8@163.com
- 免费获取额定赠送的许多课程规划、上机实训、视频、题库等资源(部分资源如下图)。
责任编辑: