C#转C++的一点分享
前几天看到这样一篇博客《那些年·我们读过的专业书籍》,里面列了很多大家认为很好的书,加上自己在自学C++的工程中也看了不少书,感觉并不是所有的书都值得花时间去看的,毕竟很多人一年下来也看不了2,3本书,不同的技术能力的人,适合看的书都不太一样,在这么多大家都认为是经典的书中,选出几本真正适合自己的才是王道,经典一多了,有些比起来就不是那么经典了,当然大家都说经典,自然有可看之处,如果有多余的时间,多看些书自然是好的。
下面是我看过的技术书籍(不一定看完),还有本《程序员的自我修养》在老家,其他几本不怎么样就没有列出来。
买的第一本技术书籍是《数据结构与算法分析》
当时刚毕业不久,在学校时没有买技术书籍的概念,在学校时也没怎么逛过技术网站,毕业后逛得比较多,当时是做C#,那时Android很火想学,内心又一直认为成为一名好的程序员,底层知识是要会的,当时的情况是:在做C#,想做Android,又想做C++,没准备长做C#,最后买了这本算法相关的书籍,决定学C++,注意准备开始吐槽:是谁说程序=算法+XX,这个等式对于很多刚毕业的同学们根本不成立,算法对于大部分的程序员来说都是弱项好不好,很多菜逼根本就不会算法,就会增删改查,有木有,别一开始就来最难的,容易打击自信心,是谁说算法很重要的,哥才写了90多篇博客,就有19篇跟算法有关的,私底下也学习了很多算法相关的文章,哥是要转C++好不好。吐槽告一段落,算法还是很重要的,有时间还是要好好研究一下。
《Effective C++》买的第一本完全关于C++的书
刚开始都看不懂,反复看之后,就很懂了,到现在为止应该至少看了4遍,感觉现在给我大半天的时间,能大致在看一遍,曾经一度想把书中的50条法则写成几篇博客的,最后由于太懒只写了3篇
Effective C++构造函数析构函数Assignment运算符
开始没看懂的时候,没觉得这书怎么样,等一条一条的看懂之后,发现这书他妈的写得太好,我忍不住的要赞美他,作者用很短的几句话就把事情说得很清楚,作者的表达能力的确牛逼,再次发现作者表达能力特别牛逼的是看吴军的《数学之美》,他用几句话就把一个关于图的问题讲得很清楚,其他的一些所谓的经典作者写的内容看起来就不是那么好理解,当然这跟讲的内容、跟读者所掌握的的知识以及读者的理解能力有关。
如果你要学C++,那么我推荐你看这本,虽然它没有教我们入门C++,也没有教我们深度理解C++,也没讲更底层的知识,但是它是第一本,将很多关于C++编程的重要知识点收录成的第一本书,第一本自然收录的是在开发中出现频率较大的,值得一讲的内容,之后有很多所谓经典的跟风之作,如
《Exceptional C++》和《More Exceptional C++》,包括作者自己的《More Effective C++》,
当然这些书中讲的内容可能是你八辈子也用不上的,但可能是要掌握的,这些书讲的差不多是一些技巧性的东西,或是实现了一个XX功能,有点通用性,人家把这些点讲得很清楚,这类书不用急着看,等你C++学得差不多了,再看也不迟,那时会看得很快,因为他们没讲什么新的知识,都是对现有知识的运用。
《深度探索C++对象模型》要想更深入的理解C++,当然是这本,这本真的是经典中的必看。
这本书共7章320页,但出版社却把它弄得比较厚,好像不厚就感觉不是好书似的。每章的内容都很不错,建议重点看第三章和第四章,第三章讲C++对象的内存布局,第四章讲C++的各种方法编译后是啥样子的,以及方法是怎么被调用的,这是C++最重要的东西,其他任何技术不都是建立在数据和方法之上吗!当然如果你是菜鸟看完之后你还是菜鸟,你不会变成大牛,因为我看了这些书后我并没有变成大牛,你同样也不会,但你会更深入的理解C++,你会对你自己的能力更自信。看完这本书后,我觉得我可以做C++了,于是跨部门面试,十分钟左右,我现在的经理就问我什么时候可以过来。当然刚开始做C++时各种不顺,实战太少。你不会因为看了几本书而成为大牛。看这本书之前除了《编译原理》还没有买,其他的书都看完或是看过一些,刚开始的时候有点看不懂,之后很快的看懂并看完了,因为看这本书之前我反复看了《深入理解计算机系统》的第七章(链接)和《程序员的自我修养》的大部分内容,对编译和链接还是有些了解,再看这本书自然会快些。看完这本书我写了三篇博客,但看的人很少。
《深入理解计算机系统》就不多说了,估计每个过来人都会推荐,如果你想成为一名好的程序员,就是必看必看,不管你是什么程序员,我相信很多C#牛逼的程序员都看过,这本书讲了很多重要的知识,不是很深,但装逼足以,要全都看懂还是有些难的,之前就有个同事买了这本书,里面夹了一张跟他有纯洁男女关系的女性朋友的照片,作为书签,,这的确是督促自己看书的好方法。关于这本书我写了两篇博客,用这本书的内容写博客可以写很多篇。
由于我一直在自学C++,重点推荐这3本,前两本推荐指数更高:
1:深度探索C++对象模型
2:深入理解计算机系统
3:Effective C++
其他的一些书都是值得看的,写到这里就有点不想写了,再说一本吧,其他的就不多说了,看完了上面这三本,再看其他的。由于我是做Windows C++开发,就说说《Windows核心编程》,做Windows开发的同学要看看。关于这本书我写了4篇博客
这4篇博客基本上是讲线程、进程、内核对象、线程同步。这本书讲了Windows操作系统的很多东西,如内存管理,动态链接库,这些都是做Windows开发需要知道的,也是我比较薄弱的,在开发中基本都是用库,现在做的项目,两个Solution,其中一个有100多个project,刚开始来的时候经常编译都通过不了,加上每次编译的时间较长,搞了半天编译失败,挺打击人的。
关于书的内容就说到这里,免得大家以为我是来说书,显然说书不是我的强项,现在就来说说转C++的一些感受。
老实说如果现在用的是C#、JAVA、PHP等,且没用过C/C++不太建议转C/C++,但非常建议多看看底层的知识,C#做了几年之后发现也就是那点东西,不深入学习,很多东西其实是只会用,根本不知道到底是怎么回事。我相信很多C#程序员不知道多态到底是怎么实现;方法到底是怎么被调用的;不知道哪些是在编译器确定,哪些是在运行时确定的;经常听到字符串池的概念等,微软把C#封装得太好了,掉坑里的机会太少了,大不了不管3721,try...catch一下,也让有些人变得不那么爱思考了,像C/C++一不小心就掉坑里了,不思考都不行。经常听到有人说:C#入门容易,精通难。那是因为学底层的知识更难些好不好。说这些不是针对谁,以前写C#就是吃着火锅唱着歌,各种轻松舒服,C++就两字:苦逼。要啥啥没有,如分割字符串这种最基本的功能都得自己实现,刚做C++的感觉就是:自己坐在豪华的游艇上,看到对面的海盗船很酷,于是就往海盗船一跳,一上船发现这坐船到处都在漏水,各种设施都很差劲,一不小心就掉水里了,各种感觉不适应。
学C++好很长时间吗?不要
从自学C++到现在差不多3年时间,期间多次想放弃,心中常有的一个念头就是:把这些时间用在学C#,C#可以学得更好,工资可以拿得更多,每次看到发到手中的这点工资,就没啥干劲了,但我也一直明白若要把程序当做一个长久的职业,我是要必会C/C++的,期间偶尔有几个月没有学C++,但最后还是放不下,又想起她。最后拖到两年多才做自己一直想做的C++,感觉是个很漫长的过程,内心的针扎还是挺多的。这两年来业余时间拿来学习C++的时间平均在半个小时左右,跟10000个小时比起来还是很少的,当然10000个小时是要成为真正的大牛的,而我是刚上贼船,看了这么多书理论还是有些,还需大量实战。
C++很难吗?NO
C++被成为世界上最难的编程语言,其实并没有传说中的那么难,但有一点是可以肯定的C++程序员在没有成为小牛之前一直都在针扎,对,就是针扎,过得很苦逼,我在上个部门做C#的时候没加过一天班,做C++后,以前的同事说我瘦了,以前做C#用一个月的时间一个人重写了公司的工作流,做C++后,花了两个多月做个历史管理器,还经常加班。虽然现在自信多了,但还要继续针扎下去。等成为小牛后,我相信就不分编程语言了,但如果你不是做C/C++,却想做C/C++,就别听语言都是浮云这种废话。在你成为小牛之前你才是浮云,你得苦逼,而且这是转行,这也是我不太建议转C/C++的一个原因,你之前学到的很多东西都是白学的,你要从0.1开始,又开始做菜鸟,大家都知道菜鸟的日子不是那么好过,等你成为小牛之后编程语言才是浮云。为什么大家都说他难呢?我估计就是被哪些没学好的人宣传的,没学好之前过得苦逼,那当然发自内心的认为难,其他的朋友们听他们一说估计也觉得难。在加上一些大牛也说C++难,人家说难不是因为自己没学好而说难,人家是因为知道得大多,发现C++太灵活,坑太多,新手很容易掉坑里。要我说,任何编程语言,基础语法也就那点东西,等你明白了这些基础的东西是怎么实现,为什么要这样实现,编译后是个什么样子,你也就发现C++也就那样,不管牛不牛,也都是在用C++干活,只不过是有的人再用C++做增删改查,有的人在做大家都在用的产品。
怎么学习C++?标准答案是:多思多写多看
作为新菜鸟的我,是不应该回答这个问题的,但这个问题的正确答案的确是多思多写多看。现在来说说我的失败经历,作为智商不太低的我,学了两年多才做C++,这显然是失败(哈哈,程序员就应该自信,千万别怀疑自己的智商,一点都不能有)。的确我是走了弯路,所以我像很多有失败经历的前辈一样,来分享自己的失败经历,以免后辈们重蹈前辈们的覆辙。
我学了好久的C++,都不会写一个C++的类,其实开始的时候一直都是在写C,一直在用C写算法,严重受了算法重要的影响,其实开始的时候我都不是在学C++,买的第一本技术书,不是关于C++的,而是关于算法的。学C++的时候也没有买一本比较好的系统介绍C++的书籍。直接第一本C++书籍就是Effective C++,看这本书还是要一定基础的。看这本书的时候我已经做了两年多的C#,在学校里有一点C的基础,之后也看过《高质量C++编程指南》,还是有一定的程序基础,如果你有一定的程序基础,想转C++,还是建议先看本系统介绍C++的书籍,如《C++ Primer》,这本书的作者也是《深度探索C++对象模型》的作者,还有C++他爹写的那本啥也值得一读,大家都是这么说,应该不会错,两本选一本,有一定基础之后再看Effective C++,感觉不错之后再看《深度探索C++对象模型》,这本差不多之后再看《深入理解计算机系统》,这本不是讲C++的,讲的是底层的东西,你学C++不就是想学底层的东西吗,C++语法就那点东西,成为牛人之前还有一堆的书等着你去看,你还要写一堆的代码。
我现在在学习Windows的一些东西,做Windows C++方向吗!业余时间看看《编译原理》,比较难懂,看懂之后,我相信很多东西都会明白得更透彻。明年估计是我成为小牛的重要阶段,阿汉加油。
为了不让我的博客因偏差太大,而让想做C++的朋友走弯路,在这里付上耗子叔的《如何学好C++语言》 http://coolshell.cn/articles/4119.html
C#转C++的一点分享的更多相关文章
- Unity Post-Processing的一些分享
讲些什么? 绝大多数的游戏或多或少都会使用些后处理效果. 早期版本中,Unity在提供的接口有限,优化空间不大,属于放任自流.官方推出了Post-Processing(下文简称PP)并在Github上 ...
- 就这么漂来漂去---一个毕业三个月的java程序员的裸辞风波
注:这并不是一篇技术文章,而是记录了我这几个月经历的入职,裸辞,找工作的心路历程,简单介绍一个博主的情况,我是16年毕业生,校招进了一家北京的公司,java开发,和很多年轻人一样,干了一段时间,我发现 ...
- python 爬虫抓取心得
quanwei9958 转自 python 爬虫抓取心得分享 urllib.quote('要编码的字符串') 如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用: urllib.quo ...
- 如何将angular-ui的分页组件封装成一个指令
准备工作: (1)一如既往的我还是使用了requireJS进行js代码的编译 (2)必须引入angualrJS , ui-bootstrap-tpls-1.3.2.js , bootstrap.css ...
- 原创:Docker在云家政的应用 谢绝复制粘贴内容
我们公司目前大规模使用了Docker,目前除了数据库应用,其他所有应用都在Docker容器内运行,下面我就Docker在公司的应用做一些分享.. 首先我介绍一下公司的背景,公司属于中小型创业公司,服务 ...
- Python_在Ubuntu中搭建科学计算环境
本文针对 Ubuntu 下搭建 Python 科学计算的环境,罗列了关键词和部分链接,最后附上了自己的一点分享. 1.升级 关键词: python ubuntu 升级 推荐: ubuntu16.04下 ...
- Spring Cloud微服务如何设计异常处理机制?
导读 今天和大家聊一下在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时,一个微服务一般来说不可避免地会同时面向内部和外 ...
- CodeFirst体验之且行且珍惜
CodeFirst作为一种新的开发理念和方式,EF Code-First相对于MVC中的DataFirst,ModelFirst确实开发效率确实高点,至少数据库建表这一块,直接用类映射到数据中,标记 ...
- 如何将angular-ui-bootstrap的分页组件封装成一个指令
准备工作: (1)一如既往的我还是使用了requireJS进行js代码的编译 (2)必须引入angualrJS , ui-bootstrap-tpls-1.3.2.js , bootstrap.css ...
随机推荐
- Ext开场布局设计Viewport
//加载dwr dwr.engine.setAsync(false); //***************************************框架定义部分***************** ...
- Hyper-V 共享式网络链接 端口映射
远程路由访问我配置了很久都不成功,经过多方搜索,现面的命令能实现端口映射一.查询端口映射情况netsh interface portproxy show v4tov4查询这个IP所有的端口映射.net ...
- Problem 2136 取糖果---FUOJ (线段树+维护)
http://acm.fzu.edu.cn/problem.php?pid=2136 题目大意: 给你n个袋子每个袋子里都装有糖果,然后呢你可以每次抽取一个连续的一个区间的袋子,然后带走里面最多糖果数 ...
- 【洛谷P1080】国王游戏
我们按照左右手数的乘积升序排序,就能使最多金币数最小了 为什么呢? 我们知道: 1)如果相邻的两个人交换位置,只会影响到这两个人的值,不会影响他人 2)假设相邻的两个人i, i + 1.设A[i] B ...
- java中两个值互换
两个值互换有以下三种方式: 使用临时变量(此种方法便于理解) x = 10; y = 20; //begin int temp = x; x = y; y = temp; //end; //此时x = ...
- android shape的使用
文章出自:http://www.cnblogs.com/cyanfei/archive/2012/07/27/2612023.html <?xml version="1.0" ...
- MySQL设置字符集CHARACTER SET
本文地址:http://www.cnblogs.com/yhLinux/p/4036506.html 在 my.cnf 配置文件中设置相关选项,改变为相应的character set. 设置数据库编码 ...
- kafka go producer 启动基本配置
1.官网上下载kafka安装包:http://kafka.apache.org/downloads.html 2.执行命令运行zookeeper 实例(单点): bin/zookeeper-serve ...
- 从C#到Objective-C
Objective-C 程序设计语言采用特定的语法,来定义类和方法.调用对象的方法.动态地扩展类,以及创建编程接口,来解决具体问题.Objective-C 作为 C 程序设计语言的超集,支持与 C 相 ...
- solr与.net系列课程(三)solr连接数据库
solr与.net系列课程(三)solr连接数据库 上一章直接讲述的配置文件把大部分人看的很迷惑,大家都想听的是solr到底是怎么用的,好,这一节我们就开始链接数据库,首先讲一下连接之前都要配置哪些 ...