成功学习编程技巧的条件

成功学习编程技巧的条件
Jaana Holvikivi 赫尔辛基城市大学应用科学系
摘要
第一门编程课常常使学生们不想继续他们的软件学习生涯。学生们难以理解计算机编程的逻辑。特别是那些身处不同文化的学生们不能很好应用逻辑思维,或者系统地遵循指示。数学的思维能力不能如愿地转移到编程的。难以描述写程序的思考过程,程序设计中解决问题的过程像启发式一样含糊。显然,积累的专门知识并不是那么容易描述出来的。编程是专门知识中的一个独立的领域,需要系统性的练习和自我监控,建构适当的心理模式。

关键词
编程技能  计算机科学教育  专门知识  心理模式

1导言
学习基本编程技能已被证明很困难,并且,内在的困难性难以分析。计算机科学教育研究致力于找到有效的教授编程的方法,迄今为止收获不大。不可否认的是,对初学者来说,已经诞生了一些好的编程语言,还有软件和方法,以协助课堂实践。尽管如此,没人敢声称大众都接受,而且第一门编程课的结果往往令人失望。
越来越多的研究试图找出一个学生个体学习编程的过程——如何追踪常见的障碍和误解。一方面对个别学习者的研究,,另一方面和大量的学生对比。然而结果是,没有结果。本研究试图阐明学习编程的潜在条件。第一,提出了目前对编程教育的理解,并且从认知科学方面加强了此观点。第二,介绍了一个关于学生分析思维和编程能力的研究,并将结果和课堂实践中的人种学数据对比。最后,讨论了结果,综述了编程思维的习得是基于认知能力和专门知识的积累。

