Mars Studio

一篇不知道多久前翻译的译文--30年之后,QBasic依然是最棒的编程启蒙语言

Word count: 4.2kReading time: 15 mins. min
2024/09/13 Share

译文:《30年之后,QBasic依然是最棒的编程启蒙语言》

前言

现在是北京时间2024年9月13日0点18分,本来是想随便聊聊最近的工作和生活,突然发现drafts目录里有一篇存货,仔细一看原来是不知道什么时候翻译的一篇英文博客。仔细回忆了一下,应该是某个技术自媒体的网友说可以尝试翻译一下投稿,过审了会有稿费。当然,既然是在自己的博客出现,显然是没有过审,看来自己的翻译能力还有待提高,请读者海涵。

译文

原文链接:http://www.nicolasbize.com/blog/30-years-later-qbasic-is-still-the-best/ translated by Ti

May 5, 2016 by Nicolas Bize

我的大儿子Noah三个月前刚满7岁。在他这个年龄,让他和家人们玩两个小时的《我的世界》也能让他激动得心跳加速。除了《我的世界》之外,他最爱的游戏还有《超级马里奥制造》。看到孩子玩这款游戏也常让我想起自己在这个年龄时的样子,真是令人激动啊。大约5个月之前,我远离家人和朋友去参加一年一度的ludum dare[1]挑战。和往常一样,我会远离朋友和家人,甚至回到原始的穴居人状态,历时48小时不眠不休地从零开发一款游戏(文章末尾提供了链接,欢迎体验)。当我自豪地向我爱人展示我的“史诗级AAA大作”时,Noah也对编程世界产生了兴趣。于是我向这个不到7岁的孩子简单演示了这些简单的英文单词是如何构建起一个复杂游戏的。从那天起,Noah就开始反复地求我教他如何制作属于他自己的电子游戏。从那天开始,在之后5个月的时间里,我不断地寻找儿童编程语言和IDE的圣杯,渴望着能够将孩子的这种兴趣的火花,变成一段难忘的经历……

为了达成这个目标,我把目光延伸到了无穷无尽的技术社区。在技术论坛和社区里,技术爱好者们向我提出了不少建议,我也尝试了无数种“儿童编程语言”,例如:SmallBasic,Pico-8,Smalltalk,Scratch等等。我甚至还求助了“万能”的StackOverflow,却都一无所获。5个月之后,我寻找儿童编程语言圣杯的愿望无疾而终,我被迫接受一个非常悲观的事实:30年过去了,QBasic仍然是最适合于编程启蒙的语言,且没有之一。

“天呐,请别教他GOTO!”

1
2
10 PRINT “OH NO, WHAT ARE YOU DOING?!!!”
20 GOTO 10

是的,QBasic确实是一门相当糟糕的过程式编程语言。它将被广泛认为不好的语言特性介绍给所有学习这门语言的人,包括隐式声明语法,不区分大小写,使用non-zero-based[2]计数等等。学习编程,最好的做法是从一开始就养成良好的习惯,而非多年之后再来纠正那些不良实践。按照这个逻辑,可能应该从我最爱的Ruby语言开始学习编程。然而,即便QBasic有许多在现在看来不是很恰当的语言特性,但QBasic具备的这些特性,都遵循着一个非常明确的设计目标:保持语言的简单性和易用性,而其他语言常常为了保证灵活性、一定的复杂度和逻辑性抛弃了这两个目标。

我在Noah的11’’ HP Stream上安装了QBasic,这个过程中还不得不使用了一些DosBox的破解手段。接着Noah双击图标,进入了IDE的介绍界面,这勾起了我很多回忆:

img

接下来,我向Noah介绍了每一位编程初学者的“神圣的仪式“:开发一个向这个圈子里其他同伴问好的程序。他慢慢地摸索着每一个按键,用右手手指小心翼翼地敲出了一串字符:PRINT "hello world"

他按下了F5键,当他看到自己的代码被编译、渲染到一片漆黑的屏幕上时,Noah显得非常惊喜。他欢笑着给了他老爹一个high-five,然后赶紧把电脑中刚刚敲下的代码抄录到了自己的笔记本上,为了防止自己忘记。

img

我们继续学习了其他指令:CLS, COLOR, PLAY, INPUTIF。全程无需任何多余的解释,没有任何复杂度,没有生涩的操作符,没有抽象概念,没有必须仔细阅读的文档和手册,没有object/class/method等高级概念,不用安装任何开发框架,IDE中也没有大片的菜单和按钮,也没有特殊的单词和括号。一切仅仅是格式简单的纯代码。

不到1个小时,Noah就独立地写出了一个程序——一个交互式的,非常微妙的小程序,这个程序让你明白了计算机对你作为一个有情感的人类个体的感受。

img

随后他立马邀请来他最好的朋友Christian,并把程序运行给他看,极其自豪。

img

Noah甚至还给好朋友简单地介绍了这个程序的是如何运行的,以及这些代码的含义!

img

在这一个小时中,我这年龄才7岁的儿子不仅学会了写第一个纯文本交互游戏,还体验了创造的乐趣和激动,编译并运行了他那个小程序。更值得表演的是,他还将全部的学习成果记录在了笔记本上,这个习惯非常不错:

img

我很开心的是,今天Noah终于体会到了他爸爸一直在说的“我做着全世界最棒的工作”。而我唯一感到遗憾的是认识到了一个悲观的现实,经过了30多年,我们仍然没有创造出对于儿童编程更适合的编程语言:QBasic只有非常有限的关键字(全部的帮助文档只需一个F1屏,并且还能附上简单的示例),没有任何让程序员分心的可视化组件,具有非常紧凑的开发环境,它能尽可能早地报错,使用简单的一键式编译和运行。这么多年来,我们创造出了更稳定、更复杂的语言/框架/IDE。诚然,对于现实真正的应用开发而言,足够的稳定性和复杂度是必须的,但我们还是没能创造出比QBasic更简单、更容易让初学者感受到编程的快乐的语言。而且在“现代化”的软件生态和环境中,让新手用现代计算机(Mac/PC/Linux)去运行QBasic也变得让人感到恐惧,放在当年,只需要将一个3.5英寸的磁盘插入硬盘驱动即可······

不论如何,今天值得庆祝的是,又有一位新朋友发现了编程的快乐与美丽!欢呼~

(按照文章开头的约定,欢迎体验我的AAA大作,而我,就等着EA来向我够买版权了)

译者注:

[1] Ludam Dare:Ludam Dare是一个世界级的在线、快速游戏开发挑战活动。要求参与者利用一个周末的时间,基于赛前社区票选出的主题,从零开始制作一款游戏。

[2] Non-zero-based:Zero-based是一种从0开始的计数方法,相反Non-zero-based计数法是从非零数开始计数,例如从1开始。严格来讲从0开始或从1开始计数并没有对和错之分,但在计算机领域尤其是在编程语言领域,从0开始计数是一个比较常见的惯例,大部分具有一定影响力的编程语言也是这么设计的。

CATALOG
  1. 1. 译文:《30年之后,QBasic依然是最棒的编程启蒙语言》
    1. 1.1. 前言
    2. 1.2. 译文