我的C++学习历程

转自:http://blog.csdn.net/pongba/article/details/195075

===============
很久很久以前(..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++是个魔法世界,其中自由和层不穷的无可预知性让人神迷。。

posted @ 2015-02-28 10:47  冷冰若水  阅读(478)  评论(1编辑  收藏  举报