在工作快三年的时候,突然想到我需要凝练下自身的知识体系。从大一开始接触c++,差不多快8年了。想想过去走过的学习之路,很简单,也很曲折。

经历了从一无所知——入门——应用——修修补补的过程,到现在可以说我可以用c++完成我能想到的任何功能,或者说编程语言上没有任何障碍。

所以,抽出一个月的下班时间重新读了一下几本书:

《Thinking in C++ 2nd》(中译名《c++编程思想》,分两卷)

Effective c++和More Effective c++

The C++ Programming Languages(特别版)

其中看到一句话很有感触,“c++是一门可以伴随你成长的语言”。

c++相对而言,是一个多泛型的编程语言,包括过程式、基于对象、面向对象、通用编程几个分类,或者换种说法,c++可以认为是以下几个内容的复合:

  • better c
  • ADT(Abstract Data Type,抽象数据类型)
  • OOP(面向对象编程)
  • GP(Generic Programming & Template)

工作中用的最多的还是前三个,至于GP,可能需要了解的就是STL的各种容器和算法。

从这一个月的书籍阅读情况来看,我对c++基础语法、自定义类型、继承和多态都是相对比较了解的。但对异常处理机制、输入输出流、STL的算法及迭代器了解不是很多。后续可以从这方面入手,提升下我对GP的理解。

实际学习的过程中,主要是学习解决及处理问题的能力,我们需要把需求满足或者bug解决,这个过程需要大量的软件工程设计和软件调试的知识。因此,学习及应用c++的过程不可避免的涉及到操作系统相关的内容(尤其是c++标准不包含并发机制、界面的情况下)。以Windows为例,我们需要了解Visual Studio的使用、Windows基础编程、Win32运行机制、MFC界面及内部处理机制、内核运行机制、网络通信机制,这都需要很多的努力去了解深入,需要适量的练习编码,以加深我们对相关概念的理解。就拿最简单的命令行程序而言都有大量的函数及接口,保证程序的可视化效果,不对相关资料做深入学习,是不可能有更全面的认识的。

另一个方面就是bug跟踪及解决的能力,这涉及到windows调试技巧、Visual Studio调试方法,也涉及部分编码规范的内容,如何在代码中尽可能少的引入bug。比如说我们可能需要学习windbg的使用、异常崩溃的堆栈分析,也可能需要学习一些代码静态分析工具的应用。

为了提升我们代码的质量,我们还需要阅读各种软件工程实践的书籍,学习前人的知识、经验,了解设计模式、软件开发规范、数据结构、算法等。

所以说这个过程断断续续,修修补补,在这个过程中不断地成长,经历各种洗礼,这样方能把自己的知识体系推向更高的水平。

这一个月的深入总结,个人感觉我可以从以下几个方面,继续深入的学习:

  • 异常处理机制

应用的不多,可以尝试使用下,对比下传统的c的错误处理机制到底有何不同。

  • GP&STL

STL目前基本会用,可以试着了解下boost库,学习GP那本最经典的数据。

  • 数据结构&算法

关注数据结构和算法是因为程序设计是与数学分不开的,可能多数情况下我们都是可以直接使用成熟的算法和套路,但是全部放下终究会沦为过时的境地。

  • c++ 0x/c++ 14

了解c++新的标准,目前了解不多,这方面可以深入学习下。

  • 编译原理及汇编

其实就是为了回答编译器是如何将c++源代码转化为可执行程序的,中间做了什么,如何把汇编语言嵌入到现有代码中,以提高程序性能。

  • 性能优化及分析

这方面主要是回答如何提升指定功能的执行效率,可能需要改进算法,也可能跟代码组织有关。

当然这些是我目前能想到的,不会全部了解,一点点的来,选取几个主题,深入下去就好了。

写这么多,只是为了提醒自己,不管做什么,做到精通这是最终目标追求。

附:c++分级

初入江湖——惨不忍睹
---任何一版c++入门教程(c++ primer)

小有名气——将就着用
Thinking in C++ 2nd edition Bruce Eckel
c++编程思想 第二版, Volume 1、Volume 2

名动一方——在大是大非的问题上立场坚定
Effective C++(第二版) 和 More Effective C++ Scott Meyers (Lostmouse、候捷 等 译)

天下闻名——正确的使用C++的每个特性
C++程序设计语言——特别版 Bjarne Stroustrup (裘宗燕 译)

一代宗师——掌握通用程序设计思想
范型编程与STL Matthew H. Austem (候捷 译)

超凡入圣——清楚C++的每个细节
ISO/IEC 14882: Programming Languages-C++ ISO/IEC

天外飞仙——透过C++的军大衣,看到赤裸裸的汇编码
GCC的源码烂熟于胸,有事没事的随便写个编译器玩玩

-------------------------------------------------------------------

本文作者:Tocy

版权所有@2015,请勿用于商业用途,转载请注明原文地址。本人保留所有权利

