【来信】
入学已经一个学期多了,因为接触计算机比较早,对计算机有很大的兴趣。上了大学之后,真的喜欢上的编程。我们学校开的语言是C++,平时我都很认真的学习,我们学校的教材是谭老师的教材,我感觉比较容易懂,我自己已经看完了,我又买了C++ primer plus,感觉这本书写的确实比较详细,但是到了后面很多谭老师书上没有的内容,我看起来就比较困难,我不知道自己如何在这种时期提高自己,我看了网上很多帖子还是找不到方法,请老师详细说一下我该如何提高,具体看什么书循序渐进,如何提高自己。
【回复】
已经有这样的兴趣在,要做的是通过投入的学习,产生学习效果,形成促使你不断进步的良性循环。
关于C++的学习,我不知道你除了看书之外的实践如何?看完某本书不算什么,应该完成一定的编程训练,找到感性认识。这方面,你可以做我的学生做过的实践,也可以找一些编程竞赛类的书,并找一个OJ平台,做些上面的题。《C++ primer plus》注重语法的详细讲解,我觉得适合对C++有更深了解的人,而不是刚学编程的人。我推荐萨维奇(Walter Savitch)的《C++程序设计(第8版)》。这本书中合理地穿插了大量的自测题及参考答案,而且每一章都有大量的编程项目,方便读者实践。既然你看《C++ primer plus》困难,先换一本看。
计算机专业,数学要尽量学好。至于现在要不要再学一遍离散,如果有时间,再看一看也行。不过,对于学数学,如果也能在用中学就更好了。从这方面,你可以参加一些ACM训练。逐渐地,在做一些有“份量”的题目中,遇到需要用数学的知识解决的问题,不要回避,有针对性地看书,运用数学知识,效率、效果会更好。等到高年级,涉及到算法时,再回头看离散数学、组合数学等,效果也应该更好。
学汇编,如果要说难,在于理解指令,这需要在学习过程中了解计算机底层的一些东西;而会用汇编,本身又对理解底层也有帮助。如果学C++更注重对语言及编程方法的话,学汇编,因为有了高级语言基础,更关注底层的问题。我想起一本很好的书《大话处理器》,你可以看看。编程水平如何,在你的班里去做比较,没有多少意思,要知道自己一直在实践,能够不断解决新的问题,这足以说明水平在逐步提高了。
关于C++和Java间的纠结,《C++还是Java,职场新人的困惑》中的有些观点也适合你,C++和Java之间的关系,并不是排斥关系。另外,我想将我即将出版的《逆袭大学——传给IT学子的正能量》中相关的几段话送给你作为参考:
建议在学好第一门语言的基础上再学习第二门语言,用第一门语言中习得的程序设计方法支持用第二门语言的程序设计。需要忌讳的学法是一门语言学个半截就又转而去学另一门语言。这种学法将使人永远处在只知道一点点的状态,久久不能得门而入,甚至最终打了退堂鼓。更糟糕的是,老师在教着A语言,听某人说B语言流行,放下A语言去独自攻打B语言,如此没有几天必去转学Q语言。最大的收获是,短短一年,能用多种语言输出hello world,用浮在表面的话题能吹牛唬唬外行而已。对于计算机语言,只要先将一门学精了,学会了解决问题的一般方法,就像学会了开车一样,上其他车稍加熟悉也就能上路了。
大学四年的时光,光两门语言,也真是不够,需要逐步地拓展,再学到其他语言,体验用其他语言的编程,学会做出一些“项目”来。大学四年中,在学习语言上的节奏,我建议前两年,目标定为只会用两种语言即可,一门精通,另一门了解。第三门语言完全可以按“因为用到所以要学”的思路去选择。进入到了大三,编程方法有了基础,眼界也拓宽了,选择一个自己感兴趣的方向,学习这个方向上惯用的语言,以做出一个小项目当就业敲门砖为目标,借此树立自己的特色。对语言的兴趣可能会在学习过程中换一换,但是不要换得太勤。一个方向,仅靠一门语言可能不够,而是需要学习相关的一组语言,用着什么学什么,不必犹豫太多。对于一些简单的,但应该是常识性的语言的学习,如HTML等,可以在四年当中随时启动。有些语言,在培养方案中会安排老师授课,你的计划可以与培养方案接轨,也可以自主安排。
在编程学习中常见的哀叹是:好好学了两年C++,最后做Java了,白学了,可惜了,我好杯具。对此要反问的是,如果真是这样,有哪一天Java的工作机会也不再有了,是否自己也跟着进到博物馆?还是前面所讲的道理,不管用什么语言,学的是编程。练出的功夫不只是体现在拳脚上,而是无论哪里发力,使什么样的兵器,丹田之气都能随之跟进。当需要换语言之时,用丰富的编程经历与体验迎接新语言的到来,无论何时需要新语言加入到你的知识体系中,坦然接受即可。这样的焦虑,只对学了一两门语言的初学者存在,对于已经窥到门径的人来说已经不是问题。初学者也倒是可以放心地投入进去,不要被这种阶段性的顾虑束住了手脚。
祝学习顺利!