`
wsql
  • 浏览: 11808968 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

由学生到程序员的问题和对策

 
阅读更多

一、问题。

首先暴露一下,有些计算机专业学生的问题:

1.自学能力不强。表现在对于一些在开发中遇到的问题,不知道使用帮助工具,如MDSN(.NET方向),baidu等。甚至,在遇到一些问题的时候,只能等待,一点主动寻求解决方案的意识都没有。

2.逻辑思维能力不强。遇到问题,不主动思考。

举一个例子:Web网站的三层体系结构设计。有的学生,对中间业务逻辑层的业务实体的抽象特别吃力。原因可能有以下几个方面:可能在学习过程中,对OO和三层体系学的不够扎实,所以在对事务逻辑进行抽象时,感觉老虎吃天,无从下口,老感觉心里没有底(调查所得),或者说想到的东西不能形成系统。也就是多少抽象出一些类中的成员,但成员与成员之间的关系?哪个成员是必须的?哪个可以通过别的成员衍生而来?最终形成一个完整体现功能的系统感觉很吃力。

最主要的原因就是思考时得不到理论指导,思考也只能是零碎的,片断的。

3.灵活运用不够。表现在使用别人的代码,或者查到了相关资料,运用灵活度不够。这说明了自学能力欠缺,理论基础差。有东西,但无法理解其实质(即要表达的功能),只能生搬硬套,导致出现了各种问题。

最根本的原因:不理解算法,无法编程。如果学生对自己的系统功能很熟悉(起码有思路),可以去参考代码,做适当修改;同时如果学生对代码(别人的)要表达的功能很熟悉,同样可以在原来代码的基础上做一些更改,经过自己思维的加工成为自己的东西。体现了学生没有思考能力。

4.自己动手能力差。举个例子:连简单的word都要在老师的帮助下完成,自我动手能力有待加强。

5.无法和老师正常交流。有一些学生,对一些问题的理解不上去,认为老师的讲解太专业,听不懂。

当然,还有一些其它的问题。

二、对策

1、现状分析

问题暴露出来了,那就对症下药。在给出对策之前,先做一个简单的分析。

(1)有目共睹,四年制本科计算机人才很多编程能力不强,不适合企业要求。有人在网上就抱怨是:本科的人才培养方案出了问题。

我认为不是的。在我看来本科的课程体系设置还是比较科学的。有理论,有实践。(如:数据结构,操作系统,算法分析,软件工程,语言基础)。所以如果出问题,只能是实施过程出了问题(这在我的以前的一篇文章中提到过),着重于理论,就连实践性很强的课也被一大堆理论所代替。

出现这种现象的原因:一可能是条件不允许,没有实训基地。学生和计算机无法做到一对一。二可能就是老师引导不够,整个学软件开发的环境不好。据我了解,国外的一些著名大学,如麻省理工大学,斯坦福大学,开设的课程也都是这些。只是他们环境比较好,计算机应用比较普及。

所以我想说的是,如果硬件条件改善了,那就该找找实施过程的问题了。

(2)还有一个问题就是,学生到底能不能直接在学校的培养下成为程序员。答案当然是能!据我了解的一些在校外做java培训的学生,他们在学校时,学习成绩都是很一般的。但经过不到半年的培训,等到他们毕业答辩的时候,对于MVC架构,Hibernate等技术,虽然在介绍概念时有一点生硬,但能够听的出来,都理解了。

这就说明了一个问题:在学生想学(在某种刺激下),而且实践过程控制得当的情况下,学校是完全可以培养出适合企业要求的人才的。

2、真正的对策

通过我们的分析(学校和培训机构的比较,和对学生学习现有问题的分析),得到对策如下:

(1)调用学生的积极性。

学习积极性的提高,在于老师不断的鼓励,而且老师要一视同仁。尽量不要让学生有畏惧心理(不敢或者说不想问问题,因为听不懂,久而久之,也就不再问了)。其实,每一个学生都想学好,但最后没有坚持住。所以应该在教学过程中,抓住他们的软肋,激励和严格要求并存,并适时的与学生交流,而且在交流过程中要体现出来:老师很希望学生成才,同时也有信心学生能成才。哪怕是学生自己先失去了信息,在老师的激励下说不定会再次建立起学习成才的信心。当然,应该建立在水平沟通的基础上。

总之,首先要让学生想去学习,有信心去学习,才有可能学好习。上述暴露的问题4就是因为学生没有信心能干好。

(2)教会学生如何去学习。如果学生想去学习,有信心去学习,那么剩下的问题就是怎么样去学习了。这是本质!也就是让学生具备一定的自学能力,有一定的逻辑思维,能灵活运用。也就是解决问题1,2,3。

我认为:首先,老师要引导学生思考,而不是填鸭式灌输。在上课的时候,应该多类比,多启发.

举个例子,比如讲FCL中的某个类,就可以让学生打开MSDN和reflector,老师只要讲课堂内容牵涉到的成员,对于其它的成员就没有必要讲,也没有时间讲。可以留给学生课下去学习。在整个内容体系中,肯定不只一次使用MSDN,那么就可以多次告诉学生,可以通过MSDN哪个部分学习哪方面的知识。如类的命名空间,类的定义,继承以及成员的用法等等。

时间长了,就形成习惯了!

这就对老师提出了更高的要求:要多启发,多类比。我上课的经验告诉我,如果对某一个知识点熟悉,那么展开的就多一些,如果不是很熟悉,那么只能小心翼翼的展开。我判断“熟悉”与“不熟悉”的标准就是:对一个知识点的定义,使用范围,可能出现的问题,相应的替代方案,各自的优缺点,包括是否在以前的项目中使用过等都能说出来。

所以要求老师,只有熟悉了,才能写出来,讲出来。这就和我们写教案,然后讲教案,回头再总结教案是一个道理。所以要学无止境,海纳百川,方能做到艺高人胆大,才能对内容运用自如,才能更好的展开,介绍给学生。

其次,如果有可能,要让学生象老师一样去思考,建议学生多做总结,想到的东西要能写出来,那说明真正理解了,会了。现行的各种考试之所以有这么多弊端,但每年还在进行。就说明这一点。所以学习同样的书,同样的内容,想的多的学生能更好地去做,但做的多但不去想的学生进步不大。其实细想想,后一部分学生有很多不是想着去做的,而是模仿别人去做的。

所以对于案例教学方法中案例的作用,不是告诉学生代码是什么样的,而更重要的是介绍形成案例的思维方式,应该如何划分模块?为什么?应该如何抽象实体?为什么?实体间有什么样的联系?为什么?这样,以优秀案例的“点”让学生了解雷同的业务场景的“面”,扩大视野。

总之,学生自己有信心,老师在实践过程中讲究“引导”学生思考,在思考的基础上去“实践”。在实践的过程中,能够在老师的引导下去查资料,查帮助文档或者最终由老师指导着完成,而不是老师直接单纯地给代码,起码在给代码的同时,要告诉学生代码产生的思路。

(3)还有就是要保证学生的学习时间,这一点其实不太难,如果学生在老师的引导下,有足够的信心和兴趣去编程,那么只要老师下达任务就可以了,即所谓的“任务驱动”。一定要保证时间。

让学生去编程,才能发现问题,在师生建立水平沟通的前提下,老师给予指导(灌输思想),让其试着去解决问题(只要用心,问题总能解决),最终解决问题,形成自己的知识体系(经验)。

多次迭代上述过程,对老师而言,可以有更多的时间去充实自己,来积攒自己的那一桶水,以便更好地给学生那一杯水;对学生而言,锻炼了其独立做事的能力。

最后还有一个要注意的问题:如果学生的时间保证不了,那还不如填鸭式灌输。“自由”学习是一把双刃剑。所以,老师给学生留的作业要能够让学生完成,同时没有时间浪费。另外,对过程的监管和对学生的辅导,要求老师要付出更大的精力!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics