BY 刘未鹏

===============
很久很久以前(..zzZzZZZ... :) ),我在百合的C++版上发过一个帖子,就是下面的东东.过了这么长时间,拿出来...
===============

以作回顾、以作借鉴、以作鼓励。。。

在上大学以前我从未涉及过编程这一领域,倒是对电脑比较感兴趣,这里所说的“电脑”是指粗浅的应用,我会为了从某一本杂志上看到了一则修改注册表的技巧而兴奋不已,然后回家赶紧尝试,却不名就里。上了大学,大一第一学期,学习的是“计算机基础”,就是那种讲如何操作Windows如何操作Word Excel的书,逃课一学期,觉得挺没意思,只是为大学里的自由感到畅快,可以不用被强制睡午觉,晚上可以海阔天空的闲侃乱弹。身在数学系,大一第一学期感觉数学分析挺有意思,较认真听课(现在想来那或许是我所有学科当中听的最仔细的一门,却也只听了一学期,其中还逃课若干(讲课的老头很不错)),然后那一学期数学分析神奇的拿了九十分(是我所有的学科中最高的),大一上其它课逃课率75%以上,有的课从不上。
    大一下是个转折点,我们开了C++程序设计课程,我在大一上的寒假前得知此事决定用寒假的时间先看完钱能的那本书再说,其中原因并非我那时对C++感兴趣,原因很“委琐”,是为了下学期能够逃课去看我mm,于是寒假结束我看到类那一章,以为小有所成(其实那时我连上机都还没上过,只是纸上谈兵罢了),然后,果然逃课一学期(直到学期末都不知道C++教师的名字),后来考了72分,心里不服,窃以为那老师出的题目太抠门,有些题目没意义也没意思(现在还这么想)。于是,大一下,我几乎又逃掉了所有的课,一无所成。只是觉得C++挺有趣的(这就是我所谓的“转折点”----一个人如果对某一样东西抱有充分的好奇和兴趣,假以时日,则必有所成,就像刘慈欣在他的《朝闻道》中所写的:“一个文明一旦对头顶的星空抱有了充分的好奇,那么离他们揭开宇宙的奥秘的时日就不远了”,“从远古第一条泥浆虫爬上岸到进化出古人类用了百万年时间,然而人类历史才多长?就已经创造出了这样的文明?”)。
    在大一下的暑假前,我幸运的又发现了侯捷的《深入浅出MFC》,这本书的封面以及侯捷其人的简介还有书内容的介绍都给我致命的吸引力,书的封面是一个登山者在夕阳下的剪影,有一句话:无限延伸你的视野!  我也记得侯捷其人的介绍,他用了陶渊明曾介绍自己的一段话为“模板”:先生不知何许人也,闲静少言,不慕名利,。。。好读书,求甚解,每有会意便击节高歌,欣然忘食,。。。嗜咖啡,妻严不能常得。。。,还有其书的介绍。
    就是这本书,在暑假里带我作了一次游历,这次游历令我终身难忘,本来,我可能像大多数数学系的同学一样,过了大一下,就投入数值计算,常微分,偏微分的”怀抱“,但是这本书让我着着实实领略到了C++的现实威力!MFC精致的内部架构令我迷惘也令我迷醉,但是,读这本书,我要说,真不容易,特别是,我读的那时候我还是个初学者,所以我后来又读了第二遍,其时我已经对C++终于小有了解了(真的只是小有了解)。
    大二上,继续逃课,并明确自己的目标,将数学放在次要位置,将大量时间放在学习计算机上,那一学期我自学了数据结构(清华的〈数据结构C++描述〉),汇编(〈IBM PC汇编教程〉),32位计算机原理(清华的〈80X86计算机原理〉什么的,具体名字记不清了,黄封面),操作系统(〈操作系统原理〉机械工业,扉页有盖兹的大头照的:)),当然,C++没有丢掉,那学期我学Windows API编程,要用C++,所以着重学应用,学Windows编程可是件麻烦事,撇开数以万计的API不说,单是消息循环就让人头痛了,好在我看到了Jeff Richter的〈WINDOWS 核心编程〉,一切仿佛都明朗化了,只是不够明朗,然后我试着用“该死的MFC”了,可以说,我几乎没怎么用过MFC,因为我又不去开发大型项目,自己做SDK编程,手工打造还有利于理解操作系统的机制呢。但是我了解MFC,有时我也会一头扎进去跟踪个清楚,只为了了解一个类的结构,如何运作。。。这是种乐趣。
    我要说,学习操作系统有利于对C++的理解,C++之父的〈C++程序的设计与演化〉里就讲过它以前从事操作系统相关的工作,并在设计C++语言时从中借鉴良多,比如C++类的保护机制就是操作系统保护机制的某种借鉴。
    大二的上学期就这样过去了,期末,成绩都在及格边缘。学习的操作系统自己觉得不够深入,恨不能让盖瓷给我讲WINDOWS的核心代码和设计理念,而C++,也是没怎么进展。
     大二下又是个转折,非典了,不能去看mm,总要找点事做吧,就去网上查书,看看有什么C++方面的好书,一下查了一堆,于是:
        Effective C++
        More Effective C++
        C++对象模型深度探索
        Exceptional C++
        STL 源码剖析
        C++设计新思维
        。。。
     这些书全都出现在我的书架上,我被C++迷住了,上面的每本书都让我目眩神迷,C++的精妙,C++的广博,直到斯时才展现在我这个菜鸟的面前,我疯狂的看,那一个月时间我大概看了4~5本书。其中,STL源码剖析让我看到了C++中的另一片浩大的海洋----GP(Generic Programming,也就是泛型),我一下跌落进去,然后那本曾让侯捷(就是译者)目瞪口呆的〈C++设计新思维〉(Modern C++ Design)让我“二阶”目瞪口呆了,我看得在宿舍里大叫:居然可以这样的啊!!神!!----于是我为GP的优雅和精致所彻底折服了),读这些书的时候,我不断觉得我了解C++了,又不断被下一个不知是什么让人惊奇的技术所打击,觉得了解C++----难啊!(现在,我不在受“打击”了,倒不是说我终于洞悉C++了,而是我终于能够以平和的心态对待这个事实----我永远也不能完全了解C++,她太广博了,太深奥了。古龙说:“一个男人如果认为自己了解女人,那他吃什么亏都是应该的”,C++就是那个“女人”,特别是一但将C++应用到设计领域,突然就又产生了无穷多种可能,你似乎永远也不会想到C++中一个看似不起眼的特性会被用到多么巧妙的地方)
    然后,从非典以后,我对C++的学习几乎就是GP了,书看完了,我就上CUJ,找出以前的文章阅读,那已经是在暑假了,我一边阅读CUJ上的文章一边翻译〈Effective STL>(虽然有人认为这本书远没有Scott Meyers的前两本书好,但是至少其中有些章节还是不错的,其实我觉得这本书缺少的是技术的激情,它只是经验的结晶,所以未免显的有点枯糙,但其价值任是大的),终于,在一再被CUJ中的泛型方面的文章所震慑的同时,我也决定自己“研究”点东西(毕竟,不能总是记忆啊),所以,我下载了boost库,并试图阅读其源代码,侯捷不是有〈STL源码剖析〉吗?咱也来个boost源码剖析如何,于是我又一头扎进去,有了上学期学GP并读了侯捷的两本追踪源码的书的基础,在加上对C++语言机制的部分了解(这来自(C++对象模型深度探索)和(STL源。。。)以及(C++设计新思维)),读boost代码比较顺利,当然其间我查阅了不少资料以了解某些机制,boost的设计者有时为了减少代码重复量将宏机制运用到了登峰造极的地步,这也导致源代码难以阅读,特别是boost只为其应用做文档,却对技术细节隐而不言,所以,我只能一点一点啃),不过最终当我了解了其本质后,那种兴奋是无以言表的,幸好,我第一个剖析对象是个比较有意思的类boost::function,泛型的函数指针,可应用于Command模式。其中技术细节比较多,也较有趣。于是当我分析完了以后我又兴起了向程序员投稿的念头,再次幸运的,稿件被录用了,这是我第一次投稿,所以非常兴奋,这篇稿件就在今年的九月号,源码分析栏目,其中有个打印错误,使我很懊恼,毕竟这种技术文章不能含糊的,所以我又去将勘误发到CSDN的论坛。
    再后来就是现在了,我大三了,从数学系转到软院,环境还可以,只是有某种受骗的感觉,其中有些老师的“水平”还是不敢恭维的。我还会继续学习C++,C++仍然是个海洋,所以我决定开始看C++标准,让自己对其有个最标准的理解,还看〈C++语言的设计与演化〉让自己了解这个神奇的语言的设计理念。
    现在开JAVA课了,学JAVA的乐趣在于其应用,JAVA的库非常完善,玩起来就像搭积木一样,是另一种乐趣,.NET的库也是一样,只是语言本身的语意少了某种广博和自由的意境。这样的意境,我要说,只有C++能够营造出来!!C++是自由的世界!!而JAVA连操作符重载都没有,多重继承都没有,JAVA里面除基本型别的所有对象都要new出来,缺乏真正的栈上的对象,JAVA的GP表现也虚假而薄弱。
    如果哪天C++消亡了,不是有一种新的,更好的语言取而代之了(我想这种“更好”的语言未必会出现哦),就是全世界的程序员都“懒”了。
    我绝对拥护C++,C++是个魔法世界,其中自由和层不穷的无可预知性让人神迷。。。

