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. Selenium:简单的尝试一下

    一.创建maven工程引入依赖 1)创建项目 创建一个简单的maven工程即可 这里我使用jar项目进行简单的演示 2)引入依赖 <dependencies> <dependency ...

  2. js常用事件及事件对象

  3. 5kcrm增加权限管理中的模块(签到统计)

    1 首先在model表增加模块名称 2 在controll里增加方法 3 在授权的html增加表单

  4. 【【henuacm2016级暑期训练】动态规划专题 D】Writing Code

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二维费用背包. f[i][j][k] 前i个人,写了j行,bug不超过k的方案数. 可以把每个人看成是一个物品. 它可以无限拿.然后 ...

  5. Windows系统环境变量、JAVA环境变量配置以及JVM加载过程

    一:用户变量和系统变量的区别 右击我的电脑.属性.高级系统设置.环境变量. 对话框的上面为Administrator的用户变量,对话框的下面为系统变量.我们所说的环境变量一般指系统环境变量,对所有用户 ...

  6. echarts 柱状图和饼状图动态获取后台数据

    运用echarts来实现图表 1.首先下载echarts包  http://echarts.baidu.com/echarts2/doc/example.html,在这里我下载的是 2.将echart ...

  7. HDU 4259

    虽然知道是置换,却很久没有思路.忽然想到,由初始状态A经过变换后回到A状态,应该是不停循环可重复的.于是,猜想数字的位置也是重复循环的.拿了个例子验证了一下,某然是这样.例如第二个10,3的例子有1- ...

  8. poj 3259 bellman最短路推断有无负权回路

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36717   Accepted: 13438 Descr ...

  9. codeforces Looksery Cup 2015 H Degenerate Matrix 二分 注意浮点数陷阱

    #include <cstdio> #include <cstring> #include <algorithm> #include <string> ...

  10. 数据结构—单链表(类C语言描写叙述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不连续的) ...