乐乐十岁了。
四年级开学那天,他背着书包站在学校门口,回头看了一眼苏婉。苏婉朝他挥了挥手,他点了一下头,转身走进了校门。书包比去年大了一圈,里面装了新课本、新文具盒、一个水壶和一本他偷偷塞进去的编程书。
苏婉看着他走进校门的背影,在微信上给林晨发了一条消息:他又把那本编程书带去了。
林晨回了一个字:
乐乐对编程的兴趣,是从去年暑假开始的。
那时候林晨在书房里跑模型,ipad上显示着一条条信号线——买入、卖出、持仓、止损,每一条线都在实时更新。乐乐从门缝里探进一个脑袋,看了两分钟,问了一句:爸爸,这些线是什么?
是股票的走势。林晨说。
股票是什么?
是一种投资。你买了一家公司的股票,就是买了这家公司的一小块。公司赚钱了,你的股票就值钱了。
乐乐想了一下。那你怎么知道哪家公司会赚钱?
看数据。林晨指了指ipad上的图表。这些线是数据画出来的。有些数据说明这家公司在变好,有些数据说明这家公司在变差。我写了一个程序来分析这些数据,程序会告诉我要买还是卖。
程序?你自己写的?
乐乐又想了一下。我能学写程序吗?
林晨看了他一眼。乐乐站在书房门口,书包还没放下,校服领子歪了,头发被风吹得有点乱。他的眼睛很亮,是真正在想事情的时候才会有的那种亮。
可以。林晨说。但有一个条件。
什么条件?
先写完暑假作业。
乐乐了一声,转身就跑。苏婉在客厅里叫了一句:先洗手!他没有听见。
那个暑假,乐乐用了一个月的时间看完了林晨给他买的一本《Scratch编程入门》。Scratch是麻省理工学院开发的儿童编程语言,用积木块拖拽的方式学编程逻辑,不需要打字,只需要把不同颜色的模块拼在一起。乐乐花了三天时间搞懂了循环,一周搞懂了条件判断,两周搞懂了变量。一个月后,他在Scratch上做了一个小游戏——一只小猫在屏幕上跑来跑去,碰到边缘就反弹,碰到苹果就加分,碰到炸弹就减分。
游戏做好的那天晚上,乐乐抱着ipad跑到林晨面前。爸爸你看!我做了一个游戏!
林晨放下手上的笔记本,接过ipad看了一遍。小猫跑得很流畅,碰撞检测做得没有bug,分数的计算也正确。他点了一下重新开始,游戏重新运行,还是流畅。
你怎么做碰撞检测的?他问。
就是判断小猫的坐标和苹果的坐标有没有重叠。乐乐说。重叠了就是碰到了,碰到就加分。炸弹也一样。
林晨看了他三秒。你怎么知道坐标重叠的?
你那本书上写的。乐乐指了指书架上那本《Scratch编程入门》。第四章第三节,碰撞检测。我看了三遍才看懂。
林晨把ipad还给乐乐,没有说话。他在心里算了一下——四年级的孩子,一个月看完一本编程入门书,做了一个有碰撞检测的小游戏,逻辑没有bug。这个速度不算快,但也不慢。更重要的是,他是自己看懂的,没有让林晨教。
你接下来想做什么?林晨问。
我想做一个小猫跑迷宫的游戏。乐乐说。但是迷宫比小猫跑来跑去复杂,我还没想好怎么做。
你先想。想不明白再来问我。
乐乐抱着ipad跑回了自己的房间。苏婉从厨房出来,看了一眼乐乐的背影,又看了一眼林晨。
你让他学编程?
他自己要学的。
他才十岁。
十岁可以学了。林晨说。我当年学编程也是十岁左右,在学校的电脑房里看同学写bASIc,回家之后自己在纸上画流程图。
苏婉没有再说什么。她回到厨房,继续做饭。
四年级上学期,乐乐在学校的表现一直很稳。语文中上,数学上等,英语中等偏上。苏婉每次开家长会回来都说,乐乐的语文老师说他作文写得好,数学老师说他解题快但有时候跳步骤,英语老师说他发音准但词汇量不够。
林晨对这些评价没有太在意。他在意的是另一件事——乐乐放学之后做什么。
每天下午四点半放学回家,乐乐的第一件事是写作业。写完作业大概五点半,然后他会在自己的房间里待到七点吃晚饭。这一个半小时,他有时候看书,有时候画画,有时候玩ipad上的游戏。但从暑假之后,这一个半小时里的游戏时间逐渐被编程时间替代了。
有一天林晨路过乐乐的房间,看到他坐在书桌前,ipad上不是Scratch而是python的教程页面。他停下来看了一会儿。
乐乐在学python。
不是林晨教的,是他自己找的。他在Scratch上做了三个游戏之后,觉得积木块拖拽的方式太限制了——他想做更复杂的东西,但Scratch的模块不够用。于是他在ipad上搜编程怎么学,搜到了一个python入门教程,就开始看了。
林晨站在门口看了五分钟。乐乐的ipad上是一个编程教学网站,白色的背景上写着黑色的代码。他看得很认真,一边看一边在纸上抄代码。抄完一段代码之后,他在ipad的编程模拟器里运行了一遍,屏幕上出现了一行字:hello, world!
乐乐没有笑。他盯着那行字看了两秒,然后继续看下一段。
林晨走开了。他没有打扰乐乐。
十月底,学校发了一个通知——鹏城市青少年编程竞赛,面向全市小学四年级以上学生,分为Scratch组和python组。竞赛包括初赛(线上答题)和决赛(现场编程),决赛前三名有奖杯和证书。
乐乐回家的时候把通知拍了下来,发给林晨看。
爸爸,我想参加这个比赛。
你想报哪个组?
python组。
林晨想了一下。python组是四年级以上的,你的python学了多久?
两个月。
两个月。林晨重复了一遍。你知道python组的决赛题目是什么水平吗?
不知道。乐乐说。但我看了一下去年的初赛题目,大部分我能做。
林晨拿过ipad,打开了竞赛官网的历年题目。去年的python组初赛是二十道选择题和五道编程题,选择题考的是编程基础——变量、循环、条件判断、函数定义、列表操作。编程题考的是逻辑——用python写一个程序,解决一个具体问题。
他看了一遍题目,然后看了一遍乐乐。
你做一下去年的初赛题。
现在?
现在。
乐乐坐在书桌前,花了四十分钟做完了去年的初赛题。选择题全对,编程题做了四道,第五道做了一半——他卡在一个列表排序的问题上,不知道python的sort函数可以传key参数。
林晨看了一遍他的答案,在最后一道题旁边写了一行:sort(key=lambda x: x[1])。
这个是什么意思?乐乐问。
sort是python的排序函数。你传一个key参数进去,告诉它按照什么规则排序。lambda是一个匿名函数,x是列表里的元素,x[1]是按照元素的第二个值排序。
乐乐看了两遍,然后在纸上把这一行抄了下来。
我记住了。他说。
初赛在十一月中旬。乐乐报了python组,跟学校另外三个同学一起在计算机教室里答题。初赛是线上的,两个小时,二十道选择题加五道编程题。
考完出来的时候,乐乐的表情很平静。苏婉在校门口接他,问他考得怎么样,他说。
还行是什么意思?苏婉问。
就是有几道题不太确定,但大部分都做出来了。
初赛成绩一周后公布。乐乐在鹏城赛区的python组排名第七,总共有四十二个参赛者。前十五名进入决赛。
苏婉在微信上跟林晨说:他进了决赛。
林晨回了一条:
然后他又发了一条:决赛之前,每天晚上我陪他练一个小时。
苏婉回了一个字:
从那天开始,每天晚上八点到九点,林晨坐在乐乐旁边,陪他练编程。不是教他写代码,是陪他做题。林晨从网上找了几套编程竞赛的模拟题,每天一套,乐乐做完之后两个人一起看答案,讨论哪一步可以优化、哪一步可以简化。
有一天晚上,乐乐在做一道关于字符串处理的题目。题目要求把一个句子里的单词反转——比如hello worldworld hello。乐乐的做法是把句子用空格切分成列表,然后把列表倒序,再用空格连接起来。三行代码,逻辑正确。
林晨看了一眼,说:你的做法是对的。但你有没有想过另一种方式?
什么方式?
不用split,用循环做。
乐乐想了一分钟。他在纸上画了一个流程图——从字符串的末尾开始往前遍历,遇到空格就截取一个单词,然后把单词加到结果里。他用python写了一遍,代码比split的版本长了一倍。
为什么要用循环做?乐乐问。split一行就搞定了。
因为不是所有编程语言都有split。林晨说。也不是所有问题都有现成的函数可以调用。你现在学的python,有很多内置函数帮你省事。但如果你以后学c语言、学汇编、学更底层的东西,这些函数都不存在。你需要自己写。理解原理比记住函数更重要。
乐乐想了一下,点了点头。他把循环版本的代码又看了一遍,然后在笔记本上写了一行:
原理比函数重要。
决赛在十二月初。地点是鹏城科技馆的三楼会议室,四十个孩子坐在四十台电脑前面,每人两个半小时,五道编程题。
林晨和苏婉在科技馆外面等。苏婉坐在长椅上看手机,林晨站在窗边,看着科技馆的大门。
你紧张吗?苏婉问。
不紧张。林晨说。他学到什么程度就发挥到什么程度。竞赛只是检验,不是目的。
苏婉笑了一下。你说话越来越像教练了。
我本来就不是教练。林晨说。我只是一个陪他做题的家长。
两个半小时后,科技馆的大门打开了。四十个孩子陆陆续续走出来。乐乐是倒数第五个出来的。他走出来的时候表情很认真,不像考完了的样子,更像在回想什么。
怎么样?苏婉迎上去。
最后一道题没做完。乐乐说。是关于递归的,我递归写到第三层就搞不清楚了。
那其他四道呢?
做完了。第三道题我用了循环做,没有用split。
苏婉看了林晨一眼。林晨嘴角动了一下,但没有笑出声。
决赛成绩在两周后公布。
乐乐在python组决赛中获得了第三名。五道题他做完了四道,最后一道递归题做了一半。总分四百二十分,比第一名少了四十五分,比第二名少了二十分。
奖杯是鹏城市教育局发的,铜的,不大,放在乐乐书桌上刚好。证书是一张A4纸,上面写着鹏城市青少年编程竞赛python组第三名,下面盖了教育局的红章。
乐乐把奖杯和证书拿回家的那天晚上,他把两样东西放在书桌正中间,然后坐在椅子上看了很久。
苏婉在门口看了一眼,转身去厨房做了一桌菜。有乐乐最爱吃的糖醋排骨、可乐鸡翅、西红柿炒蛋、清炒时蔬和一碗紫菜蛋花汤。
吃饭的时候,乐乐没有提奖杯的事。他吃了两块排骨,一碗米饭,喝了半碗汤,然后说了一句:爸爸,第三名说明我还有好多不会的。
林晨看着他。你觉得你不会的是什么?
递归。乐乐说。还有排序的高级算法。还有数据结构。我到现在只学了列表和字典,队列和栈还没学。
你打算怎么学?
你能不能教我?
林晨想了一下。我可以教你。但有一个条件。
什么条件?
数学先学好。林晨说。编程的本质是数学。排序的本质是比较,递归的本质是归纳,数据结构的本质是抽象。你数学基础不扎实,编程学到后面会遇到天花板。你现在数学成绩中上,但还不够。要把数学从中上变成上等,再来学更深的编程。
乐乐想了一下。那我数学怎么学?
先把学校的内容学好,然后我给你找一本数学思维训练的书,每天做两道题。编程课继续,但节奏放慢,一周两次,一次一个小时。剩下的时间用来学数学。
乐乐说。他低头吃了一块排骨,然后又抬起头来。
爸爸。
谢谢你们。
苏婉在旁边愣了一下。乐乐从来没有说过谢谢,不是不懂礼貌,是他这个年龄的孩子不习惯对父母说谢谢。
谢什么?苏婉问。
谢谢你们让我学编程。乐乐说。我们班有个同学也想学编程,但他爸妈不让,说编程影响学习。你们没有不让我学。
林晨看了苏婉一眼。苏婉的眼睛红了一圈,但她忍住了,端起汤碗喝了一口。
你只要不影响学习就行。苏婉说。
不会的。乐乐说。数学老师说我的成绩这学期进步了。
林晨没有说话。他看着乐乐面前那个铜奖杯,奖杯在灯光下泛着暗金色的光。奖杯不大,但放在十岁孩子的书桌上,刚好。
那天晚上,乐乐睡了之后,林晨在书房里坐了一会儿。他打开电脑,在乐乐的编程学习记录里加了一行:
2026年12月 鹏城市青少年编程竞赛python组第三名 下一步:数学基础强化 + 数据结构入门
他看着这行字,想起了自己十岁的时候。那时候他在学校的电脑房里看同学写bASIc,回家之后在纸上画流程图。没有人教他,没有ipad,没有编程竞赛,更没有铜奖杯。他只是在一个阴差阳错的瞬间看到了一条路,然后自己走了上去。
现在乐乐也看到了一条路。这条路是乐乐自己找到的。林晨只是在他走的时候,在旁边陪了一段。
这段路才刚开始。