第1章 神秘的代码邀请函:开启编程冒险的第一站
周一下午三点二十分,育才小学三年级二班的放学铃声刚响,阿明就攥着数学测验卷缩到了队伍最后面。卷子上用红笔圈出来的“87”分像个小刺猬,扎得他一路都在揪校服下摆——那道关于“步骤排序”的应用题,他明明觉得自己每一步都算对了,怎么最后答案就错了呢?老师上课拍着黑板强调“顺序决定结果”,他当时还觉得是小题大做,现在看来,自己果然没把顺序当回事。
“阿明!你的快递!”传达室李爷爷的喊声打断了他的懊恼。阿明跑过去,接过一个牛皮纸信封,没有寄件人地址,只有收件人那一栏用歪歪扭扭的字写着“三年二班 阿明(编程小勇士)”,火漆印是只举着彩色积木的橘猫和缠着二进制代码的蟒蛇,看起来既可爱又奇怪。
“什么编程小勇士啊,我连编程是什么都不知道。”阿明嘟囔着把信封塞进书包,一路小跑回了家。刚进门,五岁的妹妹小雅就扑过来抢他的书包:“哥哥有零食!有零食!”
“没有零食,是奇怪的信封。”阿明把信封掏出来,刚撕开封口,一道淡蓝色的光就从里面飘了出来,在空中拼成一行中英文对照的字:
> 亲爱的阿明同学 / Dear Aming, > 欢迎来到代码岛(Code Island)的冒险邀请!我们岛上的“逻辑机关”被调皮的信息怪兽弄乱了顺序,只有懂编程的小勇士才能解开机关,让岛上的创意魔法重新运转。如果你愿意来,请打开信封背面的机关,你的冒险地图就在里面。 > 代码岛长老 码爷爷 / Grandpa Code > 2024年5月20日
“哇!哥哥要去冒险!”小雅眼睛都亮了,扒着阿明的胳膊晃,“我也要去!我也要去!”
“我连编程
“我连编程是什么都不知道,怎么当什么小勇士啊?”阿明把后半句话补完,把邀请函举到眼前晃了晃,那道淡蓝色的光随着他的动作晃了晃,像一团被风吹散的蒲公英,细碎的光点落在他的数学卷子上,把那个红红的“87”分映得发亮。
半空中突然冒出来一个半透明的小身影,头发是一缕一缕跳动的绿色0和1代码,手里攥着个巴掌大的彩色积木块,脚底下还飘着个滚来滚去的小猫角色——就是阿明上周在科技馆见过的Scratch编程猫。他说话的时候会时不时掉下细小的代码碎片,落在书桌上就变成小星星消失了,五岁的小雅扒在沙发扶手上,伸手去抓那些星星,抓了个空,哇哇叫着让哥哥给她变真的星星。
“哎呀,你别急呀!”小身影蹦跶到阿明面前,伸手戳了戳他的卷子,“我就是代码岛的向导小码,你可以叫我小码哥哥~你说的编程啊,其实就是给机器下指令的魔法 / The Magic of Giving Instructions to Machines,远没有你想的那么难!”
小码打了个响指,书桌上的平板电脑突然亮了起来,屏幕上跳出来一段妈妈在厨房做番茄炒蛋的视频:妈妈先洗干净番茄切块,再把鸡蛋打散在碗里,然后往锅里倒油,油热了先炒鸡蛋,盛出来之后再炒番茄,最后把鸡蛋倒进去加盐调味,一盘红黄相间的番茄炒蛋就出锅了。
“你看你妈妈做菜,是不是得按顺序来?”小码指着视频问阿明,“要是她先放鸡蛋再洗番茄,或者忘了放盐,味道是不是就坏了?编程其实就是这个道理:你按照正确的顺序给机器下一串指令,它就能帮你完成你想做的事,比如做游戏、算数、甚至控制机器人跳舞。”
阿明盯着屏幕里的番茄炒蛋,又想起那道错了的排序题——原来老师说的“顺序决定结果”,就是编程最基础的道理啊!他忍不住问:“那编程是不是只有写很复杂的代码才行?我上次去科技馆,看到大哥哥们在电脑上敲一堆我认不出来的英文,那才叫编程吧?”
“当然不是啦!”小码挥了挥手里的积木块,屏幕上的视频突然变成了阿明上次在同学小雨家玩过的“打地鼠”游戏,“你看这个游戏,就是用我们代码岛最基础的编程工具Scratch做的,不用敲复杂的英文代码,只要把像积木一样的指令块拖来拖去,按顺序拼起来,就能做出来。你上次是不是玩了半小时还不想走?那就是小雨用编程做出来的哦!”
阿明眼睛一下子亮了,他上周去小雨家玩的时候,确实被那个会随机冒地鼠、点了地鼠会加分、还有倒计时的游戏惊到了,当时他还问小雨怎么弄的,小雨说“用积木拼的”,他还以为是在玩普通的积木游戏,没想到那就是编程!
“而且编程也不是只有做游戏有用哦。”小码调出了另一个页面,是超市的进货单表格,“你看你妈妈每天在超市要统计几十种商品的进货数量和单价,以前要算一下午,现在只要写个简单的小程序,把数字输进去,自动就能算出总价,还能生成表格,省下来的时间她就能陪你玩积木啦。”
屏幕又跳转到老师的办公桌,老师正在改试卷,面前堆着一摞摞的练习册:“你们老师每次要统计全班的考试分数,算平均分、最高分最低分,以前要翻好久的卷子,现在用编程写个小工具,把分数输进去,一秒就能出结果,还能自动生成每个同学的成绩曲线,是不是特别方便?”
阿明越听越入神,他之前一直觉得编程是“很厉害的大人才能做的事”,没想到原来离自己这么近,甚至平时玩的游戏、看的动画片、用的健康码,都是编程做出来的。他忍不住问:“那为什么每个人都要学编程啊?我又不想当程序员。”
小码的表情突然变得认真起来,他飘到阿明的书桌前,指着窗外正在跑的小区快递机器人:“你看现在的生活里,到处都是机器和程序:你点外卖的时候,程序会帮你匹配最近的商家和骑手;你刷短视频的时候,程序会帮你推荐你喜欢的内容;甚至你每天早上用的电动牙刷,里面都有小程序控制刷牙时间。未来我们和机器沟通,就像现在我们用笔写字、用嘴说话一样普遍 / In the future, communicating with machines will be as common as writing with a pen or speaking with our mouths.”
他调出了一份白皮书的页面,上面写着《2023年中国青少年编程教育白皮书》:“你看,现在我国已经有超过1000万中小学生在学编程,2022年教育部还把信息科技列成了必修课,编程是核心内容。麦肯锡2023年的报告也预测,到2030年,全球会有超过3.5亿个岗位需要基础的编程能力,其中70%都不是程序员——老师可以用编程自动改作业、统计成绩,医生可以用编程分析医学影像,设计师可以用编程做动画特效,甚至你妈妈开超市,用编程管库存都能省好多钱。”
“而且学编程最重要的不是要你以后当程序员,是要你学会计算思维 / Computational Thinking。”小码挥了挥手,屏幕上跳出来四个彩色的小方块,分别写着“分解问题”“模式识别”“抽象”“算法”,“计算思维不是什么高深的学术概念,其实就是你解决问题的聪明方法,我举几个例子你就懂了。”
第一个方块亮了起来,写着“分解问题 / Decomposition”:“比如老师让你办一次班级联欢会,你肯定不可能一个人把所有事都做了吧?你会把它拆成‘定节目、买零食、布置教室、请家长’几个小任务,每个任务再拆成更小的:比如定节目拆成‘征集节目、筛选节目、排顺序’,买零食拆成‘列清单、比价格、买回来’,把大问题拆成一个个小问题,一个个解决,最后就能办成联欢会,这就是分解问题,也是编程里最常用的方法。”
第二个方块亮了,写着“模式识别 / Pattern Recognition”:“比如你发现每次你整理书包,把语文、数学、英语课本按从大到小的顺序放,第二天找课本特别快,每次你乱塞书包,找课本都要翻好久,你就会总结出‘按大小顺序放,常用的放外面’的规律,以后你整理书包、整理玩具、整理书架都可以用这个规律,不用每次都重新想怎么整理,这就是模式识别,找到不同事情里的共同规律。”
第三个方块亮了,写着“抽象 / Abstraction”:“比如你画过很多不同的小猫,有白的、黑的、橘的,但是你都能认出它们是猫,因为你抓住了小猫的共同特点:尖耳朵、长胡子、四条腿、会喵喵叫,你不用记住每一只猫的具体样子,只要抓住这些共同特点,就能认出所有的猫,这就是抽象,去掉不一样的地方,抓住共同的特点,编程的时候我们也会用抽象,把复杂的东西简化,就好解决了。”
第四个方块亮了,写着“算法 / Algorithm”:“比如你每天早上起床的步骤:关闹钟→穿衣服→叠被子→刷牙洗脸→吃早餐→出门,这个步骤就是你的‘起床算法’,按照这个步骤做,就不会迟到,要是顺序错了,比如先刷牙再穿衣服,就会把刚穿好的衣服弄湿,算法就是解决问题的步骤说明书,按照正确的步骤做,就能得到正确的结果。”
阿明听得入神,他之前一直觉得“计算思维”是很厉害的科学家才有的东西,没想到其实就是自己平时解决问题的方法,只是以前不知道原来这些方法有个这么厉害的名字。他忍不住问:“那我之前那道排序题错了,是不是就是没用好计算思维?”
“对呀!”小码打了个响指,屏幕上跳出来那道排序题的截图,“你就是把步骤的顺序搞错了,要是你先把题目里的条件列出来,再按顺序算,就不会错了。不过没关系,编程就是练这个的,练得多了,你自然就会注意顺序,逻辑也会越来越清楚。”
小码飘到窗边,指着楼下正在跑的小学生:“而且学编程还有一个特别棒的好处,就是能让你有‘创造的能力’而不是只会‘用别人做的东西’。你现在玩的游戏、看的动画片都是别人做的,但是学了编程之后,你也能自己做游戏、做动画片,讲你自己想讲的故事,甚至还能做个小程序帮妈妈统计超市的进货单,帮老师统计分数,那种自己创造东西的成就感,比玩别人做的游戏强一百倍!”
阿明的心一下子热了起来,他之前一直觉得学习就是为了考高分,没想到原来学会编程还能做这么多有意思的事,还能帮家人的忙。他忍不住问:“那这本书为什么是中英双语的啊?我英语可不好。”
“哈哈,这个你不用担心~”小码挥了挥手,屏幕上跳出来一行中英文对照的词:`print 打印` `if 如果` `for 循环` `while 当...的时候`,“你看,编程里的关键字都是英文的,我们学的时候把中英文一起记,以后看国外的编程教程、用国外的编程工具都看得懂,而且还能顺便记单词,锻炼英语能力,一举两得~本书里的英文都是简单句,有中文对照,后面还有专门的词汇表,你绝对能看懂。”
阿明点了点头,把邀请函翻了过来,背面有个小小的彩色积木形状的按钮,边缘还刻着一行小字:“按下按钮,开启你的编程冒险 / Press the button to start your programming adventure”。他深吸一口气,按下了那个按钮。
“叮”的一声轻响,一道暖黄色的光从按钮里冒出来,在书桌上摊开成了一个巴掌大的全息地图,上面标着四个闪闪发亮的地点:最前面的“积木森林”亮着暖黄色的光,后面跟着灰扑扑的“代码沙漠”、阴森森的“逻辑城堡”,还有波光粼粼的“创意海岸”。小码跳到地图上,指着积木森林说:“我们的第一站就是积木森林!那里有会说话的彩色积木,只要你把积木块按正确的顺序拼起来,就能解开第一个机关,学会Scratch图形化编程的基础知识~”
“等等!”阿明突然想起什么,举起手里的数学卷子,“我数学这么差,能学会编程吗?”
“当然能!”小码笑着敲了敲他的卷子,“编程最需要的不是数学好,是逻辑清楚、有耐心,你之前那道排序题只是顺序错了,逻辑一点问题都没有,特别适合学编程。而且我们代码岛的所有机关都是慢慢变难的,你跟着一步步走,肯定能通关的!”
小雅这时候凑过来,盯着全息地图上的积木森林:“哥哥,我也要去!我也要学编程!”
“好啊!”小码打了个响指,屏幕上跳出来一个简单的Scratch程序,点一下屏幕上的小猫,小猫就会晃着尾巴跳舞,还说“你好呀小雅!”,小雅高兴得拍着手,围着桌子转圈圈。
小码收起地图,飘到阿明面前,递给他一个笔记本和一支笔:“在出发去积木森林之前,你要完成第一关的小任务哦——用自然语言给家人描述你的一天,理解指令序列的基本逻辑 / Use natural language to describe your day to your family, and understand the basic logic of instruction sequences。”
“指令序列?”阿明歪着头问。
“就是你刚才看到的你妈妈做番茄炒蛋的步骤,还有你早上起床的步骤,都是一串按顺序排的指令,我们把它们叫做‘指令序列’,编程的核心就是写正确的指令序列。”小码给他递过来一张已经写好了示例的纸条:
> 阿明的一天 / Aming's Daily Instruction Sequence > 1. 7:00 起床 / Get up at 7:00 > 2. 7:10 刷牙洗脸 / Brush teeth and wash face at 7:10 > 3. 7:20 吃妈妈做的早餐 / Eat breakfast made by mom at 7:20 > 4. 7:40 背书包去学校 / Go to school with schoolbag at 7:40 > 5. 8:00-11:40 上课 / Have classes from 8:00 to 11:40 > 6. 12:00 吃午餐 / Have lunch at 12:00 > 7. 13:00-14:30 午休 / Have a nap from 13:00 to 14:30 > 8. 14:40-16:30 上课 / Have classes from 14:40 to 16:30 > 9. 17:00 放学回家 / Go home after school at 17:00 > 10. 17:30 写作业 / Do homework at 17:30 > 11. 18:30 吃晚餐 / Have dinner at 18:30 > 12. 19:00-19:30 看动画片 / Watch cartoons from 19:00 to 19:30 > 13. 20:00 洗澡 / Take a shower at 20:00 > 14. 21:00 睡觉 / Go to bed at 21:00
“你看,这就是你的一天,每一步都是按顺序来的,要是顺序错了会怎么样?”小码指着纸条问。
阿明想了想:“要是把‘吃早餐’放到‘去学校’后面,我上学就会饿肚子;要是把‘看动画片’放到‘写作业’前面,我肯定写到半夜也写不完,还会被妈妈骂。”
“没错!”小码打了个响指,“这就是指令序列的‘顺序规则’,每一步都影响着最后的结果,编程里也是一样,哪怕你把两个积木块的顺序放反了,程序也会出错,我们管这种错误叫‘Bug’。”
阿明拿出笔记本,照着示例写起了自己的一天,他写得特别认真,连中午和同学一起玩十分钟的抓人游戏都写进去了。写完他读给妈妈听,妈妈笑着说他安排得特别合理,就是晚上看动画片的时间可以再缩短五分钟,多读一会儿书。阿明点了点头,把妈妈的话也加到了指令序列里。
写完自己的指令序列,阿明又试着打乱了两个步骤的顺序:他把“写作业”放到了“看动画片”的后面,把“吃早餐”放到了“去学校”的后面,然后给妈妈读了一遍,妈妈笑得前仰后合:“那你要么饿着肚子上课,要么写到半夜睡觉,第二天肯定起不来,迟到罚站哦!”
阿明也笑了,他 suddenly 明白了老师说的“顺序决定结果”是什么意思,也明白了编程其实并没有那么难,就是把自己要做的事按正确的顺序排好,一步步完成而已。
小码看着阿明写完的指令序列,满意地点了点头:“很好!你已经掌握了第一课最核心的知识啦!现在你的冒险地图已经完全解锁,第一站‘积木森林’的机关已经为你打开,准备好和彩色积木做朋友了吗?”
阿明攥着笔记本,眼睛亮得发光,他刚才还在为数学测验的87分懊恼,现在却觉得特别兴奋——原来编程不是只有高深的代码,而是像做番茄炒蛋、整理书包一样,只要按正确的顺序做事,就能创造出来有意思的东西。
他抬头看向窗外的天空,明明还是下午,他却觉得好像已经看到了代码岛上那片飘着彩色积木的森林,还有会说话的小猫、会跳舞的代码块,在等着他去冒险。
> 📌 小知识 / Little Knowledge: > 世界上第一个程序员是19世纪的英国数学家阿达·洛
世界上第一个程序员是19世纪的英国数学家阿达·洛夫莱斯(Ada Lovelace)。¹ 她为查尔斯·巴贝奇设计的差分机编写了世界上第一个计算机算法,用来计算伯努利数,比世界上第一台电子计算机早了近100年,因此被公认为历史上第一位程序员。
::: sidebar 📌 小知识:你知道“Bug”的由来吗?/ Do you know the origin of the word "Bug"? 1947年,美国工程师格蕾丝·霍珀(Grace Hopper)在Mark II计算机的继电器里发现了一只被电死的飞蛾,这只飞蛾导致程序出现了错误。霍珀把飞蛾夹到了工作日志里,备注“First actual case of bug being found”(第一个实际发现的Bug)。后来人们就把程序中的错误叫做“Bug”,而修复Bug的过程就叫做“Debug(调试)”。 :::
阿明盯着空中飘着的代码碎片,又低头看了看手里攥着的87分数学卷,突然觉得之前对编程的误解特别好笑——原来编程不是什么高深的、只有尖子生才能接触的东西,而是像做番茄炒蛋、整理书包一样普通的事。他忍不住又问:“那我数学这么差,真的能学会编程吗?上次我去科技馆,看到大哥哥们敲的代码我一个字都看不懂。”
“当然能啦!”小码打了个响指,书桌上的平板电脑突然亮了起来,屏幕上跳出来一个阿明上周在同学小雨家玩过的“打地鼠”游戏:地鼠会从洞里随机冒出来,点中就会加分,还有倒计时和排行榜,阿明当时玩了半小时都不肯走。“你看这个游戏,就是小雨用Scratch做出来的,不用敲复杂的英文代码,只要把像积木一样的指令块拖来拖去,按顺序拼起来就行。小雨数学也只考80多分,但是他特别喜欢玩游戏,就想自己做游戏,学了两个月就能做出来这么好玩的东西了。”
屏幕又跳转到另一个视频:是小区里的张阿姨,以前在超市上班,每天要算几十种商品的进货总价,经常算到半夜,后来跟着儿子学了半个月的Python基础,写了个小程序,只要把商品的单价和数量输进去,自动就能算出总价,还能生成进货报表,省下来的时间都用来跳广场舞了。“你看,编程不是只有做游戏有用,还能帮大人解决工作里的麻烦事,省下来的时间就能陪你玩,是不是特别好?”
阿明越听越入神,他之前一直觉得“编程”是离自己很远的东西,没想到身边就有这么多人会用,而且一点都不难。他忍不住问:“那为什么每个人都要学编程呀?我又不想以后当程序员。”
小码的表情突然变得认真起来,他飘到窗边,指着楼下正在送快递的机器人:“你看现在的生活里,到处都是机器和程序:你点外卖的时候,程序会帮你匹配最近的商家和骑手;你刷短视频的时候,程序会帮你推荐你喜欢的内容;甚至你每天早上用的电动牙刷,里面都有小程序控制刷牙时间。未来我们和机器沟通,就像现在我们用笔写字、用嘴说话一样普遍 / In the future, communicating with machines will be as common as writing with a pen or speaking with our mouths.”
他调出了一份白皮书的页面,上面印着烫金的字:《2023年中国青少年编程教育白皮书》:“你看,现在我国已经有超过1000