时光回溯到2010年。在此之前,我用Visual Basic开发3D小游戏,玩得不亦乐乎。当时我自认为,Basic已经是相当简单的计算机语言了。但我不禁思考:是否存在一种比Basic更适合、专用于少儿的计算机语言呢?
带着这份执着,我在网络上不断寻觅。果然,我邂逅了Scratch 1.4版本。从此,我爱上了这只来自美国麻省理工的“小猫咪”。这一契机促成了我在2013年创办少儿编程培训班,并在2015年正式将Python纳入教学体系。到了2018年,我已经自己编写了较多的少儿Python教学资料。但在实践中,我发现Python自带的turtle模块功能过于单薄,无法满足更深层的教学需求。于是,我直接深入底层,打开了turtle.py的源代码文件逐行钻研。从2019年起,我开始基于Python turtle模块二次开发,打造了“Python精灵模块”。这个模块核心设计了一个Sprite类,极大地扩展了海龟的功能,比如实现了像素级别的碰撞检测等。如今,所有人都可以通过简单的pip install sprites命令安装使用它。
近几年,我潜心钻研信息学奥赛(OI)的教学,整日“苦思冥想”如何破解各种教学“难题”。2025年8月,暑假班结束,那段忙碌的日子暂告一段落,我又陷入了沉思:如果C++的入门教学能像Python turtle一样简单直观,那岂不是能给全中国的少年带来巨大的福音?
为此,我遍访GitHub,寻找前人的研究成果。我下载了一些用C或C++开发的类turtle库,也研究了其他方案,比如小熊猫C++内置的C语言海龟作图,还有GoC。为了教学,我甚至专门买了GoC和少儿3D C++编程的教材,准备教小学生。然而,最终我都没有使用它们。这是为什么呢?
先说小熊猫C++,其内置海龟库的作者显然缺乏Python少儿编程的教育经历。我曾联系过作者,建议他将命令修改得像Python turtle一样,但毕竟我不能总去麻烦别人,后来便不再联系。
再看GoC,它的命令设计并未承接Python turtle的理念。为了方便儿童输入字符,它将命令设计为一个或两个字符,如pen.o或pen.oo。虽然这降低了输入门槛,但也导致了命令功能相对单一、不够丰富。GoC主要依托在线使用,其作者至今没有开发出独立的编辑器——以前用离线版还得配合Notepad++,体验并不流畅。更重要的是,GoC更像是一个专门为“信奥赛选拔”而设计的前置课程。网上有人建议一二年级就开始学GoC,这种观点我不敢苟同。
如果教练眼光独到,能在一二年级就识别出极少数的“天才苗子”,尝试提前训练当然可以。但现实是,绝大多数小学生不可能都去专攻信息学奥赛,那毕竟是学霸们的战场,是极少数人的游戏。
对于普通学生而言,少儿编程的学习经历应该是丰富多彩的,而不应过早局限于C++这种强抽象语言。因为学习编程的本质,不在于掌握某种特定的计算机语言,而在于思维能力的培养。
从脑科学与认知心理学的角度来看,儿童的认知发展遵循特定规律。小学低年级阶段,孩子的大脑前额叶皮层——负责规划、控制与抽象逻辑的核心区域——尚未发育成熟。此时若强行引入C++这种抽象程度极高、语法严谨且涉及底层内存管理的语言,往往会造成过高的认知负荷,导致学习挫败感,正如“拔苗助长”,结果往往适得其反。相比之下,图形化编程通过可视化的积木块与即时反馈,完美契合了该阶段儿童偏向具象思维的特点,能有效激活大脑神经网络的连接与发育。大脑需要得到多方面的刺激,如逻辑构建、艺术审美、交互设计等,才能得到全方位的锻炼。与其过早死磕枯燥的代码语法,不如顺应天性,让他们在中低年级先学图形化编程。等到他们年纪稍长,认知能力更加成熟,思维自然“开窍”了,再学C++也不迟。
那么,问题来了:面对绝大多数普通学生,他们一二年级学图形化编程,三或四年级学Python编程,到了一定阶段再学C++编程。市面上有没有一套能完美衔接这一课程体系的C++课程呢?这样的资源确实稀缺,或许有,但不公开,或者收费高昂。毕竟中国这么大,我无法知晓所有角落。但不管有没有,我决定自己全新开发一个——毕竟,金窝银窝,不如自己的草窝。
开发的第一步是选择底层库。如果基于OpenGL,当然可行,但学习成本太高,时间投入不划算。我刚开始用EasyX,虽然快速做出了原型库,但发现很多底层逻辑我无法掌控,最终放弃。我也找过Raylib,发现它基于SDL2库,接口过多,封装得太死。我还试过SFML,这确实是个优秀的库,但对我来说封装依然过度,我只需再套一层壳就能用,这对于渴望掌握更多底层技术的我来说,不够“纯粹”。
最后,我选择了工业级的SDL2库。它的接口相对精简,这意味着我有极高的开发自由度和掌控力。现在的C++精灵库正是基于SDL2开发的。最初我将其命名为“C++ Sprites库”,现在正式定名为“C++精灵库”。
为了降低上手门槛,在此期间我不断修改调试,还专门开发了pxC++编辑器——这是专为C++精灵库而生的编辑器。此外,我还用QT5制作了DevC++ 5.11升级包,让经典的DevC++ 5.11也能完美支持C++精灵库,从而更好地融入主流的中小学生C++教学生态。
如今,C++精灵库不仅完美继承了Python turtle的血脉,还针对Python turtle的不足之处进行了改进与优化。例如,我的C++精灵库实现了fill命令,角色只需调用该命令,即可在封闭区域进行洪水填充。而在设定画笔颜色方面,我通过重载pencolor命令,使其不仅能接收字符串参数,还能接收整数或多个整数,极大地提升了灵活性。
为了让审美能力强的学生也能大展拳脚,我为角色画笔设计了设定阴影度的penshade方法、设定饱和度的pensat方法、设定明度的penvalue方法,以及整合Hue, Saturation, Value的penhsv方法和修改透明度的penalpha方法。此外,还新增了贝塞尔曲线与样条曲线绘制方法。这些功能,让那些具备艺术天赋的学生能更方便地创作出极具视觉冲击力的图形作品。
现在的“C++精灵库”,本质上是基于Logo计算机语言教育理念在C++世界的延伸并有所超越。它借鉴了Python turtle简洁优雅的API,并针对教育场景深度优化,让学生在一个更强大、更接近工业标准的语言环境中,依然能体验到“海龟作图”的乐趣与智慧。
我们可以把Python turtle和C++精灵库比作一对“亲兄弟”。无论先学了哪一个,再去学另一个,都会有“似曾相识燕归来”的亲切感。这就叫“双倍赋能”。因为编程世界的底层逻辑本来就是相通的,当我把它们的外观也设计得高度一致时,请不要惊讶!
更有价值的是,由于C++精灵库基于SDL2开发,学生还能无缝衔接SDL2的原生命令,进行更深度的编程探索。试想一下SDL2在游戏开发、模拟仿真等各行各业的广泛应用,C++精灵库给学生带来的赋能,是其他类C++ turtle库无法比拟的。