基于认知规律新视角的程序设计教学研究

2014-10-27 22:21周幸妮
计算机教育 2014年10期
关键词:认知规律程序设计思维

周幸妮

摘要:编程是人们开始使用计算机时最难以掌握的概念。传统的程序语言教科书基本是以高级语言自身的体系为脉络,针对学生一般很难在课堂上就掌握编程方法的普遍性问题,提出应该从人们对事物的认知规律出发,首先注重在教学中给出根据计算机特点解决问题的思维过程,分析各种机制设置的本质原因、各种相关概念间的区别与联系,再通过基本语法学习、算法设计练习、调试技能训练等环节达到事半功倍的效果。

关键词:程序设计;思维;认知规律

0、引言

“老师,书里那些语法规则之类的概念我都知道,也记得很清楚,编程的例子也都能看明白,但最后自己还是不会编程序,总觉得编程是很难掌握的东西,真的高不可攀啊……”这是学生在学习c语言课程时常常提出的问题。笔者从事多年的程序设计教学,逐步发现如果用传统的c语言教材讲授课程,学生在课堂上学完了程序设计课程却不能掌握程序设计也就是编程的方法,这是普遍存在的现象。

1.编程学习困难的原因分析

从程序设计本身的特点和学习它的方法上分析这个问题,笔者认为造成编程学习难的原因有以下两方面。

1)编程本身的问题。

算法和程序设计技术的先驱者Donald E,Knuth(唐纳德·克努特)在其堪称计算机科学理论与技术的经典巨著The Art of ComputerProgramming(计算机程序设计的艺术)开篇中提到,编程是把问题的解法翻译成为计算机能“理解”的明确术语,这是人们开始试图使用计算机时最难以掌握的概念。

2)讲授方法的问题。

传统的程序设计语言教科书基本上都是以高级语言自身的体系为脉络展开教学,注重的是语法规则、基本概念之类的基本知识点细节介绍,往往缺乏各概念间比较、联系的分析总结;给出程序实例的一般方法为先给出详细的算法思路描述,再给出相应程序,即从问题直接得到“详解”。对于如何能获得这样详细的思路、分析的过程及方法是什么即思维的过程,传统教科书一般没有阐述;对于如何从一个问题人手、算法应该如何设计、如何从实现的角度看程序设计问题,传统教科书没有总结出一般性的方法。学习者看到的是一个个问题的具体解,解决了一个问题,换另一个新的问题,依然不知如何下手分析和解决该问题,因此学生普遍反映学完程序设计语言后只会一些语法规则,而很难在课堂上就掌握编程的方法。

2、学习思维过程的价值

欧拉认为,如果不能把解决数学问题背后的思维过程传授给学生,那么数学教学就没有意义。现代计算机实质上的发明者莱布尼兹也说过:“在我看来,没有什么能比探索发明的源头还重要,它远比发明本身更重要。”文献中指出,“从小到大,我们看过的数学书几乎无一不是欧几里德式的,从定义到定理,再到推论。这样的书完全而彻底地扭曲了数学发现的真实过程。目前几乎所有算法书的讲解方式也都是欧几里德式的,每一个推导步骤都精准制导、直接面向目标,实际上,这完全把人类大脑创造发明的步骤反过来了。对读者来说,这就等于直接告诉你答案和做法,然后让你验证这个答案和做法可行或成立,而关于答案和做法到底怎么来,从问题到答案之间经历了怎样的思维过程却鲜有教科书能够给予很好的阐释。对于这类知识讲述(欧几里德方式)方式的批判,西方(尤其是在数学领域)早就有了。”我们都会思维,为什么思维本身又需要一遍遍地教呢?讲述思维过程而非结果有以下几个极其重要的价值。

1)思维的内隐化。

思维法则其实也是知识(只不过它是元知识——是帮助我们获得新知识的知识),是内隐的记忆。我们在思考的过程中觉察不到思维法则的作用,它们却在幕后实实在在地左右着我们的思维轨迹。将思维方法内隐化需要不断练习,就像需要不断练习才能在无意识状态下骑自行车一样。

2)思维过程比结果包含了更多的知识。

思维法则也是知识记忆,是问题解决的策略。在不知其所以然的情况下,算法只是一堆离散的机械步骤,缺少背后思想的支撑,这些步骤之间就没有一个本质层面上的关联,记一个算法,就只有一个算法,所以就跟背历史书没多大区别;而记处理问题背后的思想,却有助于解决一类问题。思想所处的抽象层面往往比到处都是实现细节的算法本身更接近事物的本质,涵盖范围就越是广泛。

3)跨情境运用。

一本从思维角度讲问题求解的书可以教人做思维练习,同时强化一些思维习惯,熟练之后就可以用到类似的场景中。

4)注重分析推理,找出问题的本质。

重在思维的传授可以让人养成从问题本质人手逐步分析推理的习惯,而不是直接生搬硬套。很多时候我们并不知道问题的本质是什么,而需要靠联想和类比来探索。手把手地教学生走一遍推理的思路,可以让学生获得思维过程的训练。欧几里德式的介绍除了提供枯燥的知识之外,并没有提供帮助人获得知识的思维。传统教科书的问题在于没有一个思维过程的引导与分析,没有按认知规律进行知识的传授,致使概念论述、实现细节有余而设计实现过程描述不足,让学生看到的只是一个个问题的详解,而把握不住算法设计的总方法和原则。

3、基于认知特点设计编程学习方法

如何让学生容易理解和掌握编程的方法?在教学中遵循人们对事物的认知规律,注重思维方法的教授,才能提高教学实效。笔者在《c语言程序设计新视角》(以下简称“新视角”)一书中,从学以致用的角度出发,强调程序的设计思路、分析方法、测试及调试方法,弥补传统教科书中的不足。针对实际问题进行程序设计应该如何人手,“新视角”一书从总体的实现思想(自顶向下方法)、处理要素的把握(如函数要素如何提炼)、程序的分析方法(列表分析)等各方面,即如何用“程序的思维”看问题和解决问题,给出了相关的新方法和新思路。

3.1 把握程序设计架构全局

教师要有融会贯通教材的能力,使每个教学环节的教学内容相互关联、由浅入深、由基本到拓展。在学习之初,我们应先从大的方面人手,给出如何做程序设计的整体印象,然后再逐步深化,让初学者能快速把握整体框架,树立信心,形成初步应用能力。endprint

猜你喜欢
认知规律程序设计思维
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
思维总动员(二十五)
思维总动员
幼儿教育教学中的随机教育
“影响化学反应速率的因素”教学设计
通过认知规律进行逻辑思维训练刍议
浅析高中数学课堂的提问策略