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

怎么样才算是精通 C++?的更多相关文章

  1. 怎么样才算是精通 Python?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:weixin_45587093 你们所说的什么要怎样数据分析.爬虫.We ...

  2. 学多少年才算“精通Java”?

    我从毕业做程序员就开始用 Java,到现在已经工作快 20 年了.减去我做手游用 C++.Lua 的几年,再减去后来转管理写代码少的时间,我真正写 Java 代码的时间至少也在 10 年以上. 如果你 ...

  3. 什么样的类才算是一种可重用的组件,即JavaBean?

    每一个类实现了Bean的规范才可以由Spring来接管,那么Bean的规范是什么呢? 必须是个公有(public)类 有无参构造函数 用公共方法暴露内部成员属性(getter,setter) 实现这样 ...

  4. 怎样才算精通Linux

    1.掌握至少50个以上的常用命令(包括grep.awk.sed.ps.find等等吧,熟练使用,基础的选项不用man) 2.熟悉Gnome/KDE等X-windows桌面环境操作 3.掌握.tgz.. ...

  5. 【转】Java Future 怎么用 才算是真正异步

    接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果.        Callable接口类似于Runnable,从名字就可以看出来了,但 ...

  6. 你知道python入门,是学到什么程度才算是吗?

    1.入门的标准是什么? 这是很多初学者都关注的问题,但又是一个很难回答的问题,问题的核心是采取什么标准来衡量一个人是否已经入门. 以知识量的多少来衡量是不是可行呢?有些人走马观花一般学了很多pytho ...

  7. 何为“精通Java”

    何为精通Java?本来Java仅仅是一门语言,但从应用技术的角度来看,精通Java是可以无边无际的.很可能你可以对James说:我精通J2EE.JVM.Java服务器.大数据等等一些和Java相关的应 ...

  8. 第一章:Python基础の快速认识基本语法

    本課主題 第一个 Hello World 程序实战 用户输入实战 模块介紹 变量介绍 格式化介紹 条件判断介紹和操作实战 for 循环介紹和操作实战 作业需求 Python 第一个 Hello Wor ...

  9. [转] Java 的泛型擦除和运行时泛型信息获取

    原文链接 https://my.oschina.net/lifany/blog/875769 前言 现在很多程序员都会在简历中写上精通 Java.但究竟怎样才算是精通 Java 呢?我觉得不仅要熟练掌 ...

随机推荐

  1. 【【henuacm2016级暑期训练】动态规划专题 J】Red-Green Towers

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然最多1000行的样子. 从上到小做dp 设f[i][j]为前i行,使用了j个红色方块的方案数. f[1][r] = 1;如果r& ...

  2. Jquery学习总结(4)——高效Web开发的10个jQuery代码片段

    在过去的几年中,jQuery一直是使用最为广泛的JavaScript脚本库.今天我们将为各位Web开发者提供10个最实用的jQuery代码片段,有需要的开发者可以保存起来. 1.检测Internet ...

  3. MyBatis学习总结(1)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  4. java的反射机制(重要)

    1,反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  5. nutch如何修改regex-urlfilter.txt爬取符合条件的链接

    例如我在爬取学生在线的时候,发现爬取不到特定的通知,例如<中粮福临门助学基金申请公告>,通过分析发现原来通知的链接被过滤掉了,下面对过滤url的配置文件regex-urlfilter.tx ...

  6. OpenCV特征点检測------Surf(特征点篇)

    Surf(Speed Up Robust Feature) Surf算法的原理                                                              ...

  7. 【转】Android 服务器之SFTP服务器上传下载功能 -- 不错

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

  8. WPF学习(二) - 绑定

    绑定,这个看起来很神奇的东西,于我这种喜欢刨根儿的人而言,理解起来非常困难.    WPF绑定的核心思想是:数据层属性值的改变,能反应给展示层,反之亦然,并且这个响应的过程能被分离出来. 传统Winf ...

  9. STL数组和com数组相互转换的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 STL的泛型数组是vetor,com的泛型数组类型是VARIANT.二者怎样能相互转化呢?就是说怎么把一个vector ...

  10. (转载)android 一些工具类汇总

    android 一些工具类汇总 作者:曾田生z 字体:[增加 减小] 类型:转载 时间:2016-08-14我要评论 本文给大家汇总介绍了一些常用的Android工具类,非常的简单实用,有需要的小伙伴 ...