from: http://blog.csdn.net/pongba/article/details/195075

我的C++学习历程(old)相关推荐

  1. asp.net2.0学习历程 菜鸟到中级程序员的飞跃【月儿原创】

    asp.net2.0学习历程 菜鸟到中级程序员的飞跃 --30本好书点评 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.5.1 ...

  2. python学习历程-安装篇(一)

    python学习历程-安装篇 之前工作中数据量很少,每天也就是用excel发一下报表,函数已经足够应付工作内容,但心里一直渴望学习更深层次一点的数据分析(崇拜那些技术大神),网上看了很多有关数据分析挖 ...

  3. asp.net学习历程。

    很多书需要看滴. csdn的asp.net学习历程 转载于:https://www.cnblogs.com/xxcainiao/archive/2007/06/21/791618.html

  4. asp.net2.0学习历程 菜鸟到中级程序员的飞跃[z转]

    asp.net2.0学习历程 菜鸟到中级程序员的飞跃 --30本好书点评 学历历程 如果你是一个菜鸟或者自认为初学者那么本文非常适合你: 不能说这30本书就是最佳组合,但是可以说这个组合不差: 本人曾 ...

  5. 【Linux】学习历程

    导语:在研一下由于课程的需要学习了一段时间的操作系统,当时觉得还很有趣,可以认识另外一种风格的操作系统,后面6月份来到学校就基本上没看了,现在复习完C++语法和数据结构后要开始操作系统的学习,于是正好 ...

  6. SpringBoot学习历程(十一):SpringBoot2.X集成mail发送邮件

    SpringBoot学习历程(十一):SpringBoot2.X集成mail发送邮件 前言 1. 引入依赖 2. 设置邮件配置信息 3. 发送邮件 3.1 发送普通文本邮件 3.2 发送HTML格式内 ...

  7. Arduino小白的学习历程

    Arduino小白的学习历程 例7 温度报警器 作为一名刚接触Arduino的小白,觉得温度报警器这个东西特别新鲜,先把它的效果描述一下: 效果一:打开串口监视器(至于怎么理解串口监视器,我来说说自己 ...

  8. 小程序学习历程(二):注册小程序测试号

     该文适合还没有微信小程序开发者账号,以及有了开发者账号同时还想注册一个测试账号的读者. 开发者测试账号推出的用意,主要是:方便我们在决定正式注册小程序账号之前,或者仅仅只是想体验一下小程序(或小游戏 ...

  9. PhotoShop学习历程以及网站分享

    博主将开启为期两周的PhotoShop学习计划,今天是2021/7/25 仅仅是学习历程记录,与大家分享学习心得,分享觉得好的网站.如果有好的建议可以在底下留言,大家共同进步!         内容将 ...

  10. Java学习历程——JVM的JMM模型

    Java学习历程--浅析Java内存模型(JMM) 我们来看下面的代码,运行程序,我们会发现程序运行后一直没有结束. package com.java.demo.j,import java.util. ...

最新文章

  1. windows 2003 活动目录的更改域名后缀技巧
  2. 对抗性攻击轻松愚弄人工智能
  3. ajax回调函数的返回值,使用ajax和回调函数向函数传递/返回值
  4. ubuntu16.04安装新版本golang
  5. IBM发明世界首个人造神经元,人工智能的底层硬件基石已完成!
  6. STM32 IO口的八种模式使用小结
  7. linux find 权限不够,超级用户find: `/home/pipi/.gvfs': 权限不够
  8. android+动画+锯齿,Android_rotate--animation 动画旋转两图片,消除动画锯齿现象 android 开发:动画旋转两图片 - 下载 - 搜珍网...
  9. 信贷三类业务风险如何把控
  10. CCF201612-1 中间数(解法二)(100分)(废除!!!)
  11. 下载频道12月热门资源TOP100强力推荐!
  12. 第六节课-(第七节课)训练神经网络-2
  13. AVX图像算法优化系列二: 使用AVX2指令集加速查表算法。
  14. 用云服务器搭建一个属于自己的网站(手把手教学)
  15. 关于Palantir——第一部分
  16. 5G网络架构及其对承载网的影响
  17. Microsoft Live Account for Mail, space, onecare
  18. FrankMocap:A Monocular 3D Whole-Body Pose Estimation System via Regression and Integration 2021阅读理解
  19. M1 外接2K显示器开启HiDPI 的解决方案
  20. You-get 几乎万能的媒体内容下载工具

热门文章

  1. 阿里巴巴利润暴涨108%
  2. Oracle查询优化-01单表查询
  3. python字符串内建函数详解
  4. Redis中的自动过期机制
  5. PyQt5教程7:布局Layout管理
  6. matlab gui打开fig文件,求助gui打开word文件及打开fig格式图片
  7. python批量读取tiff文件_Python图像分析:从共焦显微镜读取多维TIFF文件
  8. 创建springboot_【小练习】创建SpringBoot程序
  9. Python 项目依赖包 第三方库 生成requirements.txt的两种方法
  10. MATLAB Simulink 做BP PID报错:Error :*** during flag=* call must be a real vector of length 3