Why C++?

这是一篇说服你来学C++的文章.(🤔劝你向善?

对于软件开发甚至是计算机科学学习来说,C++是一门很好的语言.当然如果本身抱有的目的就不是学习本身为目的的话,那么针对你所要学习的领域进行特性化的学习即可,但我仍然建议你有时间来看看C++这门语言.

Words can kill 语言可以杀戮

《虐杀器官》中的语言学武器令人影响深刻.C++不像科幻电影中那样”神通广大”,它只是一门编程语言.核心在于,语言虽说只是一种工具,但确实无时无刻的在潜移默化的影响着其使用者,某种意义上来说,数学也是一样.

C++语言的设计哲学是接近零开销的抽象.语法层面上基本兼容C,使其具有接近底层的编程模型.同时给与程序员几乎以最大程度的自由.而面向对象编程与泛型编程则是C++最重要的编程范式,有点冰与火的感觉,却又相辅相成,你中有我,我中有你.这种不同范式之间的有机结合使得C++具有无比强大的威力,接近底层使得其可以极好的利用编译器的优化来尽可能优化你的代码,如果你想,甚至可以将一些运行期的工作放到编译期来做.

学习C++,你需要建立对整个程序的生命周期的良好理解.一个C++程序有编译,链接,执行等等过程.

编译过程涉及编译原理,其中词法分析,语法分析,语义分析,能够较好的让你理解高级程序语言的本质,以致于IDE中的静态代码分析工具是如何工作的.让写代码就像写文章一样,其中编译器的作用不言而喻;链接过程涉及程序逻辑的组织,库的设计与作用逻辑,一个个小代码文件是如何生成一个可供计算机运行的庞然大物,C++中各种各样的标识符是如何被解析引用的;执行过程让你有一个对进程执行的大致抽象,其中的堆和栈是什么,程序的运行建立在怎样的一个基础上,程序又如何与其他程序进行交互.进行系统调用,又或者是网络通信?其中的每一块细细长谈都可能耗尽你毕生时光.

如果说抽象与封装是程序组织的灵魂,模板与对象给你提供了良好的保障.对象给你一种运行时多态,而模板给你一种编译时多态.C++将类型系统的特征发挥的淋漓尽致,不但给你提供强大的类型保证,同时还给予你以破坏它们的工具.不但允许你进行隐式类型转化,让你方便写程序,同时允许你限制这种转换.从此意义看,C++是充满着矛盾的,然而其真的矛盾吗?没有,它只是给与设计者在设计中自由权衡的机会.

你可能会觉得C++是一门古老的语言从而缺乏活力.然而C++20已经蓄势待发.从C++98到C++11让C++焕然一新,编程效率得到极大提升.作为一门跨平台的语言,它的发展不仅仅建立在对新生编程模型应用的支持上,同时建立在语义细粒度和流行设计概念的支持上.如果说一门学科的发展依赖于概念的逐步澄清,那C++无疑是无比成功的.移动语义和final等关键字就是最好的佐证.学习C++不仅在于学习其语言特性,往往还需要学习一些最佳实践,从中你可以看到许多其它语言的影子,这也是学习C++给你带来的丰厚回报.良好的编程实践以及贯穿的知识体系,都让你的能力得到了实质性的提升.

C++的缺点也是十分明显的.它太复杂了,想学好需要付出大量的时间,以致于没有人敢说自己真正”精通”C++.面对实际应用开发我只需要常常用到其中一部分就够了.如果我需要语言运行时的动态支持,何必拿C++设计半天,而不换一门动态语言来编写呢?面对工作需求已经够烦了,C++仍就要求你给它一份不小的精力关怀.如果你是直接面向工作学习编程语言的话,除非工作需要,否则按照工作需求优先学习吧.

如果你打算学习C++了,可以参考以下资料:

一个典型的 C++ 程序员成长经历

如何系统地学习 C++ 语言?

如果你觉得上述理由仍就不够打动你,而你又看动漫的话,我这还有一个推荐的理由:因为,我们生来便是自由的!

参考

如何评价《虐杀器官》这一部作品?

C++语言的设计与演化

Effective C++