在过去十年里,如果有人正在为初学者寻找一种编程语言的话,我的标准建议是 Python。但是现在,我的这个想法已经发生了变化。

当然,Python 依然是一门非常好的编程语言。它让你集中精力解决问题,而不是关注架构之类的东西 - 那些有经验的开发者,似乎已经忘记或背弃了编程学习的初衷 - 思维模式的重要性。Python 这门语言将自己很好地融入了背景之中,我们不用过多地解释其功能特性及编程方法,我们只需专注于如何生成一个音符,如何计算所在跑道的运动轨迹,或者,为扑克牌或者掷骰子游戏编写一个自动玩家脚本。

然后直到有一天,一名学生一脸无辜地问道:“如果我们不想通过命令行运行这个扑克牌模拟器,我应该怎样做才能将其跑在一个窗体中呢?”

这是一个难以解释的棘手问题,涉及很多各种各样的 Python 图形化开发工具包(GUI toolkits)。事实上,Guido (Python 之父 )每隔几年就会面临同样的问题,每次他都需要重新评估一下 TkInter 是否适合 IDLE - Python 自带的 IDE。

一周之后,另一个问题出现:“怎样才能编写一个具有图形化界面的简单游戏呢?”

好吧,是该深入研究一下这个主题的时候了。Pyglet 看起来很有希望,只是它从2012年起就没有更新过了。还有一些更专业的图形化库,如 SplatGL,但是它太新了,应用案例也太少。PyGame 似乎非常流行,甚至还有一本书和它配套。好吧,我们就从学习 PyGame 开始入手吧。

一个月后,更多问题显现:“我怎样才能把这个我给我朋友编写的游戏展现给他呢?或者说,有没有一种办法,可以将这个游戏装在我的手机上,这样的话,我就可以直接将其展现给学校的朋友们,而且他们根本无需安装?”

呃...

所有这些问题已经让我慢慢放弃了把 Python 作为教学首选语言的想法。尽管只能输出单色文本的命令行终端算法脚本依然非常重要,但是你真的需要区分什么是必要的以及什么是人们真正想要的。是的,你可以找到一些附加的程序包,但是你能确定它们真的经得起真实项目的考验吗?或者,这些程序包明天还会继续得到支持吗?

非桌面技术平台的兴起进一步加剧了这种复杂性,对此,我表示极大的同情。我学习 Erlang 语言的目的就在于,希望远离 C 和 C++,以使我能够在一个更高的层次上思考。我已经很好地证明了这一点 - 我现在可以将这种纯函数编程风格娴熟地应用在游戏开发领域。但不幸的是,iPhone 冒了出来,在这个平台,Erlang 根本不是一个合理选项。

考虑到这些因素,我现在首推的教学语言就是 JavaScript。我知道,我知道,它的确非常古怪。但从整体来看,JavaScript 是一门优雅而且现代的编程语言。更重要的是,它恰好位于随处可见的跨平台开发工具之上 - 无论是布局、版式还是渲染。想要显示用户界面元素、图片、或者文本吗?可以直接使用 HTML。想要做一些与图形或者动画相关的事情吗?那就使用 canvas 吧。

我期待着一些对这种思维模式转变的批评和建议,至少在一定程度上,这将有助于人们选择适宜的编程语言。我希望你们的批评和意见不应该涉及 JavaScript 语言的缺点,因为我的重要参考依据不是语言特性、类型系统,或者语法,我的重点在于这种语言是否得到了现代 Web 浏览器的原生支持。


作者:James Hague,程序员,视频游戏开发公司 Volition 首席设计师。

原文:Retiring Python as a Teaching Language

感谢: Qingniu 帮助审阅并完成校对。