前几天看到这样一篇博客《那些年·我们读过的专业书籍》,里面列了很多大家认为很好的书,加上自己在自学C++的工程中也看了不少书,感觉并不是所有的书都值得花时间去看的,毕竟很多人一年下来也看不了2,3本书,不同的技术能力的人,适合看的书都不太一样,在这么多大家都认为是经典的书中,选出几本真正适合自己的才是王道,经典一多了,有些比起来就不是那么经典了,当然大家都说经典,自然有可看之处,如果有多余的时间,多看些书自然是好的。

下面是我看过的技术书籍(不一定看完),还有本《程序员的自我修养》在老家,其他几本不怎么样就没有列出来。

买的第一本技术书籍是《数据结构与算法分析》

当时刚毕业不久,在学校时没有买技术书籍的概念,在学校时也没怎么逛过技术网站,毕业后逛得比较多,当时是做C#,那时Android很火想学,内心又一直认为成为一名好的程序员,底层知识是要会的,当时的情况是:在做C#,想做Android,又想做C++,没准备长做C#,最后买了这本算法相关的书籍,决定学C++,注意准备开始吐槽:是谁说程序=算法+XX,这个等式对于很多刚毕业的同学们根本不成立,算法对于大部分的程序员来说都是弱项好不好,很多菜逼根本就不会算法,就会增删改查,有木有,别一开始就来最难的,容易打击自信心,是谁说算法很重要的,哥才写了90多篇博客,就有19篇跟算法有关的,私底下也学习了很多算法相关的文章,哥是要转C++好不好。吐槽告一段落,算法还是很重要的,有时间还是要好好研究一下。

《Effective C++》买的第一本完全关于C++的书

刚开始都看不懂,反复看之后,就很懂了,到现在为止应该至少看了4遍,感觉现在给我大半天的时间,能大致在看一遍,曾经一度想把书中的50条法则写成几篇博客的,最后由于太懒只写了3篇

Effective C++面向对象与继承

Effective C++ 类与函数设计和申明

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++时各种不顺,实战太少。你不会因为看了几本书而成为大牛。看这本书之前除了《编译原理》还没有买,其他的书都看完或是看过一些,刚开始的时候有点看不懂,之后很快的看懂并看完了,因为看这本书之前我反复看了《深入理解计算机系统》的第七章(链接)和《程序员的自我修养》的大部分内容,对编译和链接还是有些了解,再看这本书自然会快些。看完这本书我写了三篇博客,但看的人很少。

构造函数产生的点及原因

虚方法的调用是怎么实现的(单继承VS多继承)

C++ Data Member内存布局

深入理解计算机系统就不多说了,估计每个过来人都会推荐,如果你想成为一名好的程序员,就是必看必看,不管你是什么程序员,我相信很多C#牛逼的程序员都看过,这本书讲了很多重要的知识,不是很深,但装逼足以,要全都看懂还是有些难的,之前就有个同事买了这本书,里面夹了一张跟他有纯洁男女关系的女性朋友的照片,作为书签,,这的确是督促自己看书的好方法。关于这本书我写了两篇博客,用这本书的内容写博客可以写很多篇。

数据对齐

在开发中你可能没有考虑到的两个性能优化

由于我一直在自学C++,重点推荐这3本,前两本推荐指数更高:

1:深度探索C++对象模型

2:深入理解计算机系统

3:Effective C++

其他的一些书都是值得看的,写到这里就有点不想写了,再说一本吧,其他的就不多说了,看完了上面这三本,再看其他的。由于我是做Windows C++开发,就说说《Windows核心编程》,做Windows开发的同学要看看。关于这本书我写了4篇博客

多线程编程--5种方法实现线程同步

Windows几种线程同步方法介绍

Windows线程基础

Windows内核对象简介