2015-06学习总结——c++的更多相关文章

  1. 转帖 云和恩墨 http://www.eygle.com/archives/2015/06/sql_version_count.html

    SQL多版本控制 - _CURSOR_OBSOLETE_THRESHOLD   作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道]链接:htt ...

  2. arXiv 2015深度学习年度十大论文

    由康奈尔大学运营维护着的arXiv网站,是一个在学术论文还未被出版时就将之向所有人开放的地方.这里汇聚了无数科学领域中最前沿的研究,机器学习也包括在内.它反映了学术界当前的整体趋势,我们看到,近来发布 ...

  3. Cheatsheet: 2015 06.01 ~ 06.30

    Web The Front-End Optimization Checklist [ASP.NET 5] Production Ready Web Server on Linux. Kestrel + ...

  4. 译文 [ROM][多国语言][2015.06.11] Lenovo S750 (MTK6589) - andrea_d86-lenovos750-4.2.2

    ************************************************** andrea_d86-lenovos750-4.2.2-150530 ************** ...

  5. http://www.cnblogs.com/yaozhenfa/archive/2015/06/14/4574898.html

    笔者这里采用的是mongoDB官网推荐使用.net驱动: http://mongodb.github.io/mongo-csharp-driver/2.0/getting_started/quick_ ...

  6. VS.Net 2015 Update3 学习(2) jquery-form, jquery-validation,jquery-validation-unobtrusive一起用

    我觉DataAnnotations非常酷的一个功能.但是教程中的@ajaxform的却不怎么优雅,需要全局的onSucces等函数.因此我使用jquery-form做ajax提交. function ...

  7. VS.Net 2015 Update3 学习(1) 支持Webpack

    让vs.net 编译的时候自动执行webpack 首先 管理员模式下打开 “Developer Command Prompt for VS2015", 是管理员模式啊! 然后进入 cd c: ...

  8. Python实现WEB QQ 登录与消息发送(第一版本 2015.06.26)

    WEB QQ的登录步骤与协议,需要的度娘下,很多. 转载说明来源:http://www.cnblogs.com/ryhan/p/4602762.html 我这实现是参考了度娘搜的 和自己抓包分析的. ...

  9. 2015.06.11,技术,关于Matlab中的Jbtest检验

    总体分布的正态性检验一般采取Jarque-Bera检验方法. 1. JBTest检验的定义: 在统计学中,Jarque-Bera检验是对样本数据是否具有符合正态分布的偏度和峰度的拟合优度的检验.该检验 ...

  10. Linux就该这么学06学习笔记

    参考链接:https://www.linuxprobe.com/chapter-06.html 1.一切从“/”开始 Linux系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准( ...

随机推荐

  1. selenium的运行时异常

    selenium这个库是一个伟大的库,它赋予了程序员控制浏览器的能力.但是如果不理解这个库的设计上的一些哲学,就会遇到很多问题. selenium支持多种浏览器,但是这些浏览器里面,只有firefox ...

  2. JavaScript Cookies,创建,获取cookies value

    什么是cookie? cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 来创建和取回 cookie ...

  3. libevent终于编译通过了

    在网上找了个例子,其实libevent本身带了很多测试用例,不过这是第一次编译成功,尼玛 各种高性能IO库都是在linux下的,win32果断被bs了,还好有libevent对win32支持的比较好. ...

  4. 关于ARP协议

    什么是arp协议: arp协议是地址解析协议,英文是address resolution protocol 通过IP地址可以获得mac地址 两个主机的通信归根到底是MAC地址之间的通信 在TCP/IP ...

  5. C链表的简单案例

    此案例只是简单的使用链表 链表的特点: 1.不需要提前知道要存入数据的长度 2.最后结点为NULL 3.头结点指向下一个结点的结构体指针 #include <stdio.h> #inclu ...

  6. Nginx对某个目录或整个网站进行登录认证的方法

    比如要对 网站目录下的 test 文件夹 进行加密认证 首先需要在opt 的主目录中 /opt/ 创建一个新文件 htpasswd此文件的书写格式是用户名:密码每行一个账户并且 密码必须使用函数 cr ...

  7. 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目

    作者简介:akshay pai,数据科学工程师,热爱研究机器学习问题.Source Dexter网站创办人. TensorFlow是Google的开源深度学习库,你可以使用这个框架以及Python编程 ...

  8. 开源的PaaS平台

    原文地址:https://blog.csdn.net/mypods/article/details/9366465 1.Stackato Stackato 是一个应用平台,用来创建私有.安全和灵活的企 ...

  9. Mac添加快捷键开启应用程序(转)

    最近使用终端比较多点,打开终端的方法有几种:比较常用有把终端添加到Dock栏上,然后就是利用Spotlight搜索Terminal来打开.但是两种方式还是让我感觉不太满意. 当开启的程序比较多的时候, ...

  10. Javascript MVC 学习笔记(一) 模型和数据

    写在前面 近期在看<MVC的Javascript富应用开发>一书.本来是抱着一口气读完的想法去看的.结果才看了一点就傻眼了:太多不懂的地方了. 仅仅好看一点查一点,一点一点往下看吧,进度虽 ...