在半路出家的程序员队伍里,我的经历应该比较有代表性:先在一所师范专科学校接受了三年中文教育,毕业后开始在一个小镇教书,后来通过三年的自学,由一个计算机知识为零的“电脑盲”,拿到了软件水平考试中的高级程序员级别证书,并通过了全国计算机四级考试(成绩优秀)。其中的经验教训有很多,写下来供大家参考。
关于学习
坚定的信心
自学计算机是需要一定的条件的,现在回想起来,我当时的条件不算好:第一,没有基础。大专学的是中文,而且完全没有接触过电脑,对计算机没有一点感性认识,甚至不知道学电脑要学些什么……第二,环境很闭塞。第三,缺少硬件条件。开始的半年我没有电脑,只能纸上编程;一边工作一边学习,而且总感觉时间不够。尽管困难重重,但我确信一条:计算机知识是一门技术学科,不是一门艺术;可能有人终其一生,也不能成为一名艺术家,但每个人通过努力,都是可以掌握好一门技术的。正是因为有这样坚定的信心,我才能够在三年的时间里,克服了常人难以想像的困难,终于达到了自己的目标。
选好教材
没人指导自己学习,选一些好的教材就显得非常重要了。开始我也不知道什么书好,见什么买什么。后来发现一些大学教材内容很系统,而且也有一定的权威性。我后来选的就是清华大学计算机系的教材。学完教材后,我开始研究三本软件水平考试的统编教材,如果一开始就看统编教材,会觉得书里结论大多没有详细的阐述,很难理解和记忆,但先系统学完教材后,你会发现统编教材起了一个很好的综合作用。
学会“不求甚解”
我这里说的“不求甚解”并不是指不认真学习。自学电脑最怕钻牛角尖:看书时一个问题不明白,就在那里卡住,非解决它不可——这样的方法我是不赞成的。首先,它会严重打击你的自信心,使你丧失继续学习下去的兴趣;其次,这样浪费了许多时间。因此学习时要给自己留一些“不懂”的余地。例如第一遍读书时要允许自己似懂非懂,用规定的时间(例如两个星期)把它看完,然后开始第二遍学习。开始时许多不明白的东西,这次就容易理解多了。
重点突破
计算机的专业课程很多,如果要通过软件水平考试,我认为一定要抓住《数据结构》这门核心课程。软件水平考试最难通过的部分是下午试题,其中很多内容涉及数据结构中的知识,大部分试题都是数据结构的演化。只有对线性表、栈和队列、树、查找、排序等问题非常精通,编程的难题才能迎刃而解。在1997年参加程序员考试时,最后一道题目整体上我看得不是很懂,但由于我对数据结构比较熟悉,我把需要填空的上下两句仔细看了看,就知道是实现一个链表的问题,而链表的操作我十分熟练,我自信地填上了正确答案。数据结构应该学到什么程度呢?我认为,基本上能用高级语言来实现各种数据结构就差不多了。
重点突破的另一个含义是扬长避短:一个非计算机专业的考生,很难做到知识十分全面。特别是对一个文科生来说,数学是心头永远的痛,而我的英语也丢了多年。是花费巨大的精力去补数学和英语,还是把精力集中在其他科目?经过权衡,我选择了后者。在程序员和高程考试中,上午试题的前十一道,我基本上得了满分,数学和英语对我的影响并不大。我的顺利过关,就是舍车保帅策略的成功运用。当然这只是针对应试而言,如果你现在还有机会学习数学和英语,还是应当尽量把它们学好。
多上机
虽然软件水平考试下午试题只要填上程序所缺的语句,不用上机调试,但要想做对,就离不开平时多上机练习了。有时你看书时觉得懂了,但上机时却会发现一个简单的程序也容易漏洞百出。我把统编教材《程序设计》中的程序上机调试了两次:第一次基本上是照书打字,边打边想;第二次是先看题自己做,实在不会时才对照一下教材,看自己为什么做不出来。调试程序的过程中会发现C语言中的许多精妙的地方,一些考试时容易忽略的细节问题也都暴露出来,对考试十分有利,下午试题考的就是你的思维是否严密。
多做试题
我不提倡多做模拟题,因为模拟题的难度很难把握——不是太难就是太易,对考试帮助不是很大。但一定要把近几年的正式试题找来做,最好能做十份左右。虽然每年的考题都不同,但你一定能够在历年的考题中发现一些有规律的东西——它要考核你什么样的能力?它考一些什么知识点?这样,你在复习时就能做到有的放矢。
关于四级考试
四级考试难度相当大,据说几年通过的人数寥寥无几。据我看,四级的上机考试题相对程序员考试下午试题来说还是容易的,关键在于笔试有120道题,所以考到的内容十分广泛、细致,并且有三分之一的题目是用英语出的。这要求你在学习时一定要注意每一个细节问题,对计算机的专业术语的英语表达方式要熟悉。笔试还有一道论述题,其内容并不完全出自书本,需要你有比较流畅的表达方式,还要对计算机的最新发展动向有一定了解,才能圆满地解决论述题。
我在三年努力下,从初级程序员考试到高级程序员考试,从二级、三级(B)到四级,一年一个台阶,顺利通过了软件水平考试和等级考试中的最高级别的部分。希望我的这些经验能帮助那些刚起步的朋友顺利迈入计算机的殿堂。