我第一年的C++学习之路 —— C++学习方法不断转变
两本让我提升的书:
对于C++,我首先想要讲讲的是《C++ Primer Plus》与《C++ Primer》这两本书,很多人讨论过,对比过这两本书有些什么不同,适合哪些人学习之类的问题,而我,已将《C++ Primer Plus》全部看完,看了《C++ Primer》两大部分内容,现,就个人吧,想讲讲我对这两本书有些什么样的感受。
开始接触C++:
首先,不得不先提一下的是,进大学前,完全没碰过C++这门语言,也不知道C++是是什么样的东西。来到大学后,学校在大一开了两门专业课,一门是《计算机导论》,另一门是《高级语言程序设计》(也就是C++),用的是谭浩强的书,开了两三节的C++课以后,大概知道C++是个什么东西了,个人理解来说,C++就是一门编程语言,一门能实现自己想要功能的编程语言,到现在为止,做的工程都是Win32控制台的,那时,一直用的是Visual C++ 6.0编译软件。当然,在这两三节C++课的途中,也适应了从高中到大学的转型,也知道了,大学,其实就是这么一个东西,当时,我的C++老师课堂教学上来讲的话,个人感觉还是没有什么问题的,但是,发觉,自己此时已对C++产生一定的兴趣,而且,并不满足于老师的教学,于是,开始上网搜集各类C++相关的资料,找各种书籍,找一些C++和就业问题之类的帖子看,并开始不听老师的课,自己搞自学。就这样,《C++ Primer Plus》和《C++ Primer》(两本语法及思想的基础书)就(通过网络搜寻好书,网购)到了我的手上了,在还没有开始看《C++ Primer Plus》的时候,我的C++掌握程度是会写简单的int main(){}和输入输出语句,简单的if-else语句,这是因为自己的兴趣,所以即使课不多,我也会对着谭浩强的书前一两章习题去钻,每一题都做。
《C++ Primer Plus》自学的开始:
接着,我开始阅读《C++ Primer Plus》了,顺便说一下,我这本书读了六个月左右才读完,原因是大一的时候好多时间还有一些杂七乱八的事情要做。《C++ Primer Plus》,当初选择先阅读这本书是因为听很多网友说《C++ Primer》不是很适合新手(这里指的是完全没有接触过C++的新手),而且比较的简练,而《C++ Primer Plus》就比较唠叨,也挺适合新手。刚开始接触这书,感觉有点兴奋,同时,有点压力,厚厚的,要什么时候才能把这书吃透啊?这本书开始的前六章,我采取的是细读加练习,因为,那时看这些章节,一切都觉得很新奇,很多细的知识点在谭浩强的书上是没有看过的,所以就越看越有劲了,也有心思去细读,之后,细读完一章,感觉这本书有一个很珍贵的地方,它的习题,自己敲代码才是学习的王道,这里的习题很适合像我这样的新手敲,而且,做题也越做越有感觉了。完成了《C++ Primer Plus》这六章的内容后,此时正好我们这门课要考试(上学期末了),于是,我再顺便狠狠地把老师给我们的题目(选择,读程序题,编程题)做了一遍,之后,因为寒假时间不长,又有其它事必须得做,所以,寒假用在C++的时间也不多了,只是对前面的内容稍回顾了一下,(冒泡法,选择法,数组)之类的这些东西熟悉了一下,归纳了一下,做了一些题目,一些还是《C++ Primer Plus》上面的题目,此时,对动态链表,用struct写的动态链表,可能是那时做多了这类题目的原因吧,做多了后,对动态链表,也感觉到,原来,它,只是这么一个东西,思想明白了,做法自然也清晰了,下学期开始时,为了跟上老师的教学,不与学校教学完全脱节,于是,我决定了,将谭浩强的书过一遍,对其内容进行了解,先不上机做题,这段时间,我并没有去找题目做,而且,也只是花了五天左右的时间就读完了这些内容,大概知道了C++的类,OOP思想是个什么东西,继承,派生,封装,运算符重载这些东西也大概了解了,这时,了解了这些概念以后,越来越感觉写C++程序,有时,是一件套公式的活,难道这就是语法?那时候,下学期,又正因为班上的事比较多,自学的进度也就一直受着影响,所以,这时学习方法被迫改变,每次都是老师布置了一个知识点的题目,我不会做,于是,自己抽两个小时左右去阅读《C++ Primer Plus》上相关的知识点,很爽的一点是,每次一看完这相关的知识点,都有一种恍然大悟的感觉,然后直接上机将老师布置的作业解决。所以,这时,《C++ Primer Plus》我是抽读,抽相关的知识点去细读,总结一下,下学期我学习C++方法就是:总细读一次谭浩强的C++ -> 老师出题汲及到相关的知识点 -> 我细读《C++ Primer Plus》相关知识点 -> 做出题目。[在我的博客上有足迹]。
自学的又一阶段:
到了这学期六月份左右,分析了一下《C++ Primer Plus》的自学进度,已学:第一章,预备知识,第二章,开始学习C++,第三章,处理数据,第四章,复合类型(数组,string,结构体),第五章,循环和关系表达式,第六章,分支语句和逻辑操作符,以及[第十章对象和类,第十一章,类]的部分内容,未自学:第七章,函数C++的编程模块,第八章,函数探幽(内联函数,函数重载,函数模版)第九章,内存模型和名称空间,以及其它的容器,输入输出等章节。于是,那时,我就认为,第七八章是重点,是学习类之前就要掌握的内容,于是,将第七八章,细读的,同时,也通过练习掌握里面七八成的内容,剩下,还有类的残留内容,和输入输出文件内容,只是快速细读了一下,没有怎么回顾,(这时学习有点浮躁,想尽快把《C++ Primer Plus》这本书解决掉),然后,容器的内容,对于基本操作,上机实践了三个例子,感觉不难掌握,而这本书里面,对于这部分的内容也讲得不多。对于这本羽的学习,还没完,接下来,暑假期间,在完成C++大作业“简易评分系统”时,用上了这里面的不少知识,而容器的一小部分内容,也在这里实践了,接着,自己买了《数据结构与算法分析(C++版)(第二版)》 电子工业出版社,《数据结构与算法分析(C++版)(第三版)》人民邮电出版社两本数据结构书自学数据结构,这途中加深了对函数模板的印象,因为,这两本书里面几乎所有例子中都有用到函数模版的。
假期的数据结构学习:
暑假,想学习数据结构,于是,购买了《数据结构与算法分析(C++版)(第三版)》,这本书里面,很多用到了STL,vector的内容,因为这时接触得少(做大作业的时候才开始加多接触),看得头晕晕的,还是不怎么看得懂,又看了一下严蔚敏的前几集视频,看至双链表的内容,同时,很巧,老师向我推介一本《数据结构与算法分析(C++版)(第二版)》,这本书链表的内容讲得很不错,于是,我就顺着它一直把这部分的内容看下去了,不过,到了树的内容后,又感觉到有难度了,于是,我果断转向之前的《数据结构与算法分析(C++版)(第三版)》,这次,这本又讲得不错,函数模板也少用了,用上了,我也会看了,于是,就这样,暑假时,借助严老师的视频及这两本书,自学了部分数据结构的内容,对链表内容较熟,对已学习的其它内容,只是理解过,敲过代码,知道过原理。
自学计划转向补基础:
接下来,由于不想这样不上机地学习数据结构,于是找了一些大题,但是剩下的时间又不想做大题,于是,决定放一放数据结构,先自学《C++ Primer》,自学《C++ Primer》前想过很多事情,不知道该不该还把时间花在基础上,到现在,我有了答案,这本书是值得看了,这些基础,是值得补上的,这时间,是花得挺值的,看《C++ Primer》时,我看得很顺,很爽,这次,我的学习方法是,细读,每章划出自己认为新鲜,比较重要而未掌握牢固的知识,并写出每章学习小记(在我的博客上有足迹),这用这个方法,把《C++ Primer》的第一大部分内容解决了。(《C++ Primer》分为五大部分内容,第一部分:基础语言,第二部分,容器和算法,第三部分,类和数据抽象,第四部分,面向对象编程与泛型编程,第五部分,高级主题。
自学方法的转变:
在读第二部分内容九到十一章时,越看就越有这么一个感觉,我需要上机实践,自己想了想为什么自己看这一部分的内容时,会跟 上一部分内容会有截然不同的感觉,我想,原因1,这本书是以介绍说明每一个容器的功能的方式讲述这部分内容的,原因2,对于第一部分内容我有比较好的基础,看的时候自然就心旷神怡,还发现不少新的小知识点,而第二部分我则没有什么基础,平时也少用,自然就越看越觉得枯燥了,于是,我决定,这一部分的学习方法,我首先将第三章容器大概能实现的功能,它们优缺点的大纲列出来,然后,根据大纲,再模仿一些题目,自己给自己出一道大题,用这章内容的知识,做一个小项目出来,写上说明书,顺便也可以把这个当做项目经验。至于这本书第三部分到第五部分内容,估计跟一二部分的内容的学习方法相差不大,到时候学那里的时候就具体问题具体分析。(或者,在寒假的时候,能将这三部分内容补上了。)
今后的小小自学计划:
《数据结构》的学习,最近,看见老师出的题目还是挺不错的,如果可以免修的话,希能申请到免修,在《C++ Primer》一书未完成前,打算数据结构的学习就以大一下学期时候学C++那样学吧,在它给出题目时,看书后,实践,而且,现在比老师进度快了不少,这个可以先不着急,等将《C++ Primer》完成后,开始主攻《数据结构》。
两书的比较:
说回这个《C++ Primer》与《C++ Primer Plus》的感受吧,以前及上文,好像已经提到一点点了,在这里概括一下:
1. 教学方法
《C++ Primer Plus》喜欢用具体实例,逐句分析,逐章深入,有点唠叨地教学。
《C++ Primer》喜欢罗列知识点,就像字典罗列生字那样,然后有时候举例简要说明。
2. 教学内容
《C++ Primer Plus》,知识点除STL内容外,都比较全。
《C++ Primer》现在的第四版增加了不少STL内容,当然,知识点也是涵盖得比较全的。
3. 个人推介
个人感觉两本书可以形成互补,完全新手又喜欢唠叨教学的,还是《C++ Primer Plus》好一点,而喜欢精简的,当然《C++ Primer》,两本有时好像也给我一个形成互补的感觉,如果时间充裕,可以将两本书都看完,当然,不忘大师的那一句话“不要迷信书、考题、老师、回帖,要迷信CPU、编译器、调试器、运行结果。”,老邓同志的那句话“实践出真知”。
简章的小结:
接下来,我将继续坚持写博客,(一起监督作用,二起整理自己知识作用,三起记录回顾作用,)继续发展C++(有可能大三变为C#)路线,不荒废大学时光,加油!