张敏
2006年3 月,美国卡内基·梅隆大学计算机科学系周以真(Jeannette M. Wing)教授在美国计算机权威期刊Communications of the ACM 上提出了“计算思维”(Computational Thinking)的概念和详细定义。她指出,计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动,计算机的计算思维建立在计算过程的具体实现和约束之上,利用程序语言控制机器解决实际问题[1]。2013年,周教授接受中国信息技术教育杂志社刘向永记者的访谈时对计算思维进行了进一步诠释。她说,计算思维是思维过程参与制定问题,并给出它的解决方案,在一台电脑上以人或机器的方式就可有效地开展,简单地说,计算思维就是像一个计算科学家一样思维,在计算思维学习过程中,一个人学习的是计算机科学的概念,我使用“计算思维”而不是“计算机编程”,那是因为更多的是计算机科学而不是计算机编程[2]。
国外的众多研究者对“计算思维”进行了积极且深入的探讨和研究,这些学者涵盖计算机教育界、社会学界以及哲学界等各个领域,其中也包含各种学术团体。“计算思维”在美国的教育界得到广泛关注,卡内基 • 梅隆大学的计算思维研究中心由微软资助,美国计算机协会(ACM)、美国国家计算机科学技术教师协会(CSTA)等众多团体参与。ACM 在 CC2001(CS2001)的审查报告中明确将计算思维与计算机导论课绑定,要求该课程讲授计算思维的本质。2008 年 CSTA 发布报告“计算思维:一个所有课堂问题解决的工具”(Computational thinking: a problem solving tool for every classroom)[3],总结了计算思维。为了面向所有专业的大学新生开设一门被称为“怎样像计算机科学家一样思维”的课程,美国麻省理工大学、斯坦福大学、卡内基·梅隆大学和普渡大学等著名高校纷纷设置了面向全校的以问题求解为核心的“计算思维”通识课程。在以“计算思维”为指导的计算机基础教学方面取得了显著的成效。
我国高等学校计算机教育研究会召开“计算思维与计算机导论”学术研讨会,根据计算思维在教育教学中的作用,探讨在教学过程中如何以课程为载体讲授面向学科的计算思维方法。刘光蓉[4]以计算思维能力培养为导向的程序设计实验教学目标,提出了围绕这一目标而制定的程序设计实验教学内容与方法,取得了较好的实施效果。耿国华[5]根据对大学计算机课程教学目标的分析,归纳出文科计算机课程改革的思路,结合精品资源共享课建设需求,阐述了以计算思维为指导,在文科计算机课程改革提升过程中的探索与实践。王移芝等[6]对计算机基础教学的现状与发展趋势分析,提出了基于“计算思维”的“大学计算机基础”课程教学改革新思路。姚天昉[7]针对国内高校讲解程序设计的教学方法,提出了把“计算思维”引入“程序设计思想与方法”课程,对课程内容、实践环节等进行了全方位改革与试验。
基于计算机技术和Internet技术的飞速发展,培养大学生计算机综合能力,提高大学生使用程序设计语言解决问题的能力,是当今大学生计算机基础教育的核心之一。根据《中国高等院校计算机基础教育课程体系 2008》的规定,高校程序设计基础课程的学习目标是:(1)学习问题求解的思路和方法,即算法。(2)理解计算机是如何具体实现算法的,即如何才能有效利用计算机编程。因此在程序设计课程教学任务中,不仅要使学生掌握程序语言的语法规则来编写程序,更重要的是掌握算法思想与问题求解的思路,而计算思维正是使学生掌握使用计算机科学对问题进行求解的一种思维方法和能力。
国内外的众多学者把计算思维能力的培养视为教育界改革的重要研究范畴,特别是在计算机教育领域,进行了多年的研究与探索。如何将计算思维的理念融入到在计算机教学中,培养学生计算思维能力,成为计算机教学研究的焦点和改革的突破点,并在此研究中取得了一定的成果,但在程序设计课程教学中培养计算思维尚未形成一套完整的教学模式,仍处于探索阶段。计算思维具有强大的实践和创新能力,如何在程序设计课程教学中培养学生的计算思维能力,如何应用计算思维进行创新是一个有待探索的问题。
传统的教学方法主要将 C语言程序设计课程的教学重点放在语言的语法知识和规则的学习上,而且传统的C语言程序设计教材的前两章也都在深入的介绍程序的语法规则,所以一些教师偏重于在理论课堂上大刀阔斧地讲解语法规则,其特点是抽象、繁杂、枯燥的新概念、新名词、新规则接踵而来,使学生一时间难以接受,对程序设计的好奇心和希望随着前几节课云里雾里的语法知识和规则的讲解而新意全无,从而对C语言程序设计课程产生厌烦的心理,失去学习动力,进而产生恶性循环,甚至有极少学生因而产生畏惧情绪选择放弃,以至于学生不能很好的掌握C语言程序设计课程的教学内容和重点,不利于课程的进一步学习。
传统的教学方法偏重于理论知识的学习,许多教师在讲解C语言程序设计课程时多半在理论课堂,许多院校的考试大都是采用笔试形式,考试的主要内容大部分也是语法知识,从而导致很多学生为了拿学分只注重理论知识的学习,忽略了实践环节。当学生对理论知识学习的一知半解后再去上机实践,由于理论与实践的脱节,学生很难在实践课程中回顾起生涩的语法,并且由于理论课堂的语法知识的灌输,使学生认为语法是课程的重点,他们会在上机时把语法知识作为首要的任务进行练习,而且由于C语言语法的复杂性,使学生在一时间很难掌握所有相关的语法规则,程序调试时出现很多的语法错误,加之上机实践课往往由一名教师担任,教师要给一个班级的学生调试程序需要时间,这样会出现很多学生等待的现象,一节课的时间又很短,所以很多学生一节课可能一个小程序都没有调试通,影响了上课的效率。为了完成任务,导致学生在编写程序时照抄程序代码,敷衍了事,实践课程的教学效果不佳。
传统的程序=算法+数据结构,但是往往由于传统教学对语法的关注,常常在讲课过程中忽略算法的设计,而是单纯对语法知识的生搬硬套,一味的照搬现有经典算法,不注重程序设计的方法,没有给学生足够的空间去思考,所以学生不会积极主动的开动脑筋,不会举一反三,这样机械性的学习势必会阻碍学生的主动性思维和创造性思维的开发。
对C语言程序设计课程的教学任务而言,更重要的是使学生学习计算机分析、解决问题的思路和方法。因此,在C语言程序设计课程教学过程中,一定要避免只重视程序设计语言的语法规则的错误思想,在将计算思维的培养作为教学核心任务的教学过程中要重视程序设计方法,而不是语言本身,不仅要求学生用计算机读得懂程序,编写和调试代码,更重要的是要学会如何设计算法,从而开发学生的主动性和能动性。
在C语言程序设计课程理论教学中,摒弃传统的以语法规则为重点的教学方法,从培养学生分析问题和解决问题的能力入手,提升算法设计为教学重点,教师提出问题,根据给定的问题,首先要求学生利用自然语言描述问题解决的算法,这个环节中要留给学生思考的空间,要引导学生从多方面思考问题求解的方法,让学生主动提出问题,激活学生的创新思维,并积极探索问题的求解思路,从而形成多种自然语言的问题求解算法,然后利用程序流程图描述自然语言的算法,最后编写符合语法规则的程序代码。通过案例问题的解决,使学生逻辑思维能力得到提升,并能初步掌握多种分析问题和解决问题的方法,同时在将自然语言描述的算法“翻译”成程序代码时,使学生逐渐掌握C语言的语法规则。这样即开发了学生的编程思维,又让学生很自然而然地学会语法。
“兴趣是最好的老师”,所以教师要精心设计好第一堂课。教师选择学生感兴趣的案例,并与学生一起分析案例的求解思想,尽量使用给出多种求解方法,并用案例引入程序设计思想,让学生对程序设计有一个直观的感受,并使学生在讨论中激起对C语言程序设计课程的兴趣。第一堂课要设计一个简单有趣的案例,例如:“将华氏温度转换为摄氏温度”。首先给学生时间思考用自然语言怎样描述这个问题的解决算法,得到转换公式;然后画出直观的程序流程图;接着讲解变量赋值、输入输出函数等基础C语言语法规则;最后让学生思考怎样将自然语言“翻译”成程序语言。通过这个案例可以引出程序设计中的顺序结构、数据类型等基础知识。通过案例的引入、分析、求解和转换等一系列过程,让学生初步了解问题的基本分析过程、程序的基本框架、与案例相关的基本语法规则,使学生在求解问题过程中中掌握知识。
以选择生活化、常态化的案例为原则,提高学生的学习兴趣,更重要的是通过生活化、常态化的案例的解决方法的选择,让学生体会到如何用计算机解决问题的方法来解决日常生活中的问题,这个过程实际上也是计算思维培养的过程。
针对数组知识的学习,下面给出一个常见问题求解的案例:
(1)提出问题:根据居民二代身份证号确定此人性别的问题。
(2)常识解答:居民二代身份证号共18位,从左向右前6位为户口所在地,第7~14位共8位为出生年月日,第15~17位为顺序位(同地区同年同月同日生的人的顺序编号)其中第17位代表性别(奇数为男、偶数为女),最后1位为校验位。
(3)问题求解:从18位数字中取出第17位,然后判断奇偶性,奇数为男、偶数为女。
对分解后的两个问题,针对不同的理论学习内容,我们有很多种解决方法,如:使用函数提取字符串中的一个或多个字符、使用数组下标提取数组元素、使用指针提取数组元素等多种方法。下面针对数组的学习给出求解方法。
(4)求解方法:
Step1:利用数组存储给定的18位数字,根据数组元素特性提取第17位数字;
Step2:用取出的第17位数字与2模除取其余数,判断奇偶性。
(6)算法分析:针对以上问题的求解方法为例写出相
(7)问题的求解方法的代码化
通过这个生活化案例,训练学生如何将生活中的问题用计算机来解决,同时掌握数组的定义、赋值、元素特性、以及数组元素的引用等基础知识。使学生在案例分析和算法设计时培养了计算思维能力,同时让学生在有趣的案例中学习到相对枯燥的理论知识,提高了学生学习的兴趣。
在传统教学中,实践教学是理论教学的验证和辅助,而就现在一些区域本科院校应用型人才培养模式对应用型人才培养的要求来说,实践教学已经在应用型教学中占据了不可或缺的地位,很多应用型的院校已经加大了实践教学的课时比例,甚至超过了理论课程的课时,这无疑体现出实践教学的重要性。像 C语言程序设计等这类要求动手能力和实践能力更高的课程,更是要强调实践教学的重要性。同时由于对学生创造性和创新性思维进行了培养,在实践教学中引入计算思维,实现了对应用型人才培养的要求。
在理论教学的基础上,学生对程序设计的思想和程序设计的语法有了一定了理论认识。在实践教学中,以理论课程的学习内容为基础,组织与之相结合的案例进行练习,以此来巩固学生在理论课中所掌握的思想和语法。
大学教育更多的是素质的养成,能力的培养,在大学教育中,少一些灌输,多一些参与,“tell me and I will forget.teach me and I will know. involve me and I will learn.”基于计算思维的案例教学,在C语言程序设计课程教学中让学生参与其中,培养了学生的计算思维能力,运用计算思维的案例法引导学生自主学习,提高了学生的主动性和能动性,培养了学生的创新能力和应用能力,是实现程序设计课程学习目标的有效方法。计算思维的培养为计算机专业的后续程序、算法类课程的学习奠定一定的基础。从思维方法的高度对学生进行培养,提升了其创新思维与解决问题的能力,也为终身学习提供了良好的学习方法。
[1] Jeannette M. Wing. Computational Thinking[J].Communication of the ACM.2006,49(3): 33-35.
[2] 刘向永,周以真.计算思维改变信息技术课程[J].中国信息技术教育,2013,6:5-12.
[3] 董荣胜.计算思维与计算机导论[J].计算机科学,2009,36(4):50-52.
[4] 刘光蓉.以计算思维能力培养为导向的程序设计实验教学[J].实验技术与管理,2013.11:54-156,191.
[5] 耿国华.以计算思维为指导提升大学文科计算机教学质量[J].中国大学教学,2013.10:12-15.
[6] 王移芝,鲁凌云,周围.以计算思维为航标拓展计算机基础课程改革的新思路[J].中国大学教学,2013,6:39-41.
[7] 姚天昉.在程序设计课程中引入“计算思维”的实践[J].中国大学教学,2012,2:61-62,76.0