我给 3 岁儿子用 GitHub 做了 10 个算法游戏

0 阅读5分钟

儿子 3 岁半。我没教他写代码——我给他做了 10 个网页游戏,每个游戏背后,是一章算法。

先说一个反常识的结论

3 岁半的孩子,教不会编程。但他能"玩会"算法。

皮亚杰说这个阶段的孩子处于"前运算期"——抽象符号没有意义。你跟他讲二分法,他听不进去;你让他"猜数字,每次砍一半",他能玩一下午。

所以我没有走"少儿编程教程"的路,而是走了一条更笨、也更真实的路:

把《算法图解》的 10 章,全部做成儿子能玩的网页游戏。

这就是故事的开头。项目在 GitHub 上:Junior-Coder-Journey——一个爸爸和 3 岁半儿子的 15 年编程之约。

我做了什么:10 个游戏 = 10 章算法

| 游戏 | 算法 | 孩子玩什么 | 偷偷学会什么 |

|---|---|---|---|

| 🐿️ 猜猜小动物在哪里 | 二分查找 | 猜树洞,最多 7 次 | 每次砍一半 |

| 🍦 排队买冰淇淋 | 选择排序 | 每次点最矮的进队 | 每张牌被看了 N 遍 = n² |

| 🪆 套娃拆拆乐 | 递归 | 拆到空娃娃再数回来 | 基线 + 回溯 |

| 📚 书架整理员 | 快速排序 | 抽标杆分两堆再分 | 分而治之 |

| 🔐 小动物储物柜 | 哈希表 | 编号去尾算格子号 | O(1) 直接开柜 |

| 🐒 小猴子找朋友 | BFS | 波纹一圈圈扩散 | 先碰到 = 最短 |

| 🐜 蚂蚁找食物 | Dijkstra | 比较数字选最近的站 | 贪心 + 松弛 |

| 📡 盖广播塔 | 贪心 | 每次选覆盖最多的塔 | 贪心会翻车! |

| 🐿️ 小松鼠装松果 | 动态规划 | 试装出最高价值 | 格子踩着前一格 |

| 🔮 猜猜它是谁 | KNN | 选邻居投票猜族 | 物以类聚 |

每个游戏:零安装,点开即玩。手机、平板、电脑都行。

游戏馆入口:🎡 小动物森林 · 算法游乐场

一个外行工程师爸爸的工程实践

作为做了十几年金融的老程序员(半路出家那种),我给自己定了三条工程纪律:

1. 纯 HTML/CSS/JS,零依赖。

没有框架、没有构建工具、没有 CDN。一个文件夹就是一个游戏。儿子 18 岁打开这个仓库时,不需要装任何环境。

2. TDD——先写测试,再写游戏。

每个游戏的核心逻辑都是纯函数,先写单元测试再实现。比如 Dijkstra 游戏,我要求它的结果必须和暴力穷举完全一致——30 组随机图上,算法答案 = 枚举所有路径的最优解。这不是"感觉对",是数学上对。

3. 冒烟测试——用真实浏览器自动玩一遍。

每个游戏都配了 Playwright 冒烟脚本,模拟孩子真实点击,验证"点亮点→蚂蚁走过去→到达终点"全流程。改任何东西,先跑测试。

最有意思的一次迭代: 第 8 章贪心游戏,我最初设计了"4 村陷阱"——想让贪心算法翻车。结果写测试时发现:4 个村庄的贪心反例在数学上不存在——要么全包塔让贪心必赢,要么没有全包塔最优也要 2 座。真正能骗过贪心的反例需要至少 8 个元素。于是我重设计了关卡,用暴力验证确认"贪心 3 座 > 最优 2 座"成立,才敢上线。

这就是做给孩子的东西和做给大人看的东西的区别:每一个"教学陷阱"都是数学上验证过的。

三个教育原则(比算法更重要)

1. 玩先于学,陪伴第一。

每周记录里唯一 KPI 是"开心指数"。玩 10 分钟,写 15 分钟。不考试、不比较、不纠错——错了?那是"机器人听错了"。

2. 每个算法都配"亲子化三件套"。

  • 📖 睡前故事:《小兔子找胡萝卜》(二分法)、《套娃拆拆乐》(递归)……10 本,3 岁就能听

  • 🎨 动手游戏:扑克牌快排、硬币地图、给玩具贴号码……打印即玩

  • 🎮 网页游戏:就是上面那 10 个

3. 游戏跟着算法走,不套模板。

二分法是"猜",BFS 是"波纹扩散",Dijkstra 是"比较数字选最近"——每个游戏的核心动作就是算法的核心动作。孩子玩的是算法的动作,不是点按钮。

从"我的项目"到"大家的项目"

我把它开源了(CC BY-NC 4.0,家庭和教育自由使用),并且:

  • 写了贡献指南:活动卡、故事、翻译、游戏改进都可以参与

  • 建了 9 个 good first issues:给游戏加音量开关、翻译英文 README、做兼容性测试……新手也能上手

  • 每个游戏带完整测试,改起来放心

最想邀请的人,是其他工程师爸爸/妈妈。 你们有技术能力、有亲子场景,缺的只是一个内容载体——这个仓库就是。

如果你家也有 3-7 岁的孩子,今天就能做的事:

  1. 打开游戏馆,陪他玩一局《猜猜小动物在哪里》

  2. 打印亲子活动卡,玩 10 分钟无屏游戏

  3. 睡前给他讲一个"小松鼠装松果"的故事

然后,如果你愿意,把这个故事继续写下去。


仓库:github.com/Justinjchen…

游戏馆(零安装):🎡 小动物森林 · 算法游乐场

新手任务:github.com/Justinjchen…

写在最后:这个项目的真正价值,不是 10 个游戏,而是"真实发生"——一个 42 岁的爸爸,和一个 3 岁半的儿子,决定一起做一件要花 15 年的事。它会活到儿子 18 岁。那时候,这里的一切都属于他。