威龙发艺发型设计价格联盟

我是如何设计编程课程的

科技传播坊2018-05-15 15:25:10

本文作者

李泽,国内资深创客,软件设计师、信息系统项目管理师。2013年毕业于新疆医科大学信息系统与信息管理专业,有10年编程实战经验。善于分解知识点,构建课程体系,将复杂的概念简单化。自媒体科技传播坊(公众号kejicbf)拍摄百余集创客教育教学视频。曾出版译著《动手玩转Scratch 2.0编程》《传感器实战全攻略》《动手玩转 ScratchJr 编程》等译著。



前言

对于初学者来说,陌生领域就像神秘的星球,好奇心被它的引力牵引着。然而想要完美登陆,却是一件非常困难的事情,有太多因素制约着你:是否有充足的闲暇时光,是否有持续的热情,是否有绝对的动力...  作为兼职/全职课程设计师,我们的任务是为初学者提供高质量登陆设备:通俗易懂的教材、轻松诙谐的视频、图文并茂的图书...


无论何种形式,都离不开决定它们的内容:课程设计理论。下面仅从编程教育的角度,说明如何设计课程。



温柔对待初学者

我自学第一门编程语言C语言时,编程教育领域还是贫瘠之地:台式计算机价值不菲,网费昂贵;网络教学视频少,图书内容干涩。时至今日,智能设备已走进千家万户,硬件之苦烟消云散,但这并不意味着好的课程便会喷涌而出;相反,飘渺的概念常常超越实际,很多不懂课程设计的老师蜂拥而入,让初学者的认知之旅困难重重。


如果说任何问题归根到底都是人性的问题,那么课程设计也不例外,因此我们必须要构建出学习者可以接受的认知过程。



课程设计的根本

与唯物观点“一切从实际出发”类似,课程设计的根本就是:构建学习者喜欢的课程。换言之,课程的好坏评价标准只有一个:学习者是否喜欢。喜欢的就是好的,不喜欢就是有待改进的,无论采取何种手段。


设计师要时刻思考学习者能否理解、是否喜欢,要站在学习者的角度思考课程。此外,编程教育的知识并非教育心理学提到的陈述性知识,它需要不断实践试错才能掌握,故而设计师要明白学习者在构建编程概念时的认知逻辑,这是设计学生喜欢的编程课的根基。


那么在学习编程的过程中,“喜欢”的魔法是什么呢?



需求决定技术

我称“需求决定技术”是编程类课程的根本思想,也是避免灌输式教学的钥匙。什么是需求决定技术?当人类有了新的需求,那么他就有可能发明新的技术。相信这一点是不言而喻的,但这对编程教育有什么意义?


当我们要学习编程中某一抽象概念时,该概念便是技术。既然是技术,在它之前必有需求,而需求是由人类的问题所引发的。所以正确的认知顺序是:先有燃眉之急,后有需求,之后人们发明了相应的技术。作为编程课程的设计师,发明、设计出此问题和需求便是我们最艰巨的任务,也是课程设计师的价值所在。


如果老师在课堂上的第一思路是直接讲解某个技术,那么课程设计极有可能有问题,因为此过程并未展示出该技术的需求及其配套的问题。


当然你会说,课程导入环节——向学习者展示某种现象或问题,可以解决这个问题。没错,课程导入通常是必须的环节,形式多样,理论上也能让学习者兴趣盎然。但是,这仅是课程导入环节和主体内容的衔接,那么对于最艰难的主体内容,我们如何应用这一根本思想进行主体内容的设计呢?



构建认知之路

我常对其他设计师说到,“案例的质量决定了课程质量的最少60%以上”。即使课程导入很精彩,课程结尾很感人,但作为主体知识传承的案例才是最重要的。上文所说主体内容,其表现形式便是案例的讲解。那么如何设计案例,完成让课程设计师们绞尽脑汁、痛苦万分的任务?


案例设计有两个相互交织的过程:确定案例项目以及设计认知过程。对于案例项目的想法,取决于设计师本身的阅历和领域经验,并没有太多技巧可言,更多是灵感的迸发或感性素材的捕捉,这里并没有太多的建议给到大家。但是关于案例的认知设计,就是一项有迹可循的任务了。总体上分为两种方式:整体式地静态拆解和迭代式地动态拆解;前者是古板刻画,后者是设计艺术。