这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++的一点分享的更多相关文章

  1. Unity Post-Processing的一些分享

    讲些什么? 绝大多数的游戏或多或少都会使用些后处理效果. 早期版本中,Unity在提供的接口有限,优化空间不大,属于放任自流.官方推出了Post-Processing(下文简称PP)并在Github上 ...

  2. 就这么漂来漂去---一个毕业三个月的java程序员的裸辞风波

    注:这并不是一篇技术文章,而是记录了我这几个月经历的入职,裸辞,找工作的心路历程,简单介绍一个博主的情况,我是16年毕业生,校招进了一家北京的公司,java开发,和很多年轻人一样,干了一段时间,我发现 ...

  3. python 爬虫抓取心得

    quanwei9958 转自 python 爬虫抓取心得分享 urllib.quote('要编码的字符串') 如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用: urllib.quo ...

  4. 如何将angular-ui的分页组件封装成一个指令

    准备工作: (1)一如既往的我还是使用了requireJS进行js代码的编译 (2)必须引入angualrJS , ui-bootstrap-tpls-1.3.2.js , bootstrap.css ...

  5. 原创:Docker在云家政的应用 谢绝复制粘贴内容

    我们公司目前大规模使用了Docker,目前除了数据库应用,其他所有应用都在Docker容器内运行,下面我就Docker在公司的应用做一些分享.. 首先我介绍一下公司的背景,公司属于中小型创业公司,服务 ...

  6. Python_在Ubuntu中搭建科学计算环境

    本文针对 Ubuntu 下搭建 Python 科学计算的环境,罗列了关键词和部分链接,最后附上了自己的一点分享. 1.升级 关键词: python ubuntu 升级 推荐: ubuntu16.04下 ...

  7. Spring Cloud微服务如何设计异常处理机制?

    导读 今天和大家聊一下在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时,一个微服务一般来说不可避免地会同时面向内部和外 ...

  8. CodeFirst体验之且行且珍惜

    CodeFirst作为一种新的开发理念和方式,EF  Code-First相对于MVC中的DataFirst,ModelFirst确实开发效率确实高点,至少数据库建表这一块,直接用类映射到数据中,标记 ...

  9. 如何将angular-ui-bootstrap的分页组件封装成一个指令

    准备工作: (1)一如既往的我还是使用了requireJS进行js代码的编译 (2)必须引入angualrJS , ui-bootstrap-tpls-1.3.2.js , bootstrap.css ...

随机推荐

  1. oracle 中文乱码---查看和修改客户端字符集

    客户端NLS_LANG的设置方法 Windows: # 常用中文字符集set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK # 常用unicode字符集 set ...

  2. iOS支持图文混排的按钮(UIButton)

    创建UIButton子类 直接上代码了 .h文件 创建UIButton子类 直接上代码了 .h文件 #import <UIKit/UIKit.h> @interface GraphicBt ...

  3. jsp-javabean练习1

    package javaBean; public class JavaB2 { private String name="lhy"; private int xuehao=123; ...

  4. PopupWindow

    以前对于提示类型UI用到了PopupWindow 通过构造函数或者setContentView(View contentView)可以设置其显示内容: 显示时showAtLocation(View p ...

  5. C++中new和malloc的区别

    原文:http://blog.163.com/ji_wei8888/blog/static/4868044620117361747282/ 1.new 是c++中的操作符,malloc是c 中的一个函 ...

  6. Find Minimum in Rotated Sorted Array II leetcode

    题目链接 这个博客的算法思想简单好! 还是贴上自己的蹩脚代码吧!! class Solution { public: int findMin(vector<int>& nums) ...

  7. Java 修改Windows注册表,以实现开机自启动应用程序。

    使用Java修改Windows注册表,使用最基本的就是cmd命令. 事例和运行结果如下所示: package day01; import java.io.IOException; /* 1,reg a ...

  8. LAMP安全设置

    1.设置MySQL密码,删除多余root账号 [root@localhost ~]# mysql -uroot -p mysql>set password=password("111& ...

  9. PHP会话处理相关函数介绍

    PHP会话处理相关函数介绍 提交 我的评论 加载中 已评论 PHP会话处理相关函数介绍 2015-03-23 PHP100中文网 PHP100中文网 PHP100中文网 微信号 功能介绍 互联网开发者 ...

  10. python数据持久存储:pickle模块的基本使用

    经常遇到在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据. 这个时候Pickle模块就派上用场了,它可以将对象转换 ...