单纯地“精通C++”之后的体验是:“听过了很多道理,却依然过不好这一生。”
由于很多程序员上来接触的就是编程语言,所以以为编程语言就是计算机全部。其实不是的,就好比对于作家最重要的不是词汇量和语法知识,对于律师来说,了解法律条文也只是基本要求,对于计算机科学来说,编程语言不过是一个来和计算机沟通的工具。你精通C++,所以这个工具用起来很顺手,指挥起计算机来得心应手,然后呢?背得过新华字典,就能写得出美丽的诗篇?错。计算机科学的知识不是一门编程语言能概括的,任何一门编程语言都不行。
个人觉得具体来讲:精通C++之后,根据学习目的的不同,可能有如下几种体验:
1:为了从事C++相关开发的。刚开始信心满满,但最后通常会悲惨地发现:”填不完老人挖的坑,扶不正新人砌的墙“。毕意精通C++的还是少数,而优美的代码只是一个现代童话。所以开始大声疾呼:大家要守规矩呀,不能用裸指针,不要重复造轮子,要遵从开闭原则,要有设计模式,要遵从查询命令分离原则,要注意可读性,要有单元测试,要充分利用类型系统,要尽可能地在编译期发现错误……结果是你成功地保证了公司代码的长治久安,或者你已被气死在半路上……根据统计数据显示,呵呵……
2:工作中用不上的。首先祝贺你。(咳咳,我真不是C++黑……)由于C++是一个多范式语言(C++11后连函数式都全了,bravo),所以我相信精通C++的人再看别的语言,那几乎都是C++的子集呀……但是所谓入乡随俗,你也一样要了解其它语言中通用的风俗,才能成为一个优秀的程序员,而且C++的好处是它就像一个有着透明外壳的精密仪器,你总是可以看到它最深处的秘密。但别的语言通常没有这么透明,会隐藏很多实现细节,要习惯一会儿。
3:有志于研究编程语言的。干嘛学C++?有研读C++标准文档的时间,还不如看看《范畴论》。C++不过是C上面打了一大坨补丁。精通C++之后的感受最可能是:我艹,这肯定不是先进生产力的发展方向,肯定不是最广大程序员的最根本利益……我还是瞅瞅Lisp之流是不是靠谱吧……
4:有志于研究计算机科学某个领域的。不错,又会了一门外语,以后可以看C++写的代码了,而且如有需要,也能写写C++代码了……但是时间花得真是不少呀,罪过罪过,赶紧继续我的本职研究去吧……
5:搞培训的。哈哈哈哈,妈妈再也不用担心我的饭碗了……《Effective C++》的作者在D语言大会上的一个讲座非常好,其中的一句话是:我最希望D语言社区将来不需要像我这样的人……我没有保存那个链接,但是这个讲座真的很不错,大家可以搜搜看看……
精通C++真不算多大点儿事儿,而且回报也不大,所以才没那么多人“精通”。如果单纯只精通C++的话,体验就是:“听过了很多道理,却依然过不好这一生。” C++虽然已经包含了无数的细节,无数的规则,无数的奇技淫巧,但现实世界却有更多的细节,更多的规则,更多的奇技淫巧……
没什么用,精通C++不代表能写出好程序,就像知道回字有四种写法照样无法写出好文章来。不要把精力浪费太多具体某语言上,不管你搞网络,还是搞数据库,搞数字信号处理还是搞人工智能,或者和李开复一样搞语音识别,你会发现,功夫都在语言之外。
花太多时间学C++一点用都没有,不如打牢基础然后具体去学习各种知识,或者直接进行一些具体实践性的开发。所以我看简历,只会注意他具体做了什么,解决哪些问题,取得何种成绩。精通或者熟悉C++基本都是当垃圾信息过滤掉的,如果你简历上最耀眼的只是熟悉某语言,那和垃圾简历没区别。
所以,不要雇佣号称精通C++的人就是这个理由。
其实最精通中文的的人是各种语言学家,大学里专门研究中文的人,哪个字的出处,哪个用词正确与否,那个生僻字怎么念都了然于胸。so what ?能代表他们就能出口成章,提笔成文么?
就像《三体》写得好,是因为大刘在科学在剧情构思上的知识牛逼,而不是大刘会咬文嚼字。Kaiser 在知乎上谈笑风声,因为他历史知识丰富,《史记》《汉书》《三国志》信手拈来,外加观点独到,幽默风趣,从来不是因为他知道回字有四种写法,或者八种写法。
我们说 Fabrice牛逼,因为他对 数学,信号处理,计算机体系等三个方面有着深刻的认识,从而他能做出 ffmpeg, qemu, tinycc 这样的项目来,从而他算 pi可以算到世界第一快,所以大家觉得很牛逼,这并不是因为听说他 C++有多牛。
所以看到简历上如果没什么值得称道的东西,只有一个 “精通C++”,在用人公司眼里就和一个笑话差不多。
-------------
补充,
@欧阳婕评论中提到的陆游诗,
《示子遹》
——陆游
我初学诗日,但欲工藻绘;
中年始少悟,渐若窥宏大。
怪奇亦间出,如石漱湍濑。
数仞李杜墙,常恨欠领会。
元白才倚门,温李真自郐。
正令笔扛鼎,亦未造三昧。
诗为六艺一,岂用资狡狯?
汝果欲学诗,工夫在诗外。
注意第一句,“我刚学诗,只想精通辞藻” 就是这个所谓 “精通C++” 的状态