作为PBL的案例项目,教学的最终任务都是让学习者掌握相应技术,但这两种认知之路给学习者的感受却大相径庭。先来说说前者,也是目前绝大多数甚至是主流的大型编程培训机构采用的方式。


整体式地静态拆解是指对已经编写好的案例做功能拆解,如果说某案例 = 功能1 + 功能2 + 功能3,那么此方法构建的认知之路则为:先讲解功能1,再讲解功能2,最后讲解功能3。你是否对这种方法很熟悉呢?你的老师或者作为老师的你,很有可能就在使用这种设计方法讲解案例。


以Scratch课程为例,老师逐行地讲解每一块积木的含义,然后让你模仿创作。每一块积木就是一个一个的功能,讲解完每一块积木后,就是完整的脚本,即整个案例。回忆一下刚才所说的“需求决定技术”,你发现了什么问题?


没错,积木即技术!每一块积木的引入都是一个技术,直接讲解积木,意味着直接讲解技术!这就是为什么学习者会有这样的认知感受:是的,我模仿完了案例,然而我还是不会写程序。是什么造成了这种感受?是燃眉之急和需求的引入缺乏。


回忆一下正确的认知顺序:燃眉之急 → 需求 → 技术。因此正确的案例认知设计应该是迭代式地动态拆解:将案例拆分为成长式的任务。“成长式”意味着任务1+任务2+任务3≠最终案例(静态拆解便与之相反)。迭代式地动态拆解所构建的认知之路最终是这样的:

任务1:燃眉之急 → 产生需求 → 技术;

任务2:新的问题或现象产生,从而任务1有缺陷 → 产生需求 → 使用技术;

任务3:新的问题或现象产生,从而任务2有缺陷 → 产生需求 → 使用技术;

以此类推,最后一个任务结束后,案例即构建完毕。


当学习者明白每一个技术前面的需求和问题时,他们就能更好地移情到自己的场景问题中:我遇到了某个问题,当时课堂上老师为了解决这个问题使用了该技术,那么我也可以尝试它。一旦该实践形成,那么此技术就会被学习者彻底掌握。当然,这种方式对于课程设计师的要求极高,需要对教学的编程语言有非常深入的了解。既然是非常难的事情,也就给我们一种艺术设计的极致追求:构建出层层递进的需求,设计出层层递进的技术演变过程


我经常在录屏课程中说明此设计思想:展示知识的进化过程,让学习者看到代码的成长。最高级的课程设计是,当我们学完这节课的内容,老师告诉我们,刚才我们发明了微积分;而不是一开始就灌输什么是微积分。


下面通过一个极简单的案例说明两者的区别,以Scratch中讲解循环积木为例。整体式地静态拆解(填鸭式地直接讲解技术,忽略了燃眉之急和需求):同学们首先拖拽一块C型的循环积木(任务1),然后再循环次数填写4次(任务2),最后再其中放入移动50步和向右旋转90度(任务3),最终你们得到了什么结果呢(同学们开始尝试、讨论,向老师汇报自己的结果)?


再看另一种思路,迭代式地动态拆解(引出燃眉之急和需求,顺势讲解技术):同学们,刚才我们已经明白了移动和旋转(回忆上一个任务),如何让角色按正方形移动并实现xx任务呢(需求,任务1开始)?让我们这么做(老师展示移动+旋转+移动+旋转...)(技术),可是这么做太繁琐了,都是重复的脚本,有没有办法可以压缩脚本呢(需求,任务2开始)?我们可以使用这块C型的循环积木,重复4次(技术)。


在第一种方法中,学习者被动灌输填鸭PBL案例的每一个任务,看似完成实际难以消化;(虽然买单的家长看到了“成果”,但)实际上学习者的应用能力如何呢?在第二种方法中,学习者虽然是被动地了解了每一个任务的燃眉之急和需求,但是有此问题作为前设,学习者就有可能主动调用脑细胞开始思考。


再退一步,被灌输了“需求”的学习者只要能回忆起课堂中的“需求 → 技术”链,那么他在实践中使用该技术解决问题的概率将非常高,但只要应用一次,便能彻底内化为自身技能,因为燃眉的“需求”总会给我们留下深刻的印象


让我们对直接讲解完整程序并开始模仿的认知过程说“不”吧,它通常并不适合初学者。



