程序设计教学中培养计算思维能力的路径与方法
2019-12-16刘力凯
刘力凯
摘要:在信息技术飞速发展的新形势下,程序设计教学中培养学生的计算思维能力具有重要的意义与作用,该文提出了程序设计教学中培养计算思维能力的意义与作用,提出在教学过程中应重视养成学生计算思维的意识,并通过案例教学、研究性教学等路径,给出了培养学生掌握计算思维、提升计算思维能力的一些方法。
关键词:程序设计;计算思维;案例教学;研究性教学
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2019)29-0088-02
目前,计算机的应用已深入到人类学习、工作和生活的方方面面,学生无论学习的是哪个学科,将来从事的是哪个行业,都能接触到计算机的应用。然而随着信息技术、人工智能的飞速发展,信息社会对人才的要求已不再是仅仅掌握计算机的基础知识和基本操作,使用计算机的简单功能,做些日常性的事务来提高工作效率,更需要他们具备计算思维能力,在工作中,能结合所学的专业知识有所创新,有效的使用计算机完成某些应用开发,解决一些实际遇到的复杂问题。如何把一些实际问题转化为计算机所能解决的问题,这种转换能力就是计算思维能力,在高等教育中,培养学生的计算思维能力是目前大家较为关注的问题之一。程序设计语言教学是高等教育阶段的一个必要的组成部分,它对培养学生的信息素养和计算思维具有重要的地位和作用。为适应当前教学改革的发展,使计算思维的培养真正落到实处,以满足高等学校计算机基础教育对创新型人才培养的要求,本文就程序设计语言教学中如何培养学生的计算思维能力,提出了一些实施的路径和方法。
1程序设计课程中,培养计算思维能力的意义与作用
人类的科学思维总体上有如下三种:以观察和归纳自然泡括人类社会活动)规律为特征的实证思维;以推理和演绎为特征的逻辑思维;以抽象化和自动化为特征的计算思维。美国卡内基梅隆大学的周以真教授认为,计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广大的一系列思维活动。
从以上对计算思维的论述中可以看出,对计算思维的培养过程,就是学习如何严谨科学的分析问题、寻找解决思路、设计解决方案的过程,这和程序设计课程的培养目标是一致的,程序设计是一门应用性很强的课程,强调学生对知识的实际运用能力,程序设计课程的教学目标不仅要使学生掌握某门程序设计语言的基本语法知识,其核心任务还在于培养学生具备灵活应用这些知识的能力,掌握用计算思维的方法去解决今后工作和学习中遇到的各类非通用计算问题,如果一个计算机程序具备了解决某个问题的功能,实际上所体现的是程序设计者对于该问题的分析和解决思路,显然,学习程序设计能促进和加强学生计算思维的培养和训练,使计算思维的培养落到实处,能有效地培养学生掌握创新思维方法,具备学以致用的能力,既满足信息社会对大学生的基本要求,同时对培养复合创新型人才也有着十分重要的意义。
其次,计算思维的培养与形成,不仅对人的一生,无论是工作还是生活,也会带来极大的好处。苹果公司创始人Steve Jobs曾经说过:“在工作中是否要编程,未必那么重要,但你可以把它当成一面镜子,一面你思考的镜子。我认为学习如何思考是最有价值的。这个国家的每个人都应该学习如何编写程序,因为它教会你如何上思考。正如人们学习法律未必要当上律师,但学习法律可以告诉你如何从法律的角度思考问题。同样地,编程是一种稍微不同的思考方法。因此,我认为计算机科学是一门基础学科。每个人应该在一生中花费一年的时间学习如何编程。”这说明程序设计课程实际上也是一种培养学生在遇到任何复杂问题时如何思考的课程,计算思维将是每个人都会使用到的一种基本技能。
2程序设计课程中,培养计算思维能力的路径与方法
2.1强化程序设计中分析、建模和抽象能力的培养,养成计算思维的意识
计算机程序是指令的有序集合,程序设计课程的教学重点主要包含两个主要方面:一是各种指令的功能和使用方法,即编程语言的语法知识,包含了程序中用到的常量、变量、表达式、各种语句、控制结构、数据结构的表示及机器对它们的处理过程等知识点;二是计算思维的培养,即如何针对实际问题进行分析、建模,并从中抽象出指令代码,然后将它们有序的组织起来以完成特定的功能。第一方面是程序设计的基石,第二方面是程序设计的灵魂,熟练掌握一门编程语言的语法及编程技巧固然重要,但对于问题分析、解决思路和完成代码的抽象能力才是程序设计真正重要的、有价值的环节。
传统的教学模式中,由于语法知识内容量大,且这部分内容是课程的基础,是程序设计的基石,因而占用的课时较多,教师往往是按教材顺序逐个讲解编程语言的语法知识点,注意力较多地放在对于知识点的传授上,而训练学生计算思维的教学环节相应的少一些。虽然教师在讲授知识点的应用时也会强调计算思维的在编写程序中的作用,但由于学生参与较少,因而易造成学生不能意识到它的重要性,忽视对它的训练。而单靠死记硬背概念和一些设计规则,是不可能真正掌握和领会计算机求解问题所用的思维方法的。由于没有养成计算思维的意识,在面对实际问题时,学生难以抓住要点,总是直接编写程序,忽视前期的分析、建模、代码抽象的过程,造成思维混乱,难以得到预定的结果。因此,如何让使学生学以致用,重视和把握程序编写的分析角度、思维要点和代码抽象的过程,提高学习效果和综合应用能力,以满足实际应用要求,是程序设计教学要解决的首要问题。
经过课程实践,我们认为:一是应根据教学内容与目标,打破传统教材知识体系结构,充分体现学生的主体和中心地位,从适合教师讲授的角度转向适合学生学习的方式,在传授知识的同时注重能力的培养,真正做到既要授之以鱼,更要授之以渔,因此在讲授编程语言的语法知识之前,首先要使学生了解计算思维在程序设计中的重要地位,通过一些案例强化程序设计教学中分析、建模,代码抽象过程的重要性,以突出计算思维能力的培养环节,让学生明白程序代码只是程序设计者对于某个问题解决方案的计算机实现,而问题分析、解决思路并从中抽象出正确的数据结构、程序结构和各种表达式才是程序设计最重要、最有价值的部分,它必须在编写代码之前确定。二是要在后续的教学中,将计算思维巧妙融人教学的各个环节,增加计算思维在课程教学中的比重,精心组织教学过程让学生积极参与其中,不断体会计算思维的作用和魅力,有针对性的展开教学,反复强化训练,以养成学生在解決实际问题时自觉使用计算思维的意识。
2.2实施案例教学,培养学生掌握计算思维的方法
教学是一门艺术,采用有效的、适合学生学习的途径和方法才能起到良好的教学效果。虽然学生知道了计算思维的重要性,但如何学会用计算思维的方法去解决问题才是程序设计课程教学的终极目标。程序设计的步骤包含分析问题,算法设计(数学建模)并抽象出具体的实现语句,明确编程步骤,编写程序,进行程序调试等一系列步骤,学生如何把握实际问题的分析角度、算法设计要点和代码抽象的过程是教学的难点。教学中我们发现,传统的“灌输式”、学生被动接受知识的教学模式,体现了教师的主体和中心地位,导致部分学生没有真正动脑子去学,无法普遍激发学生的听课兴趣,听课的专注力不断下降,对讲授的内容常常是零零星星一知半解,这对今后的学习很难形成知识的积淀。
为了调动学生学习的主动性,激发学生学习兴趣与参与度,我们采用了案例教学,通过选取不同的案例,将教学的目标、难点、要点融入其中,让学生了解要学什么,如何去学,各知识点用在何处,启发学生在思考思辨中养成自我构建知识的能力和素质。例如,下面的案例是要求设计一个警察抓小偷的程序:
已知警察抓了A、B、C、D四个偷窃嫌犯,其中只有一个人是真正的小偷,审讯记录如下:A说“我不是小偷”;B说“C是小偷”;C说“小偷肯定是D”;D说“C在冤枉人”,已知四个人中有三个人说的是真话,一个人说的是假话。请问到底谁是小偷。
在这个案例中四位嫌疑人的表述是“不确定”的已知条件,“四个人中有三人说的是真话,一人说的是假话。”是唯一确定的已知条件,解决这个问题的方法可采用穷举法即依次假设、逐个验证。依次假设嫌疑人是A、B、C、D中的某一人,能满足上述唯一确定已知条件的假设即为问题的解。具体的Python程序代码如下:
但案例教学,不是举例,要通过精心组织教学环节,创设问题情境,引导学生积极参与,才能了解、体会如何把握解决问题的思维角度与过程。针对该案例,应创设如下的问题供学生思考,该案例的特征是什么?解决这个案例的方法有哪些?如何具体实施并抽象出合适的代码去实现?并进一步提出它需要解决几个问题:(1)如何表示A、B、c、D四个嫌犯;(2)如何表示“假设A是小偷”;(3)如何表示审问记录中四个嫌疑人说的话;(4)如何表示“三句是真话,一句是假话”;(5)如何实现“依次假设”,这些问题涉及了数据、表达式和程序结构等多方面知识,解决了这些问题才能从中抽象出正确的代码,为后续的编写程序打下坚实的基础。
另外,案例教学要让学生见多识广,从一系列类似的或不同的案例中,反复比较、体会,才能学会怎样根据不同问题的特征,选取不同的算法设计,并学会如何从中抽象出特定的数据结构、程序结构等,最后编写出正确的程序。需要注意的是为了弥补课时的不足,可采用多种教学形式,如课外练习、实验课等,拓宽视野,逐步掌握每个问题思维的角度、方法,养成自我构建知识的能力和素质,帮助学生有效掌握计算思维的方法。案例教学与传统的教学模式相比,它更能活跃课堂互动氛围,学生主动发现问题、提出问题的意识也大大增强,充分提高了教学与学习的效率。
2.3引入研究性学习方法,提升学生的计算思维能力
教学包括教与学两个方面,讲得好不代表学得好,从听明白到记住,再到最后的会用,需要教师精心设计教学环节,寻找符合学生认知特点和学习规律的教学方法才能实现。案例教学,教师重在引导,启发思想,而不是直接讲解答案,要充分体现学生是学习的主体,教师只是一个引导者,是教学内容的组织者,课堂上如果教师过分发挥自己能讲会讲的优势,容易导致重“教”不重“学”,学生看似听明白了,但印象不深刻,即使学生对讲过的知识点记住了,问题情境一旦发生改变依然会无所适从,这说明学生知识的掌握大都不是教师讲会的,而是靠学生自己学会、练会的。
计算思维的本质是抽象和自动化,程序是由一系列抽象的指令字符组成,对于长期适应于汉字表达的学生来说,无论是理解、记忆还是应用,都会有一定的难度。根据课程的这一特点,我们应采用研究性学习的方法,留出足够的时间让学生自主研究、学习,由不同的知识点,或引导学生自学自悟,或进行质疑讨论,或让学生进行实验训练,使学生通过各种形式运用所学知识去独立分析解决问题,提高计算思维的能力。例如在抓小偷的案例中,具体的分析、算法设计及每个问题的解答,要让学生自己去根据教师的引导寻找答案,改变以讲为主的教学方式,通过对一系列“是什么”“为什么”和“如何表示”等问题的研究与实现,才能引发学生深入思考,真正了解各算法适应于什么特征的问题、数据结构、程序结构、表达式的抽象会用到哪些知识、主动去关注并记住这些知识细节、体会它们在程序设计中的用途并了解自己的薄弱环节,只有通过学生自己对案例的独立研究、具体实现,自己构建知识体系,才能在面对实际问题时灵活使用它们,这样既有效地传递了知识,又极大提升了学生计算思维的能力。
3结束语
通过程序设计这门课程的教学,培养学生的计算思维能力、较好地完成教学目标并非易事,对教师的教学设计和实施都提出了很高的要求,还需要在今后的教学实践中,不断探索更适合的方案,为学生計算思维能力的培养加薪添柴。