非线性学习方法是我的提法,这是我根据对程序设计学习规律的观察而总结出来的。要想说清楚什么是非线性学习方法,我们先来看看所谓的线性学习方法。

传统的学习方法都是线性的,如高等数学,先学极限,再学导数、不定积分,往后就是定积分;再如程序设计(JAVAEE方向),一般是先学C,再学JAVA基础、数据库等,然后是JAVAEE基础,再往后就是各种框架了。之所以称为“线性”的,是因为这些知识前后联系紧密—只有学会了前面的知识,才能弄懂后面的知识—因此这些知识点的学习就有一个前后的顺序,很像数据结构中的线性结构。

虽然在学习过程中,线性学习方法是必须的,但对于已初步具备了JAVAEE相关基础知识的学生来讲,却并不是好的学习方法,原因如下:

1、JAVAEE方向涉及的知识面极为庞大,从JAVA基础,到JAVAEE基础、数据库基础,再到各种后台框架(struts、hibernate、spring等等),以及html、javascript和前台的javascript框架(extjs、jQuery等)等,而且几乎每个方面的知识点都极为庞杂。如果按照传统的线性学习方式,则需要学生投入巨大的时间成本。在此之前,学生并不能深刻地感受到学习到的知识有何用处,学习的回报周期长,学习积极性自然容易受挫。

2、在学习过程中,由于缺乏实际项目锻炼,会导致学生有两大缺陷:一是先前学习过的知识,不能熟练使用,知识只有在实际项目中反复使用,才能达到融会贯通;二是也无法获得实际项目所需的其他技能,如svn的使用、程序调试的技术和技巧,框架的集成使用等等。这些技能只能在实际项目中才能有效培养。

但实际上,作为一名初级程序设计人员,却并不需要深入掌握每个方面的相关知识,甚至不需要预先掌握某个方面的任何知识。在以上所列举的各个方面的知识中,只需要具备相关的基本知识,即可通过让其参与模拟项目或实际项目的形式,进行进一步培养。这是因为:

1、现代项目开发都是多人合作完成,作为一名初级程序员,只需要完成自己负责的简单模块即可,不需要具备所有的知识。较难的模块由技术熟练者完成,全局的把握由资深程序员担任。

2、现代软件开发技术的发展,大大降低了软件开发的难度。有时即使知识没完全掌握,不太理解,靠模仿也能把功能做出来。

3、相关知识点的联系不像数学等学科那样紧密,也就是说,前面的知识点没有掌握,对后续知识的掌握影响不会特别大。

综合以上因素,我提出了“非线性学习方法”的概念,具体做法如下:

首先,学生在通过传统的线性学习方法掌握了JAVAEE的基础知识之后,没有必要再按照同样的学习方法学习框架、javascript等相关知识。实际上,他们只需要学会相关最基础的知识,即可安排他们参与项目(模拟的或实际的),让他们首先从模仿开始做起。先不管懂多少,先把功能模仿出来再说。模仿出来后,就可大大提升学习的自信心和积极性。

在模仿的过程中,自然会遇到不懂的知识点,那么此时对此知识点进行有针对性的学习,学习的积极性自然很高。这是一种任务驱动式的学习,学习的目标很明确,也知道为什么要学。经过一段时间这样的积累,学生的相关基础知识就能够学得比较牢固。

像这种不是遵循先后顺序学习知识点,而是采用“用到什么,学习什么”的方式,就称之为“非线性学习方法”。

非线性学习方法实施的前提是:

1、教师充分指导。在这种学习方法中,需要有一个项目作为依托。那么首先,就应该有人先搭建一个项目框架,并负责总体把握。学生显然无此能力,只能由教师完成。学生在学习初期,相关知识、技能不熟练甚至不懂,很容易遇到错误而束手无策。若缺乏教师有力指导,则必然打击自信心。对于普遍性较难的知识点,教师应及时集体讲解。

2、要有一个学习的集体。教师不可能细致地指导每一个人,因此就要求把相关的学生组织、集中起来。这样,遇到问题他们就可以相互请教、指导,也可解决很多学习中的实际困难。再者,这样的集体建立后,对创建良好的学习氛围也大有好处。

3、要有实战项目支持。模拟或学校内部的项目带有很多练习性质,离最终市场需求尚有较大距离,要想最终锻炼学生,必须让学生参与到实战项目中。

4、学生要有较强的自我管理能力,学习能力。在这种学习方式中,没有成绩考核要求,主要靠兴趣、自觉,自我管理能力和学习能力较差者很难进步、坚持。因此,这种方式只适用于对程序设计兴趣强烈、我管理能力和学习能力较强的学生。


什么是非线性学习方法?
JAVAEE知识的系统性有多重要?再谈非线性学习方法