大学生的学习,除了按照培养方案完成基本的学习任务(课内学习),还需要安排出符合自己特点的课外自学。课内学习使大学生具备专业培养目标要求的综合素质、专业基础理论和专业基本能力,此为基础;而自己安排的课外学习,是形成自己个性化的专业特长,尤其是具备实践能力的必不可少的环节。一个成功的大学经历,应该是课内、课外学习充分结合,相互补充而来的,这两方面缺一不可。在现在大学生普遍更适应应试型学习的情况下,我尤其看重课外学习能力的提高,看重以实践为主线,安排出适合大学生个人需求的课外自学。这是作为大学生适应大学,改变自己的学习方式,进而获得终身学习能力的关键。
关于自学,做老师布置的课后作业,阅读指定的材料,是“限定性自学”。不按老师要求完成作业,以及采用抄袭一类做法的,不必为自己找借口,默默反思即可。随着课程的进展,主动地阅读其他的课外书籍,完成难度、内容适合的小型应用题目和项目,体现的是一种“主动性自学”。有了主动性的自学,学习效果能够得到保证,将这种主动性延续到工作当中,是一种非常宝贵的品质。对于大学中的一些课程,除了听讲,阅读教材,最好要再有其他教材或专著进行同步阅读。对于实践性强的课程,我建议设计一个和课程内容相关的小“项目”同步去做。我在大学学习编译原理期间,就用自己熟悉的PASCAL语言,写了一个小的编译器,其实只完成了词法分析和语法分析的部分。这一段经历给自己留下了美好的回忆,实际上,也真提高了编程的能力,同时认识到课程中抽象描述的原理中蕴涵的美妙。现在有了像Lex和Yacc这样的工具支持,在编译原理这些课中也能获得更深入的体会。
学习专业基础知识时,抓住了限定性自学和主动性自学,学习效果得以保证,大学的基本能力由此获得。而要形成自己独特的知识结构与能力,需要的是高一级的“自主性自学”。这是一种完全由自己安排的,根据自己学习目标、兴趣和需求而安排的自学。这种自学与开出的课程无关,与老师对大家统一的要求无关,是一种真正的“自主、自由”的学习。一个专业的所有学生,要学习的课程,在必修课角度上是完全一样的,选修课上会有差异,但一般也都限定在一个范围内。我们会发现,一个专业出来的学生,差异会非常大,除了大家的学法不一样之外,各人的想法、特点不同,在课外自学中选择了不同的学习内容,在不同的圈子中活动,这也是存在差异的主要原因。利用这种“自主性自学”,或扬长,或补短,形成自己特有的知识结构,形成自己的特有的生活情趣,这无论对于形成在职场中的竞争力,还是对于奠定自己幸福生活的基础,都是一件很要紧的事。
课外自主性学习在学习内容和进度控制上,需要学生自己把握。这种学习不同于选修了的课程,会有一个课程大纲在约束着学习内容,有老师掌握着学习进度。然而,这其中存在的困难也恰是这一类学习的意义所在。自主性的学习,需要明确主题和目标,需要对学习内容和进度进行自我控制。这是在教师主导的学习中不必考虑的事,但也正是学生在学习历程中应该做到的事。
具有竞争力的大学毕业生,应该具有扎实的专业基础。为此,按要求学好培养方案中课内的各门课程。而编程基础阶段课外的学习,可以选择以ACM一类的编程竞赛作为主题。围绕ACM竞赛需要完成大量的练习,将有利于在数学、算法、编程、英语等方面获得全面的提高。以此为主题,并不意味着一定要参加某一等级的赛事,一定要追求获得什么样的名次为目标,只要能安排出以ACM训练形式的自主性学习就是目标。对于大学低年级学生,首先从使用常规算法解决小规模问题入手,注重求解问题的一般方法,以此提高驾驭语言的水平与抽象思维的能力。随着学习的进展,其他基础知识在增加,选择需要采取特定数据结构,采用相关算法策略才能解决的问题来学习。有参赛的机会时可以去小试身手,更多地投入时间进行训练,获得大量的实践机会。以实践的形式,将学习的成果通过代码表现出来。这种以实践形式开展的学习,目标恰好在于专业基础能力的提高,最终达到的还是专业应用能力、实践动手能力的提高。
具有竞争力的大学毕业生,还应该具有较强的实践应用能力。为此,认真完成各门课程内要求的实践环节以及实践教学课程中的学习任务。为加强实践能力的课外自学,建议从学做web应用入手。当前是互联网、移动计算的时代,用于支持web应用开发的相关技术已经是目前各种应用中通用的基本成分,入门的门槛低,做出的作品直观、易懂,容易使学习者获得成就感,便于设计出一条循序渐进的实践学习路线。对于零基础的新手,学习用DreamWeaver编辑网页,学习一些HTML的基本知识,逐渐地结合进CSS、JavaScript及其他动态网页技术。只要起步,就会打开一道口子,行业中充斥着的各种行话,包括领域、语言、平台、框架,会逐渐地进入视野,由于参与和实践,这些貌似一盘散沙的诸多术语,也变得不再生硬和呆板,进一步的学习之路就此铺就,各种的桌面应用、web应用、移动应用,都会成为自然而然的选择。
在大学生的学习中,很重视编程语言的自学。作为理想的情况,大学生修读程序设计课程时,跟随老师授课的进度,完成布置的作业,配以一定量的编程实践,程序设计的基本能力是应该过关的。然而实际情况是,由于种种原因,不少大学生并没有达到教学目标的要求,运用语言不熟练,解决问题没思路。我时常感慨,这样的一种状况怎么就让学生获得了一个及格的成绩了呢?这大概是值得我们所有人都纠结一番的话题。即使真的没有达到培养目标,及格的分数是每个学生的需要,为此有人甚至可以不择手段。送出分数是老师的权力,将及格不及格的成绩与学生的学习是否达到培养目标严格挂起钩来,从操作上并非难事。但学生会将争取及格当作动力,或者将避免不及格作为压力,从而认真学习,还是不及格成绩会成为彻底抽去学生学习兴趣和信心的致命一击?没有纠结,是不正常的。总之,教学目标没有达到,一些同学也就及格了。每个同学都要度过这个阶段,问题留给未来不见得是最坏的选择,我们所要面对的,就是无论考试是否过了及格线,会编程序的学习目标都要达到。如果课内学习没有解决这个问题,必须要通过自主性学习来解决,越早越好,越快越好。这个问题不解决,专业学习永远不会走上正道。
我指导过大二、大三不会编程序的学生开始“重建”,甚至有一位大四毕业设计时还不会编程序的学生,用半年的努力,保留住了在行业中立足的资格。他们的大学失去了不少,但可贵的是,机会还没有完全失去。编程语言的自学,尤其是自主性学习,必须实践为主线,可以参照教材中的章节来安排学习进度,可以用当初上课时用过的课本,也可以用某本权威的、经典的教材。要随着学习,找到或者自拟出适合做的题目。在这种不再有考试作为评价的学习中,可以问自己:“会做了吗?”这可以作为“我是否学会了”的同义词。计算机类专业的大学生掌握多门语言是一件很自然的事,除了老师教过的,其余的都是要自学。编程语言的自学,路线就是学、做结合,以实践作主线,以实践为标准。
大学教学的内容是通过套装知识来实施的,其中抽象能力是核心,实践能力是目标,大多数实践包含的课程中,注重实践是在理论指导下完成的。而在课外自学的安排上,除了对理论的理解,需要更看重实践,注重用实践找到体验理论的机会。大学中必须要有自学,就是要将理论与实践就此结合和联系起来,大学生得到的就是鲜活、个性的知识,学习的过程,给了大学生解决任何问题、克服任何困难的能力和勇气;否则,学到的是空洞、无味、无用的死知识,进一步强化自己不敢突破,不愿改变的惯性。
一名大学生,应该是“有扎实专业基础理论,兼有较强的动手能力”的,这两方面的要求是相互促进,相互交叉。课内、课外的学习,基础知识和培养和应用能力的训练,需要兼顾。做到了这些,会发现这基础和应用原来并不是那样的界限分明,而是真的可以融为一体的。有些同学将这两者对立起来看,显得有些过于极端了,也不利于取得好的学习效果。在未来漫长的职业道路上,可以某一段时间偏重一边,另一段时间偏向另一边,甚至经过转岗、转行后,所学知识已经不在工作中以直接的方式体现,但大学阶段的兼顾理论和实践的学习经历,将成为各种可能发展的基础。
本文来源:《逆袭大学——传给IT学子正能量》一审过后,要压缩篇幅,将整理过的文字登在些处共享。
==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章分类目录(不定期更新) ==|
|== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==|
======== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =======