怎么样才算是精通 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 呢?我觉得不仅要熟练掌 ...
随机推荐
- python基础,函数,面向对象,模块练习
---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? # [] {} () None 0 2,位和字节的关系? # ...
- 紫书 例题7-14 UVa 1602(搜索+STL+打表)
这道题想了很久不知道怎么设置状态,怎么拓展,怎么判重, 最后看了这哥们的博客 终于明白了. https://blog.csdn.net/u014800748/article/details/47400 ...
- 浅谈密码加SALT原理
我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法, ...
- Apache Mahout 0.9、10.1、11. CardinalityException: Required cardinality 60 but got 29
我们可以使用Apache Mahout来快速创建高效扩展性又好的机器学习应用.Mahout结合了诸如H2O算法.Scala.Spark和Hadoop MapReduce等模块,为开发人员提供了一个 ...
- Nginx系列(四)--工作原理
上篇文章介绍了Nginx框架的设计之管理进程以及多个工作进程的设计.master进程用来管理通过fork子进程与子进程通信.子进程通过处理进程信号接到master的通信去处理请求. Nginx工作原理 ...
- ACdream 1127(Base Station-树状数组-2个约束条件)
Base Station Time Limit: 20000/10000MS (Java/Others)Memory Limit: 512000/256000KB (Java/Others) Subm ...
- Java类载入器
1. 系统载入器简单介绍 Java虚拟机中能够安装多个类载入器,系统默认三个主要类载入器(BootStrap.ExtClassLoader.AppClassLoader).每一个类载入器负责载入特 ...
- MySQL之----在java编程加强知识点
在数据中,建表处理是非经常见且非常有用的方法. 表和表之间的关系有 1:1 1:N N:N 三种方式. 1对1的方式 <span style="font-size:1 ...
- jquery时间格式化插件
插件的代码: (function($){ $.formatDate = function(pattern,date){ //假设不设置,默觉得当前时间 if(!date) date = new Dat ...
- CDOJ 876 爱管闲事 DP
爱管闲事 春希非常爱管闲事,他每天都会抽空帮助一些同学,由于春希非常死板,出于公平性,春希不会先帮助后来找他的同学. 现在有n个同学需要他的帮助,虽然他很想一天之类帮助所有人,但毕竟精力有限,于是他决 ...