2编程指导和思维能力
大量的文献指出,学生学习编程时会经历许多困难。例如,一个ACM/ICER工作小组2001年报告了初学者对于编程的无能为力。作者对美国和其他国家的一些高校的大一学生进行测验,内容是常见的编程问题。大部分学生的表现比想象中的糟糕。该研究没有透露失败背后的原因:是因为脆弱的知识还是差劲的解决问题能力。一个扩展性的后续研究旨在找出好的和差的代码跟踪策略。该研究指出成功和失败学生用的方法没有什么不同,思维能力也没有层次上的差异。大部分学生在解决一个特定问题时会使用多种策略,不同问题用不同策略。一个学生适用的方法,其他学生不一定适用。成功不仅仅由采用何种策略决定,而且还由如何用好该策略决定。
计算机科学教育可以从多方面加以改进,比如学习工具、教学方法和课程。其中一个核心问题是计算机科学专业的第一门编程语言的选择。普遍认为这是往后的学习动力的关键。从算法开始呢,或是从面向对象编程开始呢,还是别的呢,备受争议。因此,不同的语言有都其支持者:Ada、Pascal、C、Java、PHP、JavaScript和Python,还有直观教具和积木类工具,等等。一种观点偏向于商用开发环境和强大的语言,很受学生欢迎,而另一种观点则相反,强调思维能力特别是算法性思维的重要性。教育者相信,学生需要学习编程的思维方式,而不是仅仅是一种语言的语法和语义。此外,计算机科学的其他学科,诸如数据库和网络,复杂又要求概念性,理解它们需要抽象思维和良好的解决问题的能力。
已经诞生了许多创新的方法来帮助初学编程者。Stein介绍了引入“计算为了交互”的观点:基于事件和面向对象思维。她在入门课程中使用了Java,强调用户-计算机交互是现代网络环境的核心。Radenski开发出“Python先行,Java随后”的程序。根据他的调查,此程序在学生中大受欢迎。Python先行是因为它的相对简单些,Java随后是因为它提供了强大的功能。此程序已有相当数量的实践和辅助材料。此外,一些项目已利用了它的组件可视化。
Eckerdal和Berglund的研究专注于面向对象思维,因为他们发现学生在此方面不太行,提问的时候也不太能描述出来。面向对象范式建立于一组抽象概念之上。学生的理解程度需要达到一定的高度,才能使用这些概念来分析和设计面向对象编程任务。不过,教育者有方法帮助学生达到这般程度。研究者提出,这可能包括解决问题的能力和系统性思维,还有关于学习的思考,就是元认知技能。
这个更高层次思维能力影响编程能力的想法,是基于一个认知领域转移到另一个的理念。然而,它的适用性和这种转移是否存在,仍有争议。最近的神经科学研究攻克了学习技能转移的难题。研究结果对于教育者来说并不乐观:简单认知技能的转移可能不发生,反而每种任务需要新的训练。然而,此结果只在简单任务上证实,更高层次的技能仍超出认知科学的方法,特别是脑部扫描。认知心理学的常用方法是认知隔离机制。为了在实验室环境研究它,测量结果,认知过程必须分割成很多小部分。然而实际上,学习复杂知识依赖于多种认知的组合,还有社会性动机机制和资源。
Vainio和Sajaniemi注意到新手程序员跟踪程序的能力很差。他们认为编程是一个这样的过程,它包括程序创作、设计、程序理解、调试,等等。这些任务经常以高度重叠的方式进行,比如,调试要求理解和详细跟踪,内心模拟程序执行。Vainio进行了一个探索性的访谈,包括给一群新手同学的程序理解任务。然后他分析了理解协议,以确定影响新手的程序跟踪能力的具体困难。研究发现学生在程序跟踪的4种具体困难:单个变量的值跟踪、不能区分函数和结构、不懂使用外部表示和提高抽象层次。
由于人类工作记忆容量的极其有限,程序员的记忆只能存放程序的小部分。长期记忆的巨大容量和执行功能的狭窄管道形成鲜明的对比,这就是关于大脑功能的矛盾。大脑的组织远不像磁盘存储器的组织或者其他模块化信息存储器,它类似于由许多模块协助的复杂动态网络。大脑活动时是高度类比和并行的。例如,布罗卡氏区负责语言处理,它与前运动皮层一起,将语言处理与视觉感知和运动活动联系起来。写作本身就是一个复杂的过程,写代码也是。肢体上的写作活动,是一个运动过程,可以提高学习效果。
意识活动严重受限于控制工作记忆的执行功能。当处理是串行的时候,意识处理的管道很窄,以防止一心多用。执行功能也很容易分心。因为工作记忆的容量很有限,所以当我们理解了它们,它们成为独立数据片段之后,我们就不去记住这些复杂的东西和代码段。只要我们学会了模式和算法,并创建它们的心智模型,就可以处理更复杂的任务。心智模型和外部工具帮助我们构建想法。
此外,人类不能准确地表达自己的想法。许多研究表明,当一个人试图表达自己的想法时,他的思考过程会改变。特别是启发式的问题解决绕开了意识。许多研究都表明,人们常常连问题都没有想清楚就要解决它。同样,他们学习解决问题的新策略,似乎发生在意识之外。顿悟就是无意识地发生,有时候在睡觉或者据说发呆的时候。

3方法
本次分析的初步数据是通过一系列调查收集的,调查对象是芬兰赫尔辛基地区一所应用科学大学的信息技术学生。他们来自30多个国家,大部分是男生。调查包括学习计算机科学的学习习惯,经历和困难。124名学生参与了调查,其中62名在课堂上做纸质问卷,62名做在线问卷调查。数据随后用来和入门性计算机科学课程的结果对比(考试和作业)。进一步的解释通过六年实地调查工作的人种学观察数据得出。该数据包括课堂活动实践的笔记,特别是意外的事件和困难。因为每年都有新学生,教学工作也跟着重复,某些模式就出现了。另外,学生制造学习日志和团队工作报告,这可以用来分析他们对学习的理解。Holvikivi的博士论文详细描述了此研究过程和数据。
此外,还进行了两项研究来测试逻辑思维,它被认为是编程必不可少的部分。第一份问卷测试了语言逻辑和数学推理(135人),第二份比较了数字电路课程学习的布尔逻辑中的逻辑思维能力。Holvikivi详细介绍了第一个研究的结果。第二个测试是在教室发的简短问卷,包括布尔运算、4个逻辑三段论和另外2个推理题。来自16个国家和地区的45名学生回答了问题。以下介绍该测试的结果。

4研究结果
本研究表明,学习从一门课程转移到另一门是极慢的。特别是数学技能,不能完全应用到其他情况。即便是通过基础数学课程的学生,算术计算也在其他测试情况下失败(总体成功率50%)。数字系统转换的失败就更可怕了,成功率37%。半数的学生丧失了数学运算和解决问题的计算的联系,这可以用机械学习和缺乏深度理解来解释。

