第232期 | 编程学习没有“最佳年龄”或“最晚年龄”之说
你好,这里是卖桃者说,今天和你聊聊老牌编程语言,C++。
3 月 9 日,腾讯发布了《腾讯研发大数据报告》。报告显示,2019 年腾讯新增了 3500 多个研发项目;新增了 12.9 亿行代码;46% 的 Bug 能在 1 天内得到解决;74% 的技术 leader 在持续输出代码,平均每人输出 3 万行代码。
说这些干嘛呢?重点在后面。
腾讯研发工程师使用最多的编程语言正是 C++,其次才是 JavaScript 以及 Go。我对这个排名一点也不感到意外,虽然 C++ 从诞生到现在已经有 40 年了,但热度一直非常高,几乎常年占据 TIOBE 排行榜的前五名,深受很多大厂工程师的喜爱。
JetBrains 曾在 2015 年做了个调查,结果显示全球大约有 440 万名 C++ 程序员,其中仅亚太地区就有 150 万,这个群体还是比较庞大的。
作为 C 语言的继承者,C++ 在近几十年里,为什么一直能长盛不衰呢?
我们 InfoQ 的记者在 2019 年 11 月曾采访过“C++ 之父”本贾尼·斯特劳斯特卢普(Bjarne Stroustrup),老爷子是这么回答的:
“C++ 之所以拥有顽强的生命力,主要是因为它非常实用,同时具有强大的灵活性与通用性。一方面,它面向对象,允许直接访问计算机,最大程度地提升效率;另一方面,它也能让你使用可承受的高效方法,掌控系统的复杂度。我觉得这两点是 C++ 的真正优势所在。”
当然,没有任何一门语言是完美的,但 C++ 能数十年屹立不倒,就说明它确实有很多吸引人的地方。这还得从它的诞生开始说起。
1979 年,还在贝尔实验室工作的本贾尼原本打算构建一套分布式系统,但他发现没有编程语言可以满足他的需求,于是决定自己动手创建一个。
好像故事都是这么发生的。
本贾尼在 C 语言的基础上开始进行改良,并补充了面向对象的概念。一开始,他把这门新语言称作“带类的 C(C with Classes)”,“带类的 C”后来被应用于贝尔实验室的很多领域。1983 年,本贾尼对“带类的 C”做了几处修改和扩展,演化为 C++,叫这个名字也是为了表达它与 C 语言的渊源关系。
C++ 兼容 C 语言的绝大部分语法特性,一经推出,迅速在工业界流行开来。1985 至 1989 年间,C++ 经历了最主要的革新:相继增加了保护成员、保护继承、模板,以及有争议的多重继承等特性。
1998 年,ANSI 和 ISO 的联合委员会正式推出了 C++ 的国际标准,该标准在世界范围内被广泛接受。
作为“C++ 之父”,本贾尼一直致力于 C++ 标准的改进和推广,他在自己所著的《C++ 语言的设计和演化》一书中总结了 C++ 的一些设计原则:
- C++ 的每一步演化和发展必须是由于实际问题所引起的。
- C++ 是一门编程语言,而不是一个完整的系统。
- 不能无休止地一味追求完美。
- 每一种语言特性必须有明确的实现方案。
- 不强制于人。
本贾尼把记录 C++ 的历史当作是自己的业余爱好,他认为回顾并记录 C++ 的历史可以帮助他反思系统设计。只有常反思自己做了哪些事、为什么做、哪些事是真的有用的,才能明确下一步要做什么。经常复盘,快速成长。
虽然 C++ 并不是完美的,但在不断演化的过程中,C++ 收到了很多来自用户的反馈,越走越远。在今年 2 月份,C++ 20 已经正式通过委员会草案,这意味着,C++ 20 即将正式发布。这也是 C++ 近十年来影响最大的一个版本。新版本包含了许多新特性,比如模组、协程、标准库 Concepts 的概念等等,这些新特性将会对开发者以及 C++ 生态产生不小的影响。
本贾尼曾在采访中分享过如何学习 C++。如果你是初学者的话,不要急于一下子学会所有内容,应该由浅入深、循序渐进地学习。先从基础部分起步,尝试一些简单的东西,比如,先学习 C++ 现代的部分,对于比较陈旧的部分,可以之后再学。初学者最好找个有经验的程序员当导师,他能帮你指点和改正学习、实践过程中犯下的错误,提高你的学习积极性。
如果你想成为一名出色的 C++ 程序员的话,最好先集中力量学好 C++ 以及其背后的思想,并认真、不断地练习编程。只有亲自写代码,才能体会实际问题,最终解决这些问题。
在极客时间里也有一门 C++ 的课程:现代 C++ 实战 30 讲,主讲老师是前 Intel 资深软件架构师吴咏炜。这门课比较适合具有 1-5 年工作经验的 C++ 程序员,干货很多,感兴趣的话可以去试读一下。
最后,分享下本贾尼的一些编程理念和人生建议:
1.编程学习没有“最佳年龄”或“最晚年龄”之说。很多人可能会觉得,越早接触编程越好,这时候的自己年轻、学习能力强。但年龄并不是什么大问题,本贾尼也是从 20 岁才开始编程的。如果问学习编程的最佳时间是什么时候,你准备好了,就是现在。
2.程序员最好要学习多种编程语言。只掌握一门编程语言是不够的,如果你只学一种,很容易导致想象力的僵化。许多优秀的程序员都精通多种编程语言,持续学习。
3.优秀的程序员应该擅长沟通。他们必须有能力与他人交流方案与想法,听取意见,了解问题所在,否则,只会进行无效的沟通,浪费时间。
4.不要只学习计算机和编程,要积累一种或多种领域的经验,要有其他专业知识。“两耳不闻窗外事”,一心埋头于编程,很容易让思维固化。不接触更多领域、更多知识,很难开拓视野,获得向上、全面的发展。只有多涉猎,多吸收,才更能明白什么东西值得自己去编程实现。
对于编程语言的学习,你有哪些好的建议呢?
卖桃者说,明天见。
(编辑:夏天)