我在课堂上为什么要展示编码的过程,而不止是结果
我在上程序设计课程的时候,会在课堂上当场编程。而我见到的大多数老师喜欢事先备好课,用PPT或WORD以更大的字体展示程序内容。
为了能够更好地展示现场编程,我试过一些办法:尽可能缩小班级人数、不用投影仪而是用机房的广播系统。这确实带来一些麻烦,更不用说,现场编程比事先备课更容易出错,挂在黑板上。
那么我坚持现场编程序的原因是什么呢?
1. 过程
我要向同学演示代码由无到有的过程。
事先备好课确实有很多优点,但是当我是同学的时候,我总感觉是在看场魔术。老师拿来个帽子,展示一番,然后,突然从里面掏出只兔子来,有毛能跑的。如果我只是观众,哈哈,很逗。但是如果我是学魔术的同学,我就会特别想看到慢动作地重放--从空帽子到兔子的过程。
而这个过程,如果事先备好课,通常就只是打开工程,然后编译,运行,出结果了。结果就是老师说的那个,但这一点也不令人意外。
我想看到代码修改以后还能跑么?最好是从什么都没有,开始创建一个工程,然后代码逐渐增多。不然,除了神奇,我什么也没有学到。
作为同学我这样想,我私下猜测,同学们也会这样想吧。所以,我想展示给同学代码的过程,而不仅仅是代码本身。
代码本身能学习和分析的东西确实很多。我们对着早就墨迹干涸的红楼梦也能分析出比它本身厚得多的著作来。但是,如果你站在曹雪芹的身后,越过他的肩膀看他把红楼梦写出来,那样的话,收获该是多少呢?你能看到他删除掉了哪几个人物,哪几个人物原本不是这样的,她们 (想想真似乎没有几个男子,所以不妨直接用女字旁了) 的命运、性格原来是那样,历经了几次修改……
但是我们都没有那样的机会。所以,"披阅十载,增删五次",作者不得不感叹,这样好的过程你们都没有看到。
我们要看画家作画的过程,看不到甚至要用X光去还原底下一层层都是些什么。我们要看鲁迅或韩寒的手稿,最好是不清楚的勾勾抹抹的那种,才能了解当时当事,都发生了些什么。
代码,也是一样的。如果我们跟踪Linux核心的所有历史版本,而不仅是分析最近的,会得到更多的东西--为什么某个特性那么迟才添加进去;最初的有力地构成整个系统是,是哪几个要素?
同学们看到那一大砣代码时想问的问题:你咋把它整出来的。
过程说:呶,先这样,再这样。
如果只给最后的结果,那就是:你猜呢。
2. 出错
我想让同学看到 老师也会出错,挟带的私货,更重要的是学习老师解决错误的过程。
bug人人会造,代码能跑起来靠的一个重要功夫就是把各种bug杀掉。同学们最初遇到bug的时候容易感到惊慌失措,并倾向于自我否定,"怎么会这样呢?"然后就想知道,如何从"这样"恢复,最终把那一砣代码整出来并跑起来。
从bug中恢复过来,除了归类总结,文字材料以外,很重要的是让同学看到:呶,就是这样。
没看过血的,理论学得再好,也当不了临床医生。
我甚至特意造出bug,大家一起傻眼,调吧。然后,我们一起看看调试bug的过程。
也演出了编程习惯。比如一对大括号,要先写前面后面,再添中间。这些,亲眼所见与纸上看来,对初学者,终究有所不同。
说到这里插一个话题。颇有些研究生同学喜欢看视频学习的,我和几位学长都认为非常不可取。理由非常多。其中一个是视频太慢,还有一个是视频往往太肤浅。还有一个是视频可能会对初学者造成一个困扰--"为啥老师那么整能行,我同样的操作,现象就不一样了呢?之前,我只有一步有一小点不同吧。版本不同,那是什么?"
之所以课堂上的展示不必讨论上述话题,是因为无论展示编码过程,还是只展示结果,然后分析,视频的弊端都是存在的。
3. 还是过程
稍微大一点的代码,都不是一次成型的。尤其,一定不是从头往后写的。
小学作文老师教我们,要有大纲。写代码也是的。可能,我们一个键也没有敲,但是此时已胸有沟壑。这个时候老师得把这些沟壑都画图画图交代一翻,指点好,这里我要写啥,这里我要写啥。
此外,为了保持一直可以编译、测试,而有时代码写作要持续几天的时间,中间不可能连个厕所也不去。有时代码非常长,超出了初学者直接写作的能力。这个时候,我们会一点点写--重要的是,在这一点点写的时候,始终保持可编译和测试。所以,有时中间结果与最终的差别非常大。代码可能先多起来,然后又慢慢删除掉一些,后来成了最终的样子。而不是像有的同学想的,一直由少到多。
我的一个比喻。如果你体力不济,还想游过一个大湖,我们要做的不是横渡,而是沿着湖边,不停地隔一会上岸歇会。我们确实更慢了,更是安全更重要。
这样,最终的代码 (到达对岸)与中间的代码的差别会非常大。有时,我们很难一下子就想像到中间发生过些什么。
你能从残局猜到那些死掉的车马炮都怎么牺牲地么?我们用过程向同学们展示这些。
4.保证
向同学们保证,你看代码确实是活人写的,因此你也能写出来。身边活人的榜样,比书上印好的铅字更有说服力。
想当年我跟韩老师去北京学习,他买了个魔球 (能变成棒子还能变成三角什么的)。没见过的同学,你可以把它当成三维的七巧板。韩老师很快拼了好几个形状。拼,也正是看图纸上的最终结果,把过程猜出来。后来到球形的时候,他放弃了,说这个不行。然后轮到我玩。他看我拼出球来,让我拆了。拿过去没两分钟就把球拼出来了。
所以说,身边活人的榜样,比书上印好的铅字更有说服力。我用课堂上编码的过程向同学们展示:活人编的啊,真是活人编的。
当然,让同学展示,比让老师展示的效果更好。不过同样,一旦同学们把这位同学当成与他们不一样的人,那就失效了。这个时候,我真的也不知道该如何告诉同学们:你真的也行。
装睡的人,你是怎么也叫不醒的。
5. 例子
我见过周老师讲JSP的时候,就在课堂上现搭环境,现写代码。见过林老师讲win32api编程的时候,现写代码。
6. 未来的工作
考虑过做视频发布,但是我们的视频站点目前的清晰度,是为了看大片或小片准备的,看代码,似乎清晰度还不够。再就是p2p上传了吧。
分享到:
相关推荐
在课堂教学中,传统的人工计算方法效率低下,无法处理大规模数据,也难以直观展示编码过程和结果。通过使用MATLAB,可以快速实现香农编码的各个步骤,包括对信源符号按概率大小排序、计算累加概率、求码字长度、确定...
- **视频导入**:通过与编码相关的视频片段,例如展示编码在现实生活中的应用,如加密通信、条形码等,激发学生对编码重要性的认识,同时利用视频的吸引力增强情感共鸣。 - **插图观察**:利用教材中的插图,引导...
3. **编码实现**:MATLAB可以实现香农编码算法,包括建立符号与码字的映射关系、编码过程以及解码过程。通过编写自定义函数,如`shannon_encoding()`和`shannon_decoding()`,学生能够直观地理解编码和解码的逻辑。 ...
iFIAS编码助手的作用是指导用户对课堂行为进行编码,其将课堂行为分为四大类共14种小类,用户通过编码助手可以进行编码过程的开始、3秒打点、结束编码,并最终生成表格记录数据。 编码助手的功能细化如下: 1. 开始...
iFIAS+是一款专为教育领域设计的高级工具,旨在通过深入分析课堂互动,帮助教师和研究人员理解教学过程中的学生参与度和交流模式。该软件基于弗兰德斯互动分析系统(Flanders Interaction Analysis Category System...
4. **互动答题**:TICKSDK提供了互动答题模块,允许教师发起各种形式的题目,如选择题、判断题、填空题等,学生可以直接在平台上作答,系统会自动批改并显示结果,从而提高课堂参与度和反馈速度。 5. **多终端支持*...
本篇文档是一篇关于设计基于MATLAB的Huffman编码实验教学平台的研究论文。文中详细介绍了Huffman编码的原理、步骤、优缺点,以及...此外,该平台还可以帮助教师在课堂上更生动地展示Huffman编码的概念,提高教学效果。
1. **C语言基础**:C语言是计算机科学的基础,它的语法简洁而直接,强调低级内存管理和过程化编程。学习C语言的关键知识点包括基本数据类型(如int、char、float等)、控制结构(if-else、for、while循环)、函数...
例如,可以展示如何输出文本到页面上或修改页面元素的属性。 - **引用外部JavaScript文件** 将JavaScript代码保存在一个独立的`.js`文件中,并在HTML文档的`<head>`部分通过`<script src="filename.js"></script>`...
编码是将信息转化为数字序列的过程,广泛应用于日常生活和各种技术领域。在数学教育中,教授编码可以帮助学生理解数的实际应用和逻辑结构。本教学设计旨在引导四年级学生通过观察、比较和猜测,探索编码的规则和方法...
软件架构应包括视频导入、行为编码、数据分析和结果导出等功能模块,同时要保证用户界面友好,易于操作。 4. 功能模块实现 - 视频处理模块:支持教学视频的导入、播放、暂停等功能,以便研究人员可以方便地进行观察...
在课堂教学环节,教师首先通过情境导入,展示数字跳跃的动画,引发学生对编码的兴趣。接着,教师引导学生讨论生活中常见的编码形式,如邮政编码和身份证号码。在学习身份证号码的部分,教师鼓励学生分组合作,观察和...
例如,在“数据结构”课程中,KMP算法、哈夫曼树与哈夫曼编码、搜索引擎的研究这三个知识点被选为翻转课堂实践的对象。它们不仅覆盖了不同的章节,如字符串、树和查找等,而且又都与搜索问题相关联,形成了一个完整...
《数字与编码——身份证教学设计》是一份针对五年级学生的数学教学计划,旨在教授孩子...同时,这也提醒教师在教学过程中要关注学生的情感态度,营造积极的课堂氛围,让每个学生都能在活动中积极参与,享受学习的过程。
在运行原理上,教师通过上传教学资料并开启直播,系统会自动编码视频流,并通过CDN(Content Delivery Network)分发到各地的用户,学生则通过解码接收视频流,同时与教师或其他学生进行实时交互。整个过程中,系统会...
在本项目中,每个功能模块都可以通过控制器(Controller)调用模型(Model)进行数据处理,然后将结果传递给视图(View)进行展示。 2. 快速开发:ThinkPHP提供了丰富的内置函数和助手方法,如自动验证、自动完成、...
这个系统的核心功能是实现课堂签到,且具有扫码登录的功能,使得签到过程更为便捷高效。下面将详细阐述这个系统的相关知识点。 首先,我们来关注"安卓"(Android)部分。Android是一种基于Linux内核的开源操作系统...
1. **信号编码与解码**:MATLAB可以模拟彩色全电视信号的编码过程,如YUV、RGB色彩空间转换,以及PAL、NTSC、SECAM等各种电视制式的信号处理。通过调整参数,学生可以观察不同编码方式下的信号变化,加深对信号编码...
【标题】"live-coding-examples:在课堂上为FbW47-2创建的各种实时编码示例" 涉及的是一个教学资源库,主要用于JavaScript编程教学。在这个项目中,作者创建了一系列的实时编码实例,以帮助学生或自学者更好地理解和...
智慧课堂辅助App旨在提升教学质量和效率,为教师和学生提供数字化的教学环境。这个毕业设计可能涵盖了软件工程、用户体验设计、移动应用开发、教育心理学等多个领域的知识。 【描述】:“毕业设计”通常是指高等...