https://www.zhihu.com/question/355560585/answer/3157234855

英文里“程序”是 program,这个词的含义很广。

去年的构思,也许不一定有机会实践了,小结在此。几个主要思路:

  • 不依赖任何硬件和软件,仅用纸即可进行教学
  • 不是教怎样用现成的锤子敲钉子,而是教锤子的由来和如何按需设计
  • 在介绍编程相关基本要素的同时注重问题分析解决、交流表达能力

生活中的“程序”:一课时

回顾日常生活中的各种过程,如上学、做早饭等,大纸画流程图。增进互相了解,促进表达。

编程要素:分支、循环等

瓶水二分:一课时

问题分析与解决,应用之前的程序知识

贪吃蛇:1-2 课时

编程相关要素:复杂分支、循环,优化等

综合素质:全体合作

模拟图灵测试:两课时

编程相关要素:模式匹配,语法设计,内容生成,随机量,结合之前知识

全程不需电子设备。准备材料有大幅纸张,胶带,马克笔,瓶水和空杯,粉笔(如果地上可以画)或者拼插泡沫地砖。

设想是teach coding without computer,不需电子设备,室外室内都可以。在介绍编程相关基本要素的同时注重问题分析解决、交流表达能力。

过程中会尽量减少枯燥说教和专业术语,尽量鼓励孩子动手和互动。回头给您看个示例可以更直观一些。每节课应该都会有一定成果。整体课程设计可以根据这一周的课时安排而定。


【教学案例】第一课:字的写法

我自我介绍“吴老师”,对学生:请大家把“吴”写在纸上。如果没人会写,则自己写在白板后让(可以只给一部分大龄学生看)照着写。

请现在会写了的学生A描述写法给其他还不会写的学生B听(只说,不比划),看B写出来的是否像。学生A说:一个口,一个天。假设B写成了: 口天,就可以让A想想如何再次更精确地描述以达到B可以重现的目的,并将每次描述写下,作对比分析。

(假如是单人授课,则可以由我说各种写法让学生听着尝试写)

接下来,让学生用自己的姓名中的字或者喜欢的字,作相同练习。

比如“赵”,如果里面的部分不知叫什么,可以用笔画描述,如果仅“一撇,一捺”,可以提问如何和“人”区分。之后,可问如何更简约地描述,如“一个叉”。

后半段,综合各学生对所有字的表述,小结出描述写法的一套格式,这就是描述中文字符写法的一个DSL设计。最后试着将此DSL用于描述其他字,看看是否合用,反馈信息可能有哪些(比如A说“走字底,一个叉”,B听了问“叉怎么写?”),有何可改进之处。

(此DSL已在这里开始初步原型尝试:https://gitee.com/zhishi/chinese_characters_words/blob/master/src/chinese_characters_words/%E8%AF%AD%E8%A8%80.py )

【教学案例二】一水二分

把一瓶水等分成两杯。一个方案的程序概要是: 1、把水倒入两杯

2、比较两杯水位高低

3、如果一杯更高,则倒一点到另一杯;否则结束,完成等分。

4、回到第2步进行循环

这个课题非常贴近生活,适合孩子自行设计方案之后动手逐步操作,还可以发散思考其他方案进行比较,从执行步骤多少、难易等等分析优化效果。

同样可以分析各描述小结 DSL。

【教学案例三】对话机器人

先分组进行聊天,并记录下过程。基于聊天内容,设计对话机器人。通过纸上演算,对输入进行parse,并生成对应回话。将这个算法记下。最后综合各组的算法,得出一个或多个合作品。作为展示,基于这些算法生成几个对话过程,让家长猜哪个是真人。