我在课堂上为什么要展示编码的过程,而不止是结果
我在上程序设计课程的时候,会在课堂上当场编程。而我见到的大多数老师喜欢事先备好课,用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编码的概念,提高教学效果。
这些数据分析能够以图表、趋势线等形式直观地展现出来,帮助教师在课堂上做出迅速调整,确保每个学生都能获得适宜的教育体验。 2. 到课率指数 学生出勤情况是衡量教学质量与学习态度的重要指标之一。平台能够实时...
1. **C语言基础**:C语言是计算机科学的基础,它的语法简洁而直接,强调低级内存管理和过程化编程。学习C语言的关键知识点包括基本数据类型(如int、char、float等)、控制结构(if-else、for、while循环)、函数...
例如,可以展示如何输出文本到页面上或修改页面元素的属性。 - **引用外部JavaScript文件** 将JavaScript代码保存在一个独立的`.js`文件中,并在HTML文档的`<head>`部分通过`<script src="filename.js"></script>`...
软件架构应包括视频导入、行为编码、数据分析和结果导出等功能模块,同时要保证用户界面友好,易于操作。 4. 功能模块实现 - 视频处理模块:支持教学视频的导入、播放、暂停等功能,以便研究人员可以方便地进行观察...
例如,在“数据结构”课程中,KMP算法、哈夫曼树与哈夫曼编码、搜索引擎的研究这三个知识点被选为翻转课堂实践的对象。它们不仅覆盖了不同的章节,如字符串、树和查找等,而且又都与搜索问题相关联,形成了一个完整...
教师可以在此环节结合实际案例,比如通过分析历史上的身份证号码变化,让学生了解到编码系统如何随着社会发展而演进,进一步增强他们对编码重要性的认识。 在实践环节,学生被鼓励亲自参与编码的设计和应用。以田径...
同时也能为想要自己动手尝试编码的人提供详细的指导材料,从而达到理论与实践相结合的教学目的。此外还可以用来辅助理解诸如文件压缩这样的实际应用场景。 其他说明:本实验涉及了大量关于C/C++语言的基础语法知识,...
《数字与编码——身份证教学设计》是一份针对五年级学生的数学教学计划,旨在教授孩子...同时,这也提醒教师在教学过程中要关注学生的情感态度,营造积极的课堂氛围,让每个学生都能在活动中积极参与,享受学习的过程。