“能不能让 i 和 j 站到数组上面去?”
上两个月,一位教了五年少儿编程的老师找到我们。
他说起前几天的一堂课:给一群五年级的孩子讲冒泡排序。黑板上画满了格子,他拿着两支不同颜色的粉笔,一会儿指这个数,一会儿指那个数,嘴里念叨着”i 等于 0,j 等于 0,比较第一个和第二个,交换……”
讲了二十分钟,他回头问:”听懂了吗?”
底下一片沉默。有个男孩小声说:”老师,i 和 j 到底在哪儿啊?”
他跟我们说,那一刻他意识到,代码在电脑里运行的过程,对孩子来说是完全看不见的。他们只能看到最终输出的结果,中间发生了什么,全靠想象。
而想象力再好的孩子,面对嵌套循环和数组下标,也会一头雾水。
“我找了几个工具,但都不太行”
他给我们发了两个网站链接,都是代码可视化工具,希望我们参考一下。
我们点进去看了看,确实能可视化代码执行过程。但问题也很明显:
界面看起来像上个世纪的产品,用他的话说,”孩子们第一反应是’好丑’”
C++ 的 STL 容器显示不出来,vector 里面装了什么只能靠猜
稍微复杂一点的代码就跑不了,各种限制
他说:”我需要的很简单——打开就能用、界面够清爽、功能够强大,和我们的系统集成在一起。现在这些工具,总是差点意思。”
所以我们决定自己做一个
好学好教平台的代码可视化功能,就是在这样的需求下诞生的。
目标很简单:让老师讲得轻松,让学生看得明白。
数组上的”小箭头”,解决了 80% 的教学难题
现在讲冒泡排序,老师再也不用在黑板上画格子了。
代码跑起来,数组自动显示在屏幕上。每一步执行,i 和 j 两个小游标就乖乖地待在对应的位置上,一个红色一个蓝色,清清楚楚。
孩子们终于能”看见” i 和 j 了。
那位老师后来告诉我们,有个女孩突然喊出来:”哦!i 是外面那个大循环,j 是里面那个小循环!”
“那一刻我觉得,这个功能你们做对了。”
讲二分查找的时候更直观——left、right、mid 三个游标在数组上移动,每一步往哪边收缩,一目了然。以前要讲半节课的内容,现在十分钟就能让学生理解。
C++ 的 STL,终于能看见里面装了什么
教 C++ 的老师应该都有这个痛点:vector、stack、queue 这些容器,调试的时候只能 cout 一个个打印出来看。
现在不用了。
代码执行的每一步,容器里有几个元素、分别是什么值、刚刚 push 了什么、pop 了什么,全都可视化展示。
教栈的时候,学生能看到元素一个个”压进去”又”弹出来”。教队列的时候,能看到”先进先出”到底是怎么回事。
抽象的数据结构,变成了看得见的动画。
指针和内存?也能看懂了
C++ 最让初学者头疼的就是指针。”指针指向一个地址”——这句话说出来,孩子们就开始神游了。
现在,指针变量旁边会画一条线,连到它指向的内存位置。new 出来的堆内存、delete 之后的释放,都能直观看到。
有个学生跟老师说:”原来指针就是一根线啊,我还以为多复杂呢。”
我们做了什么,没做什么
说实话,代码可视化这个领域已经有不少工具了。我们没有想要”革命性创新”,只是想把该做好的事情做好:
做了的事情:
- 界面重新设计,看起来清爽现代
- C++ STL 容器的完整支持
- 数组/容器的游标可视化
- 内存分配和指针的可视化
- 几乎没有代码限制,正常的教学代码都能跑
没做的事情:
- 没有支持 Java、JavaScript 等语言。少儿编程主要就是 Python 和 C++,Scratch 不需要可视化,所以我们聚焦在这两门语言上,把它们做到最好。
- 没有做花哨的动画效果。可视化的目的是帮助理解,不是炫技。
写给少儿编程老师
如果你也在教 Python 或 C++,如果你也曾经为”怎么让学生看懂代码执行过程”而头疼,可以来试试好学好教的代码可视化功能。
不需要安装任何软件,打开浏览器就能用。
下次讲排序算法的时候,让 i 和 j 自己”站”到数组上去吧。
👉 好学好教少儿编程教学平台:https://www.cncoding.cn/