认知的展示形式

迭代式地动态拆解有一种与之配套的自然的展现形式:PRM,或者称为 2WH:

PRM - Problem Reason Measure

2WH - What Why How


实践中我更喜欢用指代较为明确的词组 PRM:现象/问题、分析原因、解决方案。当课程设计师使用动态拆解法分解任务后,每一个迭代式的任务都可以使用 PRM 作为引导线索。最终课堂就变成了这样:PRM-PRM-PRM-...


如果是线下教学,这样的课堂会更加活跃,让学习者进行深入主动的思考。最强大的教学互动方法,便是老师仅需提出好问题(P),便能点燃学习者自行思考(R)并解决(M)。下面展示如何应用以上理论进行课程设计。



真实案例

本案例来源于《Scratch十日研学》,这是我的入门级Scratch收费课程,你可以在微信目录中看到它,或者点击链接:购买《动手玩转Scratch 2.0编程》配套视频视频分为10天即10部分,本文公开并选取了其中第10天的第14集作为研究样本。视频如下:


这集视频教程的目标是使用Scratch说明何为“索引”。对于当前的学习者来说,这是一个很有挑战的概念。打开上面的链接,跟随下面的时间,观察我的课程设计。



构建认知之路

帮助初学者顺利地理解陌生领域的知识,构建认知之路,是课程设计师的价值、追求和终极目标。始终牢记:需求决定技术。下面看我如何构建一条“需求 → 技术”链吧。


0'0''~6'0''

课程导入:演示程序效果

接下来开始构建认知之路


6'0''~7'40''

P: 一套题如何实现,即如何保存这一套题?

R: 假设只有3个指令+1个答案

M: 建立4个变量保存即可

(提示:PRM = Problem Reason Measure = 提出问题 分析原因 解决方案)


7'40''~10'00''

P: 如果有两套题怎么保存?

R: 第二套题可能包含多个指令,之前的程序设计方式失效了

M: 建立两个列表,每个列表保存一套题


10'00''~13'43''

P: 多套题如何实现?

R: 每套题的逻辑近似,而之前的设计方法较难应对此情形

M: 把所有套题放到一个列表中,并设置区分套题的编码值


13'43''~18'55''

P: 如何使用该套题列表?

R: 标识出题目开始点的索引

M: 建立第二个列表,保存套题列表的索引


18'55''~END

分析案例中的列表和脚本。

并再次强调索引将不连续值映射到连续值、设置套题编码值的思想,

最后回忆整个认知过程,让学习者明白其来龙去脉。



设计自评

书本上的知识是静态的,很难动态展开。读者看到的是完整代码或脚本,无法看到其成长过程。课程设计师将“索引”这一技术通过多个“需求”的迭代演变顺利展开,使得学习者可以无障碍地接受并吸收这一技术。设计师的认知设计为:解决一套题、解决二套题、解决多套题、引出并建立索引,这是一个非常棒的认知流程!如果纯填鸭式地介绍“索引”的概念和使用方法,学习者的内心必定是煎熬痛苦的。



套用教学形式

认知设计正确,即内容正确,接下来我们就能为其添加多彩的教学形式。在视频中,我采用绘图工具进行讲解。实践中,老师们还可以采用PBL实操、习题(如判断、选择、问答等)等方式,完成每一次的案例迭代,直到形成最终案例。


这便是一节编程课的设计过程,你感受到课程设计师的艺术魅力了吗?



其他精彩课程

我还应用此思想设计了很多课程,比较经典的如:《人人都能看懂的数据库视频》:https://www.bilibili.com/video/av10076006/



安利推广

《Scratch十日研学》是我翻译的《动手玩转Scratch 2.0编程》的配套教学视频。视频共158集,时长20小时42分钟;视频画质1080P,录音笔采集音频。受众为《动手玩转》新读者、少儿编程培训机构、校内老师等。它是目前国内少有的高质量、系统化的Scratch教学视频,几乎覆盖Scratch的全部功能。


视频注重基础内容的讲解,而不是着急上手做项目。视频中实践环节的项目几乎全部是从零开始、纯手工搭建,保证学习者看到代码的成长过程,让你的认知之路不再荆棘丛生。


点击链接 购买《动手玩转Scratch 2.0编程》配套视频了解更多信息。


若想转载本文章,请在后台留言告知。

友情链接