计算机类专业大学生的课外自学
大学生的学习,除了按照培养方案完成基本的学习任务(课内学习),还需要安排出符合自己特点的课外自学。课内学习是毕业的保证,也是综合素质和专业基础理论和专业基本能力的保证,而由自己安排的课外学习,是进一步提高的必要,是形成自己的专业特长,尤其是具有实践能力的必不可少的环节。一个成功的大学,应该是课内、课外学习充分结合,相互补充而来的,这两方面缺一不可。在现在大学生普遍对应试型学习更适应的情况下,我尤其看重课外学习能力的提高,看重以实践为主线,安排出适合大学生个人需求的课外自学。这是作为大学生适应大学,改变自己的学习,进而获得终身学习能力的关键。
大学生的学习,是要求在理论和实践两方面兼顾,并力求相互促进的。对于计算机类专业,基础理论体现在算法理论和对计算机系统理论方面,涉及到的课程主要包括算法与数据结构、计算机组成、操作系统、编译原理等。像软件工程、嵌入式系统、Web开发一类的课程,以项目开发为目标,用以指导实践。
(一)自学的种类
在课外自学中,老师课堂的要求仅是基础,完成老师要求的课外学习,如做作业,阅读指定的材料,只是自学的一种最基本的层次,是所有学生都应该做到的。这种自学称之为“限定性自学”。反思大学中存在的诸如抄袭作业一类的丑陋现象,这个层次的自学都不能保证,大学的学有所成几乎是空想。
随着课程进度的进展,学生主动地阅读其他的课外书籍,完成难度、内容适合的小型应用题目和项目,体现的是一种“主动性自学”。有了主动性的自学,学习效果真正保证,而且这种主动性延续到工作当中,是一种非常宝贵的品质。还记得我在上大学期间,每门课除了听讲,看课本外,都要另外再看至少两本书的,当时不少大学生都在这样做,而今感觉大多大学生只看课本,甚至个别的连看课本都不看。我在学习编译原理期间,就用自己熟悉的PASCAL语言,写了一个小的编译器,其实只完成了词法分析和语法分析的部分。这一段经历给自己留下了美好的回忆,实际上,也真提高了编程的能力,同时认识到课程中抽象描述的原理中蕴涵的美妙。
在本文中,我想重点谈的是更高一级的“自主性自学”,是一种完全由自己安排的,根据自己学习目标、兴趣和需求而安排的自学。这种自学与开出的课程无关,与老师对大家统一的要求无关,是一种真正的“自主、自由”的学习。
对一个专业的学生,所开出的课程,在必修课角度上是完全一样的,选修课上会有差异,但一般也都限定在一个范围内。但一个专业出来的学生,差异会非常大,除了大家的学法不一样之外,由于各人的不同,在课外自学中选择了不同的学习内容,由此在不同的圈子中活动,这也是差异的主要原因。极端的情况,上了一个专业,经过投入其中发现不是自己所愿,在目前转专业沟道不畅的情况下,课内学习的本专业,达到基本要求,而在课外,将更多的精力投入到一个自己喜欢的方向,形成自己的特色。如果安排能够和现有的专业结合起来,那是更好的事了。利用自主性的自学,或扬长,或补短,形成自己特有的知识结构,形成自己的特有的生活情趣,这无论对于形成在职场中的竞争力,还是对于奠定自己幸福生活的基础,都是一件很要紧的事。
(二)自主性自学的内容
专业能力提高,无外乎两个方面,目标是更扎实的专业基础的学习,以及目标是更强的实践能力的学习。课外自主性学习在进度控制上的困难,在于不像开出课程,有一个课程大纲的约束,有老师掌握着进度。所以,最好能找到一个明确的主题进行安排。
对于加强专业基础的自学,感觉以ACM一类的编程竞赛作为主题合适。低年级的,注重问题求方法的一般问题,随着年级的升高,其他基础知识的增长,逐渐加进来需要采取特定数据结构,采用相关算法策略的问题来学习。可以参加竞赛,也可以将之作为日常的训练,长期坚持。目标虽然是专业基础,但作为自学,一定要以实践的形式完成,直观地讲,就是将学习的成果,通过写程序,通过代码表现出来。这也是专业基础的提高最终是为了专业应用能力、实践能力、动手能力提高服务的体现。
对于加强实践能力的自学,从做Web应用入手。当前是互联网、移动计算的时代,用于支持Web应用的相关的知识已经是目前各种应用中通用的基本成份,可以设计出一条循序渐进的实践学习路线。做出的作品直观、易懂,也容易获得成就感。对于零基础的新手,学习用DreamWeaver编辑网页,再到学习一些HTML的基本知识,逐渐地结合进CSS、JavaScript,以及动态网页技术来。随着学习,会了解到更多的应用方面,做桌面应用、Web应用、移动应用,都会是自然而然的事情了。
在此没有提到编程语言的自学。比较顺利的学习,在修读程序设计课程的时候,程序设计的基本能力是应该过关的。于是,参照老师授课的进度,完成老师布置的作业,以及自己在其他参考资料上获得的,这是限定性的自学和主动性自学。实际情况是,在开课之时,由于种种原因,并没有达到教学目标的要求,主观上自己感觉还不会编程,客观上,来一个问题就傻眼,无论考试是否过了及格线,都需要过后补起来了。这需要有自主性自学来解决,越早越好,越快越好。这个问题不解决,专业学习永远不会走上正道。自学的方法仍然是遵循自主性自学的一般原则,以实践为主线进行安排,采用某本参考书掌握进度,可以是当初的课本,这个阶段也可以用某本权威的、经典的教材。要随着学习,找到或者自拟出适合做的题目,以“会做”作为“学会”的标准。计算机类的大学生,掌握多门语言是一件很容易理解的事。自学新的语言,也可采用这种路线,即学、做结合,以实践作主线,以实践作标准。
(三)自主性自学的路线
一名大学生,应该是“有扎实专业基础理论,兼有较强的动手能力”的,这两方面的要求是相互促进,也是可以相互交叉的。做到了这一点,会发现这两方面原来并不是那样的界限分明,而是真的可以融为一体的。有些同学将这两者对立起来看,显得有些过于极端了,也不利于取得好的学习效果。
现在不少学校,非常重视学生参加一些企业、社会团体主办的竞赛。通过竞赛,学生通过较多的投入,完成了参赛作品,也找到了专业学习的乐趣,非常好的事情。然而,这些竞赛的主题一般都是直接针对应用的,以致于有一些基础不错的同学,借着竞赛起步,之后的学习中将更多的精力投入到了一个接一个的应用开发中去,有一些还寻到了些途径,在校外“接活”,获得更多的提高,有些忽视了专业基础的提高。话说一名本科生在毕业的时候,能够做得一手好应用,那已经是一件非常好的事了,如果在长期的磨练中,符合工程化生产的要求,更是好上加好。然而,以那样好的起点,如果能在校期间再多花一些精力到基础理论的学习上,总体收获应该是更高的。基本理论的加强,不会时时表现出来,但却是可以在潜意识中形成一种科学的思维,暗中指导着实践做的更好。上大学的过程,本来就应该是全面学习的,本来可以,但由于安排不当而弱化或失去,是一件遗憾的事。
在为我的一些“好”学生抱憾的同时,我想给出自主性学习的第一条路线:先重基础,再重应用。这是希望获得双丰收的,所以用两个重。重基础的阶段,并不完全弃实践,而重应用中,基础同时也在融合,基础好的优势会体现出来。我提议入学时专业学习兴趣本身就很浓,以及初时学习就顺利的学生走这一条路子。由于先期并未投入相对更为“热闹”的应用,这样做的同学要更耐得住寂寞,知道这样做的价值,在后期重实践的开始,马上就能表现出更快的学习速度以及质量更高的应用成果。从时间角度,我建议大一大二重基础,标志是参加过一次ACM竞赛,不管是学校组织的选拨赛,还是有机会代表学校对外参赛。有些同学更高年级出去参赛,但可以在低年级时打足基础。到了大三,转入重应用开发,由于眼界相对开阔,入手点就可以与感兴趣的专业方向,甚至未来求职中心仪的岗位结合起来了。
第二条路线,先重应用,再重基础。这不是说课内学习的基础可以先不必重视,我们此处所说的是课外的自主性学习安排。这样安排针对的是对专业了解不深,一定想迫切知道计算机这玩意到底能做些什么的同学,就在先重应用中获得体验好了。应用的内容可以始于做一个个人主页、班级主页之类的,可以借助一些外部的目标,如参加学院组织的网页设计大赛之类的初级的竞赛,以及像在山东很热的“齐鲁软件设计大赛”之类的竞赛,高级目标可以是参加像微软、阿里巴巴等企业组织的应用大赛。直这一条路线的同学,不要忘记,适当的时候可以侧重于基础理论的提高,可能就是将疯狂做应用期间有些应付的专业基础课复习一遍,或者也去做做ACM题,一些大企业,如微软、谷歌的面试题等。一段时间的“淡定”,将换来丰厚的回报。
至于其他的路线,包括:基础、应用能够交叉安排的;一直相对重视基础,将来的志趣也就在于通过深造做“研究”,进而从事专业中相对“底层”和基础性工作的;一直重视应用的,各种不同的技术,不同的领域不断体验,志趣也就在于沉浸在应用海洋中的。这些都是不错的安排。其实话说回来,大学就是要有自学的,只要是把握住了课堂,课外又能有效安排好,这样出来的,都是人才。
(四)自主性自学实施要点
在课外的自主性学习,最忌讳的就是,常想学,但总不起步,或者在走第一步时顾虑重重重,让自己总是停留在要走第一步的阶段。只要起步了,视野拓宽,就会不断有新的想法产生,能触摸到适合你的“下一步”学习的内容,从而一直走下去。在这一方面,不妨观察一下幼儿园的小朋友,我们需要学习他们的探索精神,无论是原生兴趣使然的探索,还是未来求职谋生的需要,因为不知道和想知道、想学会,所以要不断前行。还要学习他们在学习时的无所顾忌:本人就这么一个水平,这就是基点,无论高低只要自己不多想,不会有人笑话之类的。抛开这样的顾虑,学习就会高效起来,也会享受到学习和进步本身带来的乐趣。
另外,课外自主性学习贵在坚持,列一个每周投入4小时的计划,远比想起来了猛干一整天,忙起一个月都不管,再过一个月,这件事可能就彻底放下了。最好是能够找到一个固定的学习地点,每天的课外学习时间都在那里,坚持每天都学习下去。
最后的建议是,让自己的进步看得见。如果是针对实践的自学,你的“产品”自然是可以看得见的了,可以经常演示给你学习的同伴和其他人,大家相互关注每个人的工作,由些也会形成一个很好的学习环境。对于专业基础学习的,可以将编出的程序在专业博客(如CSDN)中发布成博文,并且加上自己的总结,随着学习的进展,博文的清单在增加,是个积累,也是对自己的激励。在博文中加入分析、总结甚至讲解一类的文字,还可以成为其他网友的学习资料,帮助了别人,也在写作的过程中进一步提高了自己,有时高手会参与进来,又是一个共享、交流、提高的园地。
在大学中,自主性的学习是必要的。大学的课程安排,相对更宽裕的时间就是要让大学生自主地安排的。只要愿意,每个人都可以安排出有效的,适合自己的自学。
后记:一直在推动大学生在课外安排出有效的自主性学习,上学期推行的程序设计基础提高班(C++)、Java同步实践加强班、算法达人修炼营并不成功,这些内容针对大二学生,是在正在学习的课程基础上提出的额外要求,对于松散构成的学生社团,未成有效地监控过程。当指导教师的投入与学生的主动、坚持不能保证时,这种方式难以想到作用。组织课外的学习,可能本身就是一个站不住的想法,本学期尝试在更宏观的引导,也向学院争取更多的条件,多想了一些,写成本文。