mthoutai

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++是一门非常奇妙的语言。让人又爱又恨。

在知乎上看到的一个帖子。怎么样才算是精通C++,这里节选一些精彩的回复。

链接:http://www.zhihu.com/question/20201972/answer/23454845
来源:知乎

1
精通C++是一个艰巨的任务。

为什么C++比别的语言难学这么多?事实上这基本上是由于C++他爹Bjarne Stroustrup说过的一句话“我特别讨厌语言的设计者把自己的喜好强加给用户”(看向go)。

结果C++为了不限制你的想法,于是也就变成了现在这个样子——包括若干范式,大概有面向对象(灵活应用virtual继承+shared_ptr可以达到java/C#的效果)模板(这里分两类,分别为type rich programming和meta programming,差别非常大)函数式编程(现在有了lambda,配合文件。简直无敌了)过程式可是难能可贵的是,这几种东西在C++混在一起用也是多么的自然。只是,这须要你花时间去掌控他。那究竟有没有必要真的学到这个地步呢,我认为跟你的领域是有关系的。譬如说我,基本上算是人格分裂的,由于:当我搞语言设计和编译器的时候,我总是会倾向于创造各种小DSL来给自己用,用的都是模板(想想boost的spirit大概就明确我的意思了,尽管我不用它),尽量让跟我有相同背景的人一眼能看懂我代码的意思。当我做我那个GUI库(www.gaclib.net)的时候。纯粹是用OO和IoC那一套。当我写3D渲染程序的时候,我会变成一个为了性能不惜牺牲可读性的人。当我是不同的我的时候。我当然仅仅会用C++的一部分来完毕我当前的这个任务。这好像是多重标准。可是实际上是由于项目本身的性质而定的。

到了这个时候你会认为,C++真是一门好语言。当你须要为了你的项目放弃不同的部分的时候,C++都能帮你做到。

当你须要不同的抽象层次须要不同的性能要求的是,C++还是可以帮你做到。假设你用别的语言。你终于会发现那个语言仅仅能做某几类的项目。这是由于,C++可以自由的让你放弃某些部分。而别的语言会阻止你放弃某些部分。

为了达到这个层次,你必须进入一个无限接近于精通C++的状态里,这个时候你才干收放自如。不被C++社区的各种不同的价值观所捆绑。倘若你的项目非常大。不同的部分有不同的特征的时候(什么。一个没有遍布全世界的一两千人写了20年的程序能叫程序吗?)。就更加须要你有这样的本事了。讲到这里,大家大概都明确精通C++大概是个什么感觉了吧——大丈夫能屈能伸。

2
谷歌project师对C++的掌握有两个级别:

  1. 拥有C++的readability(可读性)认证。通过这个认证须要在实际工作中写出一个比較复杂的完整的类,然后将这个类提交到一个委员会进行审查,委员会会帮你纠正常见的错误。假设你的这个类满足style guide[1]的全部要求,一两个星期之后你就行拿到可读性认证。一般来说,你须要在实际工作中写过至少几千行代码才干达到这个要求。

    C++的readability对project师的意义主要有两个。一个是熟悉并避免C++的缺陷(比方不要使用iostream和exception)。还有一个是熟悉一些经常使用的库函数(比方string的各种操作。hash_map和smart pointer的使用等)。通过这个认证之后,project师就有权利在code review中批阅其他人写的C++程序(注意这个不是readability review)。

    绝大多数project师对C++的掌握处在这个水平。

  2. 顾问级C++程序猿。

    一般须要写过数万行C++代码。用C++实现过比較复杂的系统。熟悉常见的设计模式并在实际工作中应用,对代码重构有丰富经验,最重要的是。成为小组以及周围同事的C++顾问,是同事有C++使用问题时最先想到询问的人。顾问级C++程序猿一般是高级project师(senior engineer)及以上级别,不仅对某种程序语言。对工作中的各种project问题也经验丰富。事实上“精通C++”并不仅仅是熟悉C++本身,你须要对C++须要实现的project问题和周边问题相同精通;并且“精通C++”这样的说法是相对的。假设你能成为组里的C++顾问,可以帮助同事正确使用这样的语言有效率地解决project问题并避免C++的误区,你就算是精通C++的那个人。

3
Never trust a programmer who says he knows C++
这里写图片描写叙述

4
精通C++,个人的理解是:1、能用C++的面向对像设计,分解。开发一个模块或小系统2、在出现BUG的情况下能调试3、熟悉对像,继承。模板。能使用STL,BOOST4、能熟悉几个经常使用的设计模式5、在此基础上,在GOOGLE大神的帮助下,能阅读开源或闭源的源代码。其他的。我认为有用性不强了,去抠语言的细节,语言的实现等。那不叫精通了。那是神通了。反正我认识的技术牛人。人家是去抠系统,原理上的细节,非常少去扣语言的。本来语言就是一个工具,用好他,坏了能简单的维护,管他是怎么实现的。

5

posted on 2017-06-19 10:25  mthoutai  阅读(4601)  评论(0编辑  收藏  举报