【独家】如何给六岁小孩解释编程

简介:

任务:给一群六岁的孩子解释你的工作内容。


难度:高(我自己的女儿在其中)。

有不少人分享过他们关于这项任务的点子——你可以在Stack Overflow上找到许多非常有趣的例子(比如说这个http://dwz.cn/5U0UvO)。很多点子的出发点都是展示计算机有多么愚蠢,例如需要很精确地告诉计算机做什么、如何做。这些点子确实很有趣,但是我怀疑课后孩子们是否能真的理解一点儿编程方面的知识。


如何做一次成功的presentation呢,我的观点是:


  • 用问题和画画吸引孩子们。我在现场使用的画纸非常大(用的挂纸板),我一边说一边画——顺便说下,这是个让小孩子保持积极性的好法子(他们玩得很高兴,笑话程序员笔下的稻草人和小猪佩奇不长这样,现场充满了笑点)。我忘了拍现场照片,但是我只要再画一遍你就能明白我的意思。


  • 在孩子们已有知识的基础上讲解(YouTube, 笔记本,平板,DVD)。现在每个孩子都在YouTube上看动画片、在平板上玩游戏、观察父母在笔记本前工作。他们知道电影是保存在CD或者DVD上,智能电话和平板电脑是类似的东西(说到游戏和电影时)。


我从一个基本的问题开始“谁知道程序员是干什么的?”由于孩子们昨天已经讨论过这个问题,此刻他们有一些想法一点也不奇怪。然后我告诉孩子们我自己的定义:“程序员是写计算机程序的人,他们会用特定的语言告诉计算机该做什么。程序员还懂很多关于计算机的东西。”


然后我画了一个工作中的程序员。



接下来是讨论计算机。所有的孩子开始讨论他们父母的笔记本电脑(孩子们一遍又一遍提到同样的事情真的很可爱)。讨论了一会儿之后,我打断他们,指出在各种地方有很多计算机——例如智能手机、手表、还有一些在汽车和电梯里。我把每个提到的东西都画下来,并且用几句话讨论了计算机在各种情况下应用在哪里。


我还问孩子们觉得天气预报是怎么出来的(一个聪明的孩子回答“卫星知道第二天天气是啥样”),然后告诉他们计算机是在成千上万个测量设备采集来的数据的基础上计算预测的。



随后我把话题切换到计算机程序上,我告诉孩子们计算机之所以能做很多事,是因为程序会指引它们做某个事情。


我说到YouTube,因为孩子们熟悉Youtube。我从画孩子们都熟悉的UI开始。


我问孩子们YouTube上有多少电影。不少孩子困惑了,但有几个喊道“百万”或者“无穷”。我问他们有没有可能所有的电影都放到一张盘里,然后画了许多光盘问道:“你告诉YouTube要看某集小猪佩奇后会发生什么,它是怎么找到正确的磁盘的呢?”孩子们沉默了,于是我画了个数据库并快速描述了它的作用。



我想向孩子们传达这样的一种理念,即他们看到的只是冰山的一角,程序员负责的事情远比这个要多。我解释了程序员是怎么处理如下不同的事情的:


  • 保护电影,防范坏人(“如果有人想改变数据库,你看不了小猪佩奇,只能看到足球赛时将会发生什么”——可怕的沉默)

  • 备份(“如果一张盘坏了会发生什么?你就再也不能看小猪佩奇里小猪爸爸尝试挂一幅图的那一集了”——又是一阵可怕的沉默)

  • 所以YouTube是在不同的设备上运行的(智能手机,平板,笔记本)

  • 播放广告

  • 计算观看各个电影的人数

  • 显示类似的电影有多少个赞,等等


这是个提醒孩子们编程是团队工作的好时机。程序规模庞大而且还涉及到不同领域的知识,这就需要许多人参加到程序编制中。在这一点上,我更新了第一幅图,加上另一个程序员,这样就有两个坐在一起的程序员了。


下一个话题是计算机如何工作——当然阐述得比较粗糙。我所能告诉他们的是:


  • 鼠标和键盘是用来给人们对计算机下命令的

  • 显示器是计算机做应答的

  • 每一台计算机里面有一个处理器(可以看作是计算机的大脑)

  • 磁盘是计算机用来存储信息的



我主要讲解了处理器,告诉孩子们它用的是一种有趣的语言,只包含0和1。我假装用一种只有A和B的语言说话,孩子们和我玩得很开心。然后我解释了程序员们创造出程序语言就是为了能更方便地和处理器对话。


接着我讲解了最简单的程序语言的例子(使用一些伪代码)。我想再给孩子们多讲一些内容,但感觉他们开始走神了,所以没来得及讲循环语句。



课程结束前,我把之前讨论过的符号又画了一遍。我一边画一边问“这是什么?”、“关于这个你记住多少?”之类的问题。这个环节效果不错。



其他点评,做什么和不做什么,小贴士和技巧:


  • 比我预想的要更有趣!我很认真对待这件事,做了精心的准备,而且得到了回报。孩子们都很感兴趣,我觉得他们能在这个过程中记住一些知识。

  • 讲课中画图是个正确的做法,它能抓住孩子们的注意力,而且我能通过指着某个图,提醒他们几分钟前讨论过的内容。

  • 做好孩子们一直不停地重复的心理准备。当我问他们知道有什么语言时,一个家伙举手说:“我会一点英语”,他的同伴跟着重复同样的话,接着一个又一个,组里其他的人一个个地加入(有一些是同时加入的)。所有人都说了一遍一模一样的关于英语的话。如果你说到他们喜欢的话题,例如动画片,情况会变得更混乱。

  • 有的孩子不管你做什么都会觉得无聊。他们的注意力集中时间就是比较短。

  • 认真板书——例如,他们会反对你把1写得有点像7。

  • 讲课过程中我觉得没必要纠正孩子们的一些问题——例如,只要孩子能理解YouTube把动画片保存在DVD上,而且当需要看一部片子时,计算机会选择正确的碟片并且播放,我觉得这就非常好了。我想让他们理解搜索和数据库是什么样的概念,而不是技术细节。我感觉这个才是个正确的方法。

  • 讲课时间25分钟,不能再长了。


原文发布时间为:2017-05-05 
本文作者:Tomek Kaczanowski
本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号
相关文章
|
JSON Java Maven
如何批量查询自己的CSDN博客质量分
如何批量查询自己的CSDN博客质量分
546 0
|
Kubernetes Java Maven
DHorse(K8S的CICD平台)的实现原理
首先,本篇文章所介绍的内容,已经有完整的实现,[可以参考这里](https://gitee.com/i512team/dhorse)。 在微服务、DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情。虽然市面上目前已经存在了比较成熟的自动化构建工具,比如jekines,还有一些商业公司推出的自动化构建工具,但他们都不能够很好的和云环境相结合。那么[究竟该如何实现一个简单、快速的基于云环境的自动化构建系统呢](https://gitee.com/i512team/dhorse)?我们首先以一个Springboot应用为例来介绍一下整体的发布流程,然后再来看看具体如何实
|
安全 Java API
Java 17新特性让你的代码起飞!
【10月更文挑战第4天】自Java 8发布以来,Java语言经历了多次重大更新,每一次都引入了令人兴奋的新特性,极大地提升了开发效率和代码质量。本文将带你从Java 8一路走到Java 17,探索那些能让你的代码起飞的关键特性。
390 1
|
8月前
|
固态存储 安全 测试技术
别再用盗版镜像了!官方渠道获取Win10 ISO+VMware正版激活全流程
本文详细介绍了在VMware虚拟机上安装Windows 10系统的全流程,涵盖环境准备、虚拟机配置、系统安装及优化等关键步骤。内容包括软件资源获取(如VMware与Win10镜像下载链接)、硬件要求核查、虚拟机创建与参数设置(如UEFI/BIOS选择、处理器与内存分配),以及系统安装中的具体操作和常见问题解决方法。此外,还提供了性能调优方案(如显卡加速、快照管理)和高频问题解决方案,确保用户避开常见坑点。最后附有配套资源包和数据验证结果,帮助用户高效完成搭建并提升使用体验。
9764 17
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
11月前
|
人工智能 小程序 Android开发
鸿蒙应用开发从入门到入行 - 篇1:HarmonyOS介绍——带你深入理解鸿蒙特性
本文介绍了华为的HarmonyOS(鸿蒙系统),这是一个面向全场景的分布式操作系统,不仅适用于手机和平板,还支持电脑、车机、手表、电视等多种设备。文章详细解析了鸿蒙系统的三大特性:一次开发多端部署、可分可合自由流转、统一生态原生智能,并分析了鸿蒙系统为何能蚕食安卓市场份额的原因。猫林老师认为,鸿蒙凭借其先进的技术和国内政策支持,有望在未来的市场中占据重要地位。最后,文章提供了学习鸿蒙系统的建议和一些课后练习,帮助读者更好地理解和掌握这一系统。
1572 7
鸿蒙应用开发从入门到入行 - 篇1:HarmonyOS介绍——带你深入理解鸿蒙特性
|
9月前
|
人工智能 数据可视化 架构师
三句话生成 P5.js 粒子特效代码,人人都可以做交互式数字艺术
短短几分钟,两个完全不懂P5.js的人类,和通义灵码AI程序员一起,共同完成了有真实物理引擎和碰撞检测的3D仿真动画。人类扮演的角色更像产品经理和架构师,提出开发需求和迭代修改方案,而AI的作用更像码农,任劳任怨,熟练用各种编程语言完成技术底层的脏活累活。这只是AI编程的冰山一角,未来,每一个艺术家都能快速做出自己的创意原型,每一个数学老师都能轻松做出自己的教学动画。
|
监控 数据中心
|
前端开发 Python
【前端验证】通用型顺序比对的uvm scoreboard组件编写
【前端验证】通用型顺序比对的uvm scoreboard组件编写
550 0
|
JSON 算法 数据安全/隐私保护
聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用
本文介绍了 JSON Web Token (JWT) 和 Python 中的 `jwcrypto` 库。JWT 是一种用于安全传输信息的紧凑型令牌,常用于身份验证。它由 Header、Payload 和 Signature 三部分组成,具有紧凑性、自包含和安全性等特点。`jwcrypto` 库提供了 JWT 的生成、验证、加密、解密及签名功能。通过该库,可以使用 RSA 等算法创建和验证 JWT,同时管理密钥对。安装 `jwcrypto` 可用 `pip install jwcrypto`,并示例展示了如何生成签名 JWT 和密钥对。
聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用