4.1逻辑推理
测试的三段论中的应用逻辑思维和推理题的结果表明,在不同类型的推理之间,逻辑技能绝对不是可转移的。例如,布尔逻辑的训练不会给解决三段论问题带来帮助。实际上,没有接受过二元逻辑训练的组表现得最好。测试包括布尔AND和OR运算,4个逻辑三段论,和1个其他的推理题。结果(表1)显示,69%的人答对布尔运算,但只有37%的人答对语言题,三段论。因此,半数精通基础数学的人在语言推理上失败。

表 1. 第2个逻辑测试中答对的数量
-------------------------------------------------------------------------------------
                总共45人 (男40,女5)
                三段论: 4题正确                     6    13%
                            3题正确                    11   24%
                            0、1或2题正确         28   62%
                布尔AND和OR正确              31   69%
-------------------------------------------------------------------------------------

一般来说,对推理研究的深入研究也会导致相同的结论:一个推理任务常常产生任务依赖或上下文依赖的结果,从以前做过的任务预测未经训练学科的结果很少成功。

4.2按指示操作
另外,写代码的成功不仅仅依赖于抽象思维,还有系统性的工作模式。写代码需要一种能精确遵照指示的能力。在我们学校,我们发现,没有经验的学生做实验室任务时,会按照随机的顺序,而不是按从头到尾的顺序。一些要创建或者复制文件的任务,诸如创建Excel表或者输入Linux命令行的命令,是需要逐步进行的。命令行界面需要学生遵守准则,若命令的顺序变了,或者学生跳过一些步骤或从中间开始,任务就会进入混乱状态。那些不按正确顺序输入命令、也不跟随屏幕的学生,是不能领会到他们是通过了(系统一般不会告诉他们)还是出错了。在这些情况下,与计算机沟通的过程失败了,因为人类是不习惯计算机系统那些纯粹形式和极其稀疏的沟通,甚至并不认为这是一种沟通。
我们对学生的研究表明,特别是移民学生普通感受到了沟通的困难:超过半数的外国学生报告说,他们认为指示不明确,而本国学生却没有这种问题。此困扰尤其与实验室任务相关,高达65%的外国学生表示他们经常看不懂指示。然而,看不懂指示并不直接和学生的英语水平挂钩,尽管20%的学生报告说语言困难。看不懂似乎和指示的过程化风格有关,也许和学生被期待明白却没有被告知的不成文的假设有关。
此外,一些来自其他文化的移民学生有着强烈的口头传统,如索马里文化。他们更喜欢面对面交流,这可以由经常拜访教师办公室看出。那些在根据书面指示工作方面有困难的学生,可能会得益于学徒模式。芬兰的大学的指示大都来自中间物,比如书面或在线资料。芬兰和其他西方学生都习惯文字学习材料,就是“纸质追踪”的工作方法(由Teräs探讨)。这适合他们的行为模式,文献(或电子文档)基本上集成到工作中。

4.3代码跟踪和编程
在代码跟踪任务中,尽管要求是模拟计算机执行,学生经常试图找到一种直观的解决方法(可以观察到此现象)。他们应用自然语言的知识,从部分信息总结和填补空白。而且,代码跟踪任务的失败意味着监督思考过程能力的缺失。
而且,代码跟踪和错误侦查对于有拼写问题的学生来说更难。那些第一语言不是字母语言的学生,比如阿姆哈拉语或尼泊尔语,尤其受这种障碍困扰。当校对文章和代码的标点符号和拼写时,他们无法“看到错误”。
除了以上讨论的概念,比如程序式、面向对象和基于事件思维,我们还注意到理解许多其他信息技术的基本概念的困难:文件系统的组织、本地和全球网络、关系和层次数据库结构、客户端-服务器架构,等等。
移民学生之前的学习生涯可能主要是老师主导的课堂,需要记住提供的资料。实验室的设置可能是一种全新的课室环境,学生缺乏控制此工作的模型。如果学生的学习模式只有老师讲学生听,她可能会采取一种菜谱式的学习模式:教什么做什么,重复做且不思考。然而,即便是简单编程也需要创造性思维,这反映在最平凡的任务也有多种解法。一小片代码,一小个数据库表或XML结构--无论是什么,每个学生都有独特的解法!创造新解法的能力和将理论应用于实践的能力相关。这是一项必须明确教授的技能,显然,不同的教育系统产生的方式不同。正如其他能力一样,它是需要不断练习的。
另一方面,面向对象思维的应用已被证明比早些时候的学习容易。我们已经将它应用于自然发生的环境中,就是操纵CSS、HTML或XML文档的一部分。这些语言使用的文档对象模型很直观,操纵结果在HTML页面是立即可见的。因此从某种程度上说,JavaScript作为第一门编程语言有一定的优势的,除了有激励性之外,还因为它简单的语法和网络适用性。我们的课程计划部分基于Snyder的教科书。在简单的程序设计中,流程图充当思维工具,有助于代码跟踪。或者,XML结构或者XSLT编程学习起来也相对简单,假如他们是一步一个脚印,结构从简单到复杂。XSLT是这样的一种高级语言,它允许只关注结构而无需担心语法细节。不幸的是,它太专注了导致不能用作编程的常规介绍。

5讨论
编程思维的各种困难很恼人。学习编程的常规似乎依赖于通用的问题解决能力、学生的认知能力和分析才能。假如好学生是成功的,那么教育者还有哪些要做?显然,改善结果更加困难,假如找出没有特定的配方或最优工作策略。关于高层次专业知识的一个重要的研究发现是,个体发展其特定知识并应用于不同情境的能力往往与一般思维技能和元认知策略的发展同步。因此,为了有更好的学生,我们需要提高他们的思维和学习能力,和自我调节能力。自我反思和有意识的监督过程对于改善实践很重要。专业知识的发展是通过深化解决问题的过程来进行的。对国际象棋大师的研究表明,他们有大量的国际象棋模式的心理模型,并能毫不费力地记住他们的位置。类似的,爵士钢琴师有庞大的曲目曲调库。程序员脑海里也有一系列解法和结构。此研究也观察到练习和应用理论知识的中心作用。学生需要时间和各种问题的足够的练习,以建立软件结构的心理模式。
而且,对程序功能有一定的理解,加上技术水平,是成功完成软件工程工作的先决条件。视觉辅助工具,图形和动画,有助于将程序和结构建模。另外,理解算法思维的抽象概念和能力是必需的。理解计算机需要理解形式化系统。在形式化系统,一系列现象被编码成符号,而且只能通过引用来操纵。符号的意义在操纵时不被解释。
本研究呈现的逻辑推理的困难可以用大脑的认知功能来解释。推理可能包括几种分布在大脑不同部位的能力。最近的fMRI研究表明,数学功能和言语功能在大脑不同的区域和网络,计数和计算在不同的区域,经济决策和社会决策在不同的区域,等等。编程逻辑在大脑主要是当作数学问题解决处理呢,还是言语任务处理呢,还是视觉空间处理呢,不知道,但非常值得研究。

6总结
我们学习是建立在现有的模式和思维模式上。若有可以运用到特定场景的相关经验和模式,学习会更容易。编程专门知识的积累就是一个持续的过程,在头脑里连续构建新的、有用的模式,以便需要的时候用。传统先教简单语言的经验,再一次印证了此研究的发现。学生需要专注于基本模式,所有其他的细节应该保持在最低限度,因为学生的学习能力严重受限于大脑容量。有了简单语法的语言,学生可以专注于问题解决层面,而不是被迫和一层初始化和定义作斗争。而且,简单的语言提供了学习的乐趣和享受,可以激励学生。
开始学习编程时,学生必须有一定的基本能力。这些心理模式包括程序式思维和行动,程序功能的理解,和与技术产物舒适相处。知识构建是通过自我监督,聪明的练习实现,这种练习以小进步的方式积累技能。总之,编程与其他专家知识一样,有着相同的模式。这种技能是建立在先前的经验和能力,并需要大量的实践。

小感:论文呢,都是不讲人话的。幸好,这篇有一半不是。读文章,无需懂每一句每一词,写作者也无法保证完全没有语法错误和表述不清。依靠已有的经验和上下文推理能力,便可理解作者的意图。我认为Holvikivi教授说得很有道理,故此特意摆出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值