对学习的理解必须是缘起性的。这就是说,它必须追溯到知识的缘起。一个人可以学到的东西,他学习的方法,取决于他现有的思维模型。那他又是怎么获取这些思维模型的呢?如此说来,所谓“学习的法则”,就是新的知识结构如何从现有的知识结构中生长出来,并在这个过程中构建逻辑性和情感联系。 – Seymour Papert《Mindstorms》

编程学习

使用有视觉反馈的项目来学习编程是比较受欢迎的做法。初学者一开始对程序的执行细节和计算机科学或编程语言理论通常兴趣不大,强迫他们从知识的细枝末节开始恐怕不是什么好主意。让他们real playing通常是好的起步(Alan Kay的建议)。

我赞同OnlinePythonTutor项目作者Philip Guo教授在为什么Python对于基础编程课程中的初学者来说是一门很棒的语言(目前已经由CodeLab Mindstorms翻译)开头提到的:

我坚信大多数入门学习者根本不关心计算机科学或编程语言理论,他们只是想让计算机简单运行一下他们的代码,而不必大费周章写一堆样板代码。需要编写的代码越少,可能遇到的bug和错误就越少; 而遇到的bug和错误越少,他们就越不容易在入门之初因为沮丧而放弃编程。

Play

在这个意义上,对于入门Python,Play是个不错的项目,它宣传自己是:

使用Python编写游戏和图形项目的最简单方法

Python Play是初学者入门图形编程的绝佳选择。它被设计为具有与MIT Scratch相似的命令和简易性,并且与Pygame,Arcade或Pygame Zero等项目不同,因为它不需要一堆样板代码,且具有易于理解的命令(像易于阅读的英文)和直观的API。

Play不仅适合于入门图形编程,对于入门Python这门语言也是很合适的。

为什么要使用Python Play?

该项目的目标是在编程的最初几分钟内给予那些从未编程过的人积极的直观反馈。

许多现有的编程语言和图形库给新手程序员带来了不必要的困难: 起步困难、语言混乱、程序流程混乱、后向引用(未解释的概念)。最初的不愉快经历很可能让人们远离编程,我们希望尽可能地防止这种结果。

Python Play的灵感来自麻省理工学院的Scratch,它帮助数百万儿童和成人入门编程,并帮助他们创建和分享对于个人有意义的计算项目。Python Play的主要设计师专业地使用了一段时间Scratch。但我们发现,对于一些学习者来说,Scratch虽然具有图形块和丰富多彩的界面 ,但并不像“真正的编程”。为了帮助那些希望使用主流文本编程语言学习者,同时消除这些语言中图形编程的困难,我们制作了Python Play。

Python Play的设计原则包括:

  • 没有样板代码 - 每行代码都应该做一些有意义且易于理解的事情。我们希望学习者不会困惑于“为什么我们必须包含这行代码?”。

  • 命令尽可能立即产生视觉效果。例如,如果程序员键入new_image命令,则精灵应立即显示在屏幕上。他们不应该理解初始化精灵和绘制精灵之间的无形区别。

  • 代码行应该很容易复制和粘贴。

  • 命令值应具有描述性标签,使其尽可能清楚地表示值的含义。而不是play.new_image(‘character.png’, 50, 100),play.new_image(image=‘character.png’, x=50, y=100)。

  • 尽可能使用普通英语。尝试使用更容易让年轻人输入和拼写的短名称。使错误尽可能清晰和有建设性。许多命令和名称都是从Scratch借来的,Scratch的设计师花了数十年的时间与孩子们一起工作并观察他们对哪些语言有意义。

Python Play也设计了一个自定义的Repl.it IDE(即将推出),它可以显着降低编程的可用性问题(安装语言、使用文本编辑器、使用终端、运行程序、显示哪些命令可用 等等)。

虽然Python和Python Play的学习曲线对于新手依然不够理想,但我们仍然认为它为新手开始使用图形编程提供了一种很好的起步方式。

从Scratch过渡到Python

图形化编程(Scratch)过渡Python,是国内少儿编程教育中,备受关注的一个问题。随便挑一家国内做少儿编程的公司,看看他们从图形化过渡到代码的编程体验就知道大家做得有多糟糕,而且糟糕得千篇一律。

尽管我不认为图形化编程(Scratch)过渡Python这种过渡是必要的,但我也不反对,我的看法在使用Python拓展Scratch的能力做过表述:

事实上,我不认为这种过渡是必须的。当然我也并不反对从图形界面过渡到代码。如果这种过渡是必要的,我希望它们是渐进的,而不是割裂的,否则就不叫过渡了。初学者熟悉scratch,也喜欢它,我知道大多数使用scratch的孩子,对它的好感大都胜过文本语言。你不必抛弃scratch,如果你需要一些更强大的功能,使用Python去扩展它,这个过程应该很愉快,你写了很少的Python代码,立马就能应用到你喜欢的Scratch项目上,你看到你逐渐能做更多有趣的事,你感到充满乐趣,所学的新知识,立马应用在你感兴趣的项目里。

以上观点我们通过CodeLab Adapter已经将其践行:我们打通了Scratch3.0和Python,使其两者能彼此增强,而不是割裂式的切换或者只是做个语法翻译。

我们将play也视为图形化编程(Scratch)过渡Python这个问题下一个有趣的套索。

官方示例

最后来看一下官方示例,结束本文:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# pip install replit-play
import play

cat = play.new_text('=^.^=', font_size=70)

@play.repeat_forever
async def move_cat():
    cat.x = play.random_number(-200, 200)
    cat.y = play.random_number(-200, 200)
    cat.color = play.random_color()
    
    cat.show()

    await play.timer(seconds=0.4)

    cat.hide()

    await play.timer(seconds=0.4)

@cat.when_clicked
def win_function():
    cat.show()
    cat.words = 'You won!'

play.start_program()

参考