我的“Python海龟”诞生了一枚金蛋孵出的却是精灵

0 阅读7分钟

时光要追溯到2010年。这一年之前,我用Visual basic语言做3D小游戏,玩得不亦乐乎。自认为basic已经是非常简单的计算机语言了。那有没有比basic语言更适合的专用的少儿编程计算机语言呢?我一直在网上寻找。果然,找到了Scratch1.4版。从此就爱上了这只来自美国麻省理工的小猫咪。然后于2013年开了少儿编程培训班,2015年开始把Python纳入教学体系。2018年我已经写了较多的Python教学资料了。这期间发现Python的小海龟功能还是太弱了,于是打开它的turtle.py源代码文件,仔细研究起来,并且于2019年开始,不断地基于Python turtle模块,开发Python精灵模块。Python精灵模块主要设计了一个叫Sprite的类。大大增加了海龟的功能,比如可以进行像素级别的碰撞检测等等。现在所有人都可以通过pip install sprites来安装使用Python精灵模块了。

最近几年,我潜心研究信息学奥赛的教学,整日“苦思冥想”各种“难题”。在2025年8月的时候,暑假班结束了。我又开始思考。如果C++的入门教学能像Python turtle一样简单,那不就是能给中国所有少年带来福音吗?为此,在github里寻找前人的研究成果,下载了一些用C语言或者C++开发的类turtle的库。还有其它人的一些库,比如小熊猫C++库里自带的C语言海龟作图,还有GoC这些我都买了书准备教小学生了,还买了一本少儿3维C++编程书。但最终却没有使用它们。这是为什么呢?

小熊猫C++库里自带的C语言海龟作图的作者显然没有Python少儿编程教育经历,我联系过作者让他把里面的命令改成像Python turtle一样。那我也不能总去麻烦他,后来我也没有去联系他了。GoC这个里面的命令也没有承接自Python turtle。为了方便儿童输入字符,它把命令设计成一个字符或两个字符,比如pen.o或者pen.oo之类的。它命令相对较少,功能不太丰富。主要在线使用,它的作者到目前为止貌似都没有开发自己的C++编辑器。因为以前我用过离线版,要用notepad++。它更像是用于专攻信息学奥赛的一个前置课程而设计的。网上有人建议一或者二年级就开始学习GoC。如果打算专攻这个,是可以一试的。如果不打算专攻信奥赛,则可以不学。为什么呢?

一或者二年级的学生,如果教练眼力非常好,能看出来是个苗子,那可以尝试学。但现实情况却是,不可能每个小学生都去专攻信息学奥赛,它的着眼点就是挑出苗子去搞信奥赛。这终归是学霸们的战场。还有就是显然作者也没有深厚的Python turtle教学经历。对于普通学生来讲,他们的少儿编程学习经历应该是丰富多彩的,而不止局限于C++编程。因为学习编程的本质不在于某种计算机语言。

从脑科学视角来看,大脑发育存在“黄金窗口期”与“个体差异性”双重规律。 麻省理工学院脑与认知科学系研究发现:人类前额叶皮层在8岁左右进入“突触修剪高峰期”,此时逻辑推理、问题解决等能力正处于神经网络重组的关键阶段。8-12岁儿童的工作记忆容量从平均3.5个组块提升至7个组块,恰好与编程语言的基础逻辑复杂度(如变量、函数、流程控制)相匹配。伦敦大学学院的fMRI研究显示,该年龄段系统学习编程的孩子,前额叶皮层神经突触密度比未学习者高23%,这种结构差异可持续至成年。日本筑波大学的追踪实验则表明,持续两年以上编程学习的儿童,其顶叶与枕叶的跨区域连接强度提升19%,这种空间认知与视觉处理能力的协同发育,在13岁后启动编程学习的群体中并未观察到。

然而,并非所有儿童都遵循相同的发育轨迹。 哈佛大学研究显示,13岁后零基础学编程的群体,其挫败感发生率比8-12岁组高67%。这背后是神经可塑性的生物学规律——青春期后大脑的“可塑性引擎”显著下降,强行让前额叶皮层尚未发育成熟的孩子过早接触C++等抽象语言,会导致默认模式网络与任务积极网络的冲突,可能引发注意力缺陷。正如诺贝尔生理学或医学奖得主大卫·休伯尔所言:“大脑的可塑性不是无限的,但在关键期内,它能为特定能力的发展提供超常规的支持。”

因此,对于绝大多数普通学生群体而言,一二年级学图形化编程、三至四年级学Python编程、后续适时接触C++编程的递进路径,既符合大脑发育的阶段性特征,又能避免“断层式发育”风险。这种路径下,图形化编程通过积木搭建培养序列思维,Python编程通过简洁语法构建逻辑框架,最终C++编程通过工业级语言实现算法深化——三者形成“具象-抽象-符号”的完整思维训练体系。

那么,有没有针对普通学生、完美衔接这一课程体系的C++课程呢?这个还真比较少,或者有但不公开、要收费。毕竟中国这么大,很多事情我不可能都知道。但不管有没有,我还是决定自己全新开发一个,因为金窝银窝不如自己草窝。

在开发路径的选择上,我首先排除了基于OpenGL的方案——虽然可行,但学习时间成本较高。接着尝试了easyX,但发现底层掌控力不足;raylib接口过多,封装过重;SFML虽好,但套壳开发不符合我掌握底层技术的初衷。最终选择工业级SDL2库——功能精简意味着开发自由度大、掌控力强。

经过不断调试优化,最初的C++ Sprites库如今正式命名为C++精灵库。期间开发了专为C++精灵库而生的pxC++编辑器,以及DevC++5.11升级包,让DevC++5.11支持C++精灵库,更好地融入主流中小学生C++教学生态。

现在的C++精灵库完美继承了Python turtle的血脉,并针对不足进行了改进优化。例如,实现了像素级别的洪水填充算法;pencolor命令支持字符串、整数等多种参数类型;新增penshade、pensat、penvalue等方法控制阴影、饱和度、明度;penhsv方法直接设定色调、饱和度、明度;penalpha方法调整透明度;还加入了贝塞尔曲线、样条曲线等艺术化绘图功能,让美术生也能轻松创作艺术图形。

从本质上看,C++精灵库是logo计算机语言教育理念在C++世界的延伸。它借鉴了Python turtle的简洁API,并针对教育场景优化,让学生能在强大、接近工业标准的语言环境中体验“海龟作图”的乐趣与智慧。Python turtle与C++精灵库如同亲兄弟,无论先学哪个,再接触另一个都会有“似曾相识燕归来”的感觉——这正是我所说的“双倍赋能”。

当我把它们的外观也设计得一样时,请不要惊讶!更重要的是,由于C++精灵库基于SDL2库开发,还能完美融入SDL2的命令进行更深入的编程学习。想象一下SDL2库在各行各业的应用场景吧——C++精灵库赋予学生的,是其他类C++ turtle库无法比拟的工业级编程视野与实践能力。