怎么样才算是精通 C++?
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++的掌握有两个级别:
拥有C++的readability(可读性)认证。通过这个认证须要在实际工作中写出一个比較复杂的完整的类,然后将这个类提交到一个委员会进行审查,委员会会帮你纠正常见的错误。假设你的这个类满足style guide[1]的全部要求,一两个星期之后你就行拿到可读性认证。一般来说,你须要在实际工作中写过至少几千行代码才干达到这个要求。
C++的readability对project师的意义主要有两个。一个是熟悉并避免C++的缺陷(比方不要使用iostream和exception)。还有一个是熟悉一些经常使用的库函数(比方string的各种操作。hash_map和smart pointer的使用等)。通过这个认证之后,project师就有权利在code review中批阅其他人写的C++程序(注意这个不是readability review)。
绝大多数project师对C++的掌握处在这个水平。
顾问级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++?的更多相关文章
- 怎么样才算是精通 Python?
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:weixin_45587093 你们所说的什么要怎样数据分析.爬虫.We ...
- 学多少年才算“精通Java”?
我从毕业做程序员就开始用 Java,到现在已经工作快 20 年了.减去我做手游用 C++.Lua 的几年,再减去后来转管理写代码少的时间,我真正写 Java 代码的时间至少也在 10 年以上. 如果你 ...
- 什么样的类才算是一种可重用的组件,即JavaBean?
每一个类实现了Bean的规范才可以由Spring来接管,那么Bean的规范是什么呢? 必须是个公有(public)类 有无参构造函数 用公共方法暴露内部成员属性(getter,setter) 实现这样 ...
- 怎样才算精通Linux
1.掌握至少50个以上的常用命令(包括grep.awk.sed.ps.find等等吧,熟练使用,基础的选项不用man) 2.熟悉Gnome/KDE等X-windows桌面环境操作 3.掌握.tgz.. ...
- 【转】Java Future 怎么用 才算是真正异步
接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果. Callable接口类似于Runnable,从名字就可以看出来了,但 ...
- 你知道python入门,是学到什么程度才算是吗?
1.入门的标准是什么? 这是很多初学者都关注的问题,但又是一个很难回答的问题,问题的核心是采取什么标准来衡量一个人是否已经入门. 以知识量的多少来衡量是不是可行呢?有些人走马观花一般学了很多pytho ...
- 何为“精通Java”
何为精通Java?本来Java仅仅是一门语言,但从应用技术的角度来看,精通Java是可以无边无际的.很可能你可以对James说:我精通J2EE.JVM.Java服务器.大数据等等一些和Java相关的应 ...
- 第一章:Python基础の快速认识基本语法
本課主題 第一个 Hello World 程序实战 用户输入实战 模块介紹 变量介绍 格式化介紹 条件判断介紹和操作实战 for 循环介紹和操作实战 作业需求 Python 第一个 Hello Wor ...
- [转] Java 的泛型擦除和运行时泛型信息获取
原文链接 https://my.oschina.net/lifany/blog/875769 前言 现在很多程序员都会在简历中写上精通 Java.但究竟怎样才算是精通 Java 呢?我觉得不仅要熟练掌 ...
随机推荐
- django-10-中间件和上下文管理器
<<<中间件的引入>>> 用户<->中间件<->url->视图 在app目录里面 middleware.py (1)中间件就是一个 ...
- django-1-框架介绍
<<<python虚拟环境>>> 用django框架做web开发必须要用到python虚拟环境,而且一个虚拟环境只能创建一个django项目,如果创建多个djang ...
- LCA题集
点的距离(模板题) 树中两点间的距离就是d[u] + d[v] - 2 * d[lca(u, v)] #include<bits/stdc++.h> #define REP(i, a, b ...
- 自备LocalDateTime工具类
package cn.zytao.taosir.common.utils; import java.time.Instant; import java.time.LocalDate; import j ...
- React入门基础
1-react概念: React是一个用于构建用户界面的JavaScript库.React主要用于构建UI,很多人认为React是MVC中的V(视图).React起源于Facebook的内部项目.Re ...
- javaScript将string转换成array,并将汉字按汉语拼音排序方法
亲测,代码如下: var str = '中华人民共和国民主富强': var arr = str.split("");//字符串装换数组方法一 //arr = str.replace ...
- java properties类读取配置文件
1.JAVA Properties类,在java.util包里,具体类是java.util.properties.Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值 ...
- HDU 4035
dp求期望的题. 设 E[i]表示在结点i处,要走出迷宫所要走的边数的期望.E[1]即为所求. 叶子结点: E[i] = ki*E[1] + ei*0 + (1-ki-ei)*(E[father[i] ...
- 玩转iOS开发 - Runloop 具体解释
Runloop 具体解释
- iOS开发自己定义键盘回车键Return Key
在iOS开发中.用户在进行文本输入的时候,往往会用到虚拟键盘上的回车键,也就是Return Key.回车键有时候能够是"完毕"(表示输入结束).能够是"下一项" ...