论文部分内容阅读
在数字时代,数据既是信息的载体,也是计算机加工的对象。信息技术的发展,在某种意义上就是构造、存储、计算相应数据的能力的发展。从应用角度看,信息技术已然成为人们日常生活、学习和工作中不可或缺的工具,我们习惯利用计算机来解决各式各样的问题,可以说,“程序驱动”的数字化工具不仅改变了我们的生活与学习方式,而且改变着我们的认知结构与思维品质。因而,在“算法与程序实现”模块内容的教学中,教师要引领学生在学习处理数字化环境下复杂性问题的过程中,深层次理解这些技术工具,知道它们的工作方法和应用流程,明白其中的数据是如何进行“计算”的,并能用计算机编程方式进行问题求解,从中发展计算思维。在学习中,既要强调对算法这一关键学科知识的学习,也要注重形成运用计算思维解决问题的关键能力的培养。实际上,无论算法的学习还是计算思维的培养,都不是孤立存在的,也不能单独教学习得,它们渗透在计算机解决问题的过程中。我们要有意识地帮助学生亲历计算机解决问题的全过程,从分析问题、设计算法并编程实现的过程中,逐步培养计算思维。
理解用计算机解决问题的全过程,把握算法与程序的关系
用计算机解决问题需要借助编程的方式实现,但这并不等同于简单的程序设计的教学,不是纯粹的代码编程。在教学中,教师要首先帮助学生理解用计算机解决问题的一般过程与方法,明晰这种问题解决方式的特点和优势,从中把握算法、程序和计算思维之间的关系,以便在后续的学习中迁移应用。
例如,教师可以通过常见问题解决的两种方式对比,如比较“路口交通指挥问题”中交警用手势指揮交通和用“程序控制”的信号灯指挥交通的异同,帮助学生理解解决问题的方式并不唯一。使用人工方式进行问题处理时,人们主要是借助解决同类问题的经验寻找求解方法,带有较强的尝试、试探的意图,一种方法行不通,就换一种方法。而用计算机解决问题时,则需要在问题分析的基础上,具体规划求解方案并设计出具体的算法步骤,然后根据制订的这些步骤编写程序,最终实现问题的自动化求解。在对比分析中,教师要引导学生归纳出其中问题解决的共性过程,即需要先对问题进行分析,随后隐性或显性地设计出解决方案,然后再进行问题解决,并且在此过程中还要根据解决的结果随时修正过程。同时教师要让学生在对比中对用计算机解决问题的过程有更深入的理解,计算机解决问题并不神秘,其中最为核心的关键环节是算法的设计,计算机需要按照制订好的算法步骤执行相应的指令,而编写程序实际上就是实现算法的过程。
通过这样的分析,学生很容易区分“算法”和“程序”,理解二者间的关系,进而能透过生活中技术应用的“现象”认识其“本质”。同时,理解了用计算机解决问题的过程,学生也就不会再过于纠结程序设计语言的选用,不会畏难于某些代码的编写。实际上,算法与程序的学习,并不是要求学生系统地掌握程序设计专业知识,更不是要把他们培养成编程专家,而是希望学生在体验计算机解决问题的过程中,能真切认识到从“工业社会思考与解决问题方式”到“信息社会思考与解决问题方式”变革的内在原因,理解当今数字化世界的运转方式,能有意识且负责任地使用信息化工具,掌握信息化社会中解决问题的一般方法。
亲历用计算机解决问题的全过程,关注问题分析与算法设计
在以往的编程解决问题的教学中,经常会出现这样的状况:学生对问题还没有理解清楚,还没思考出具体的问题解决步骤,就急于编写程序代码。对他们而言,写出代码就等于解决了问题,但实际上这种学习的结果是学生一直在盲目地修改代码,而问题却最终也无法得到很好地解决,能力也没得到发展,甚至产生学习挫败感。因此,在教学中教师一定要引导学生关注对问题的分析和设计算法的过程,所谓“谋定而后动”,只有明确要做什么和确定好如何做,后面的编程实现才能“水到渠成”。
1.分析问题,关注问题的可计算处理
在解决问题前,教师要帮助学生弄清楚需要计算机解决什么问题,即“做什么”的问题,并确定解决问题的相关因素,如已知信息、求解目标和条件关系等。问题分析的过程可以采用抽象的方法提取问题关键细节,并转化成可计算的问题。此时,不同的问题对应的抽象模型可能不同。例如,分析红灯变绿灯问题,可以从问题解决过程入手,确定出初始状态、中间状态和终止状态;而分析画50个同心圆问题,可以从已知条件(同心圆的个数和相邻同心圆的半径差)出发,明确与求解目标之间的隐含关系(同心圆的圆心相同)。
2.分解问题,着眼于问题解决的全过程
当要解决的问题比较复杂时,需要引导学生先将问题按照求解过程分解为若干个相对独立的功能,然后再对各个特定功能分别进行算法设计(描述出详细的操作步骤)。在分解问题时可以采用“分而治之”的方法,按照问题求解过程或者系统功能分解为若干功能模块(每个模块实现每个模块的特定功能)。其中,如果分解的某些功能仍然比较复杂,还可再进行细分,从而建立多层的结构体系。通过这样的问题功能分解,可以帮助学生着眼于问题解决的全过程,先全局后局部,先整体后细节,先抽象后具体,分层逐步解决。教学中需要注意的是,问题分解的角度并不唯一,不同的角度所得的功能分解的结果不尽相同,我们要允许和鼓励学生进行多样化的问题思考。
3.聚焦算法设计,突出算法在问题解决中的核心作用
在以往的教学中,有的教师经常会弱化算法的学习,将其作为某一知识内容,学习后就不再过多关注,不太强调其在编程解决问题中的作用,甚至在后面的编程解决问题中也常常脱离算法的设计,直接进行程序语句的编写。其实,每个程序都是用来解决特定的计算问题。其中,计算处理数据的过程是程序最重要的组成部分,也是算法实现的关键。因此,在教学中,教师要引导学生重视问题解决的算法设计,要先将算法设计并表示出来。实际上,设计算法的过程,也是显性化、明确化地展现问题求解的过程,是学生思维结果的可视化呈现,便于其直观分析问题解决过程的合理性和有效性,对后续编写程序、实现问题解决起到至关重要的作用。 教学中,我们还要注意问题解决的算法设计许多时候不是一蹴而就的,而是迭代完善的。教师要根据具体问题,通过提问、追问等方式,逐步引导学生思考,最终实现问题解决。例如,在编写体重指数“计算器”程序的过程中,可以先让学生编写“计算体重指数”的程序,从中理解“输入数据—处理数据—输出数据”的算法步骤的执行过程。然后提出问题:如何实现对用户的体重指数给出等級判定?从而引出迭代任务“评定体重指数等级”,这时学生先要对不同用户的体重等级情况进行不同的分支表示,用流程图描述出该算法,再根据分支情况使用适合的程序语句进行编程。最后,教师还可以引导学生自己发现程序还存在哪些问题,有学生会提出:该程序运行一次只能判定一个人的体重指数等级,不能实现多次判断。由此,进入程序的再次迭代完善,教师引导学生思考哪些操作需要重复进行,如何控制重复的次数,从而进入循环结构的学习,并利用循环语句完成最终的体重指数“计算器”程序。这样的学习过程,既体现了真实的问题解决过程,即不断发现问题、解决问题,也让学生在潜移默化中理解了迭代的思想。
4.理解算法的多样性及其对问题解决效率的影响
教学中,教师既要强调问题解决中算法设计的多样、解决同一问题可能会有不同的算法、不同算法求解的过程可能有所不同,又要引导学生分析不同的算法在问题解决效率上的差异,同时还要突出计算机程序实现算法自动化的优势,帮助学生理解数字化工具在解决问题中的核心特征。例如,“从若干个相同的零件中找出质量较轻的零件”活动的问题求解算法并不唯一,可以用一一比较的枚举法,也可以采用二分法。显然,当零件个数n足够大,如n=10000时,后一种方法解决问题的速度更快。这里,教师也可以提供程序,让学生通过运行程序,填写实验报告,具体感受算法的效率,从而加深对算法在计算机解决问题中作用的认识。
借助真实的问题情境,更自如地参与到用计算机解决问题的过程中
在教学中,教师要有意识地提供一些生活中真实的数字化应用案例,引导学生思考其中问题解决的核心,将算法和程序的学习与具体的生活应用场景相关联。因而,学生不再是仅仅学习纯粹的知识技能,更重要的是对真实情境中技术实现原理进行剖析,从而揭开数字化工具背后的“神秘面纱”。学生不再是被动地使用技术,而是能够真正理解这些技术的实现,从而更自如地应用技术来解决问题。例如,在学习程序三种基本结构时,可以让学生尝试解释某些现实场景应用背后的技术实现思想,如空调的定时开关机、车库的自动抬杆、音乐播放器反复播放歌单曲目等,帮助学生理解其中蕴含的顺序、选择和循环思想。再如,在学习解析算法时,可以基于真实情境提出案例分析,如手环中给出的运动消耗卡路里值是如何计算出来的?打车软件中预估车费是怎么实现的?通过生活实际应用,分析其中程序功能实现的关键技术,学生在认识算法、编程实现的同时,也进一步提高对数字化工具背后技术思想和方法的感悟,甚至激发进一步改进完善技术的兴趣。
计算思维是一种处理信息问题的重要思考方式,是未来科技创新的重要助推力,更是21世纪学生自主发展的核心素养之一。发展计算思维,能让学生像信息技术专家一样思考,理解信息社会问题,并成长为合格的“数字公民”。信息技术的学习虽然包括了技能学习,但不等同于单纯的操作训练,还必须让学生掌握必要的应用方法,以便在不同情境下,能应用这些技能解决问题。因此,在教学中不仅要强调学生动手参与实践,尝试编写程序、调试运行代码,更要注重引导学生进行问题的分析和算法的设计,让其“综合应用”各种知识(甚至跨学科知识)进行真实“问题解决”,使其亲历编程解决问题的全过程,重视对用计算机解决问题过程中方法的分析与梳理。其中无论是用抽象的方法分析问题,用分而治之的思想分解问题,用算法步骤描述问题解决过程,还是编写程序实现自动化求解,甚至调试运行程序等,都是计算思维能力发展的核心要素,都需要学生在亲历计算机解决问题的全过程中逐步掌握。
理解用计算机解决问题的全过程,把握算法与程序的关系
用计算机解决问题需要借助编程的方式实现,但这并不等同于简单的程序设计的教学,不是纯粹的代码编程。在教学中,教师要首先帮助学生理解用计算机解决问题的一般过程与方法,明晰这种问题解决方式的特点和优势,从中把握算法、程序和计算思维之间的关系,以便在后续的学习中迁移应用。
例如,教师可以通过常见问题解决的两种方式对比,如比较“路口交通指挥问题”中交警用手势指揮交通和用“程序控制”的信号灯指挥交通的异同,帮助学生理解解决问题的方式并不唯一。使用人工方式进行问题处理时,人们主要是借助解决同类问题的经验寻找求解方法,带有较强的尝试、试探的意图,一种方法行不通,就换一种方法。而用计算机解决问题时,则需要在问题分析的基础上,具体规划求解方案并设计出具体的算法步骤,然后根据制订的这些步骤编写程序,最终实现问题的自动化求解。在对比分析中,教师要引导学生归纳出其中问题解决的共性过程,即需要先对问题进行分析,随后隐性或显性地设计出解决方案,然后再进行问题解决,并且在此过程中还要根据解决的结果随时修正过程。同时教师要让学生在对比中对用计算机解决问题的过程有更深入的理解,计算机解决问题并不神秘,其中最为核心的关键环节是算法的设计,计算机需要按照制订好的算法步骤执行相应的指令,而编写程序实际上就是实现算法的过程。
通过这样的分析,学生很容易区分“算法”和“程序”,理解二者间的关系,进而能透过生活中技术应用的“现象”认识其“本质”。同时,理解了用计算机解决问题的过程,学生也就不会再过于纠结程序设计语言的选用,不会畏难于某些代码的编写。实际上,算法与程序的学习,并不是要求学生系统地掌握程序设计专业知识,更不是要把他们培养成编程专家,而是希望学生在体验计算机解决问题的过程中,能真切认识到从“工业社会思考与解决问题方式”到“信息社会思考与解决问题方式”变革的内在原因,理解当今数字化世界的运转方式,能有意识且负责任地使用信息化工具,掌握信息化社会中解决问题的一般方法。
亲历用计算机解决问题的全过程,关注问题分析与算法设计
在以往的编程解决问题的教学中,经常会出现这样的状况:学生对问题还没有理解清楚,还没思考出具体的问题解决步骤,就急于编写程序代码。对他们而言,写出代码就等于解决了问题,但实际上这种学习的结果是学生一直在盲目地修改代码,而问题却最终也无法得到很好地解决,能力也没得到发展,甚至产生学习挫败感。因此,在教学中教师一定要引导学生关注对问题的分析和设计算法的过程,所谓“谋定而后动”,只有明确要做什么和确定好如何做,后面的编程实现才能“水到渠成”。
1.分析问题,关注问题的可计算处理
在解决问题前,教师要帮助学生弄清楚需要计算机解决什么问题,即“做什么”的问题,并确定解决问题的相关因素,如已知信息、求解目标和条件关系等。问题分析的过程可以采用抽象的方法提取问题关键细节,并转化成可计算的问题。此时,不同的问题对应的抽象模型可能不同。例如,分析红灯变绿灯问题,可以从问题解决过程入手,确定出初始状态、中间状态和终止状态;而分析画50个同心圆问题,可以从已知条件(同心圆的个数和相邻同心圆的半径差)出发,明确与求解目标之间的隐含关系(同心圆的圆心相同)。
2.分解问题,着眼于问题解决的全过程
当要解决的问题比较复杂时,需要引导学生先将问题按照求解过程分解为若干个相对独立的功能,然后再对各个特定功能分别进行算法设计(描述出详细的操作步骤)。在分解问题时可以采用“分而治之”的方法,按照问题求解过程或者系统功能分解为若干功能模块(每个模块实现每个模块的特定功能)。其中,如果分解的某些功能仍然比较复杂,还可再进行细分,从而建立多层的结构体系。通过这样的问题功能分解,可以帮助学生着眼于问题解决的全过程,先全局后局部,先整体后细节,先抽象后具体,分层逐步解决。教学中需要注意的是,问题分解的角度并不唯一,不同的角度所得的功能分解的结果不尽相同,我们要允许和鼓励学生进行多样化的问题思考。
3.聚焦算法设计,突出算法在问题解决中的核心作用
在以往的教学中,有的教师经常会弱化算法的学习,将其作为某一知识内容,学习后就不再过多关注,不太强调其在编程解决问题中的作用,甚至在后面的编程解决问题中也常常脱离算法的设计,直接进行程序语句的编写。其实,每个程序都是用来解决特定的计算问题。其中,计算处理数据的过程是程序最重要的组成部分,也是算法实现的关键。因此,在教学中,教师要引导学生重视问题解决的算法设计,要先将算法设计并表示出来。实际上,设计算法的过程,也是显性化、明确化地展现问题求解的过程,是学生思维结果的可视化呈现,便于其直观分析问题解决过程的合理性和有效性,对后续编写程序、实现问题解决起到至关重要的作用。 教学中,我们还要注意问题解决的算法设计许多时候不是一蹴而就的,而是迭代完善的。教师要根据具体问题,通过提问、追问等方式,逐步引导学生思考,最终实现问题解决。例如,在编写体重指数“计算器”程序的过程中,可以先让学生编写“计算体重指数”的程序,从中理解“输入数据—处理数据—输出数据”的算法步骤的执行过程。然后提出问题:如何实现对用户的体重指数给出等級判定?从而引出迭代任务“评定体重指数等级”,这时学生先要对不同用户的体重等级情况进行不同的分支表示,用流程图描述出该算法,再根据分支情况使用适合的程序语句进行编程。最后,教师还可以引导学生自己发现程序还存在哪些问题,有学生会提出:该程序运行一次只能判定一个人的体重指数等级,不能实现多次判断。由此,进入程序的再次迭代完善,教师引导学生思考哪些操作需要重复进行,如何控制重复的次数,从而进入循环结构的学习,并利用循环语句完成最终的体重指数“计算器”程序。这样的学习过程,既体现了真实的问题解决过程,即不断发现问题、解决问题,也让学生在潜移默化中理解了迭代的思想。
4.理解算法的多样性及其对问题解决效率的影响
教学中,教师既要强调问题解决中算法设计的多样、解决同一问题可能会有不同的算法、不同算法求解的过程可能有所不同,又要引导学生分析不同的算法在问题解决效率上的差异,同时还要突出计算机程序实现算法自动化的优势,帮助学生理解数字化工具在解决问题中的核心特征。例如,“从若干个相同的零件中找出质量较轻的零件”活动的问题求解算法并不唯一,可以用一一比较的枚举法,也可以采用二分法。显然,当零件个数n足够大,如n=10000时,后一种方法解决问题的速度更快。这里,教师也可以提供程序,让学生通过运行程序,填写实验报告,具体感受算法的效率,从而加深对算法在计算机解决问题中作用的认识。
借助真实的问题情境,更自如地参与到用计算机解决问题的过程中
在教学中,教师要有意识地提供一些生活中真实的数字化应用案例,引导学生思考其中问题解决的核心,将算法和程序的学习与具体的生活应用场景相关联。因而,学生不再是仅仅学习纯粹的知识技能,更重要的是对真实情境中技术实现原理进行剖析,从而揭开数字化工具背后的“神秘面纱”。学生不再是被动地使用技术,而是能够真正理解这些技术的实现,从而更自如地应用技术来解决问题。例如,在学习程序三种基本结构时,可以让学生尝试解释某些现实场景应用背后的技术实现思想,如空调的定时开关机、车库的自动抬杆、音乐播放器反复播放歌单曲目等,帮助学生理解其中蕴含的顺序、选择和循环思想。再如,在学习解析算法时,可以基于真实情境提出案例分析,如手环中给出的运动消耗卡路里值是如何计算出来的?打车软件中预估车费是怎么实现的?通过生活实际应用,分析其中程序功能实现的关键技术,学生在认识算法、编程实现的同时,也进一步提高对数字化工具背后技术思想和方法的感悟,甚至激发进一步改进完善技术的兴趣。
计算思维是一种处理信息问题的重要思考方式,是未来科技创新的重要助推力,更是21世纪学生自主发展的核心素养之一。发展计算思维,能让学生像信息技术专家一样思考,理解信息社会问题,并成长为合格的“数字公民”。信息技术的学习虽然包括了技能学习,但不等同于单纯的操作训练,还必须让学生掌握必要的应用方法,以便在不同情境下,能应用这些技能解决问题。因此,在教学中不仅要强调学生动手参与实践,尝试编写程序、调试运行代码,更要注重引导学生进行问题的分析和算法的设计,让其“综合应用”各种知识(甚至跨学科知识)进行真实“问题解决”,使其亲历编程解决问题的全过程,重视对用计算机解决问题过程中方法的分析与梳理。其中无论是用抽象的方法分析问题,用分而治之的思想分解问题,用算法步骤描述问题解决过程,还是编写程序实现自动化求解,甚至调试运行程序等,都是计算思维能力发展的核心要素,都需要学生在亲历计算机解决问题的全过程中逐步掌握。