贪吃蛇是我的第一个编程项目——为什么它至今仍有意义
每个程序员都记得他们的第一个项目。我的是一个卡顿、满是 bug 的贪吃蛇游戏。二十年后,我仍然认为它是完美的起点。
我十二岁时写下了我的第一行代码。不是"Hello, World"——我爸跳过了寒暄,递给我一本 QBasic 的书、一块士力架,和一个同情的耸肩。我真正做的第一个东西是一个贪吃蛇游戏。它糟透了。蛇可以穿墙出现在屏幕对面——我以为这是功能,后来才发现我只是没写碰撞检测。食物有一半时间生成在墙里面。计分板在 9 分后就不动了,因为我用了单个数字变量。这是一个无能的杰作。
最近我经常想起那个卡顿的贪吃蛇游戏。不是因为我在怀旧——虽然确实有一点——而是因为我开始教一个朋友编程,我发现自己推荐了完全一样的项目。不是计算器。不是待办清单。是贪吃蛇。而且我认为它仍然是你能构建的最好的第一个项目。
原因如下。贪吃蛇有恰到好处的复杂度,能教你真正的概念而不会让人不知所措。你需要一个游戏循环,立即引入了状态和状态更新的概念。你需要处理键盘输入,以具体的方式教授事件驱动编程。你需要碰撞检测,这是一个不需要高级数学的有趣难题。你还需要一个计分系统,介绍变量和显示逻辑。所有这些在大多数语言中大约 50 到 100 行代码就能搞定。你可以在一个晚上构建一个可玩的版本。
但贪吃蛇真正的魔力在于它立即可玩。第一次运行你的代码,看到一个像素方块在屏幕上按照你的按键移动,这有种深深的满足感。那个多巴胺刺激在学习时至关重要。它是让你在不可避免地遇到困难时坚持下去的动力。相信我,你会遇到困难的。我遇到了这么多困难,以至于我爸开始把餐桌叫我的"编码指挥部",因为我的文件摊得到处都是,脸上永远是一副困惑的表情。
贪吃蛇还教你一个更复杂的项目会隐藏的东西:迭代的价值。你可以分阶段构建贪吃蛇。第一步,让方块动起来。然后,让它转弯。然后,生成食物。然后,让蛇身变长。然后,添加游戏结束条件。每个阶段都是一个离散的、可达成的小目标。你不会面对一张空白页面,不知道如何构建一个全栈 web 应用。你只是试图让一个方块吃掉另一个方块。这是可达成的。这是有趣的。
我认为我们把新手编程搞得太复杂了。有各种训练营、课程和 YouTube 教程在第一周就让你接触 React、数据库和 API。这太疯狂了。没人通过学习办一场十二道菜的晚宴来学做饭。你从做烤奶酪三明治开始学。贪吃蛇就是编程项目中的烤奶酪三明治。
当我最终让我的贪吃蛇游戏运行起来时——包括碰撞检测——我感觉像爬上了珠穆朗玛峰。我给祖父母打了电话。我给学校里的每个人都看了。没人关心,但我不在乎他们不关心。我做出了一个以前不存在的东西。它能动。它有规则。你会输。你会赢。它是我的。
那种感觉从未真正消失。构建软件仍然是那样。你从无到有,加入逻辑,然后突然就有了一样之前没有的东西出现在那里。贪吃蛇是我对这种感觉的第一次体验,而我从此一直在追逐那种快感。如果你在学习编程,去做一个贪吃蛇游戏。做得烂一点。再做一次。然后再做点别的。但从贪吃蛇开始吧。