非 Java、C、Python,我使用的第一门计算机语言是它!

640?wx_fmt=gif

作为古老的编程语言之一——BASIC,它不仅开启了计算机领域全方位创意探索的大门,更为现在的科技巨头微软、苹果公司立下汗马之劳,在五十多年的发展过程中,它都经历了那些鲜为人知的故事?如今的它又面临怎样的处境?

了解如何编程对你很有好处,但是很可惜很多人都不愿意学。

多年来,学习编程一直高度受欢迎。它带来了很多教育创新,比如像 Hour of Code(由Code.org提供的编程教学网站)一样润物细无声,像 Code Year(由 Codecademy 带头创立)一样雄心勃勃。

就连美国总统奥巴马也给予了重视。2013 年 12 月,他公开了一段 YouTube 视频,鼓励年轻人学习编程,并宣称“学习这些技术不仅对你的未来很重要,而且对我们国家的未来也很重要。”

我认为“每个人都应该学编程”的运动值得称赞。然而它也引发了我的沉思,甚至是忧郁。很久以前,了解如何使用计算机实际上等同于知道如何写程序,而这一切都要归功于一门名叫 BASIC 的编程语言。


640?wx_fmt=png

BASIC 的诞生


BASIC 语言是由新罕布什尔州汉诺威市达特茅斯学院的 John G. Kemeny 和 Thomas E. Kurtz 共同创建的,现在距离 BASIC 首次成功地在达特茅斯学院通用电气生产的计算机系统上运行程序已经五十多年了。确切地说,那是1964 年 5 月 1 日。

640?wx_fmt=jpeg

BASIC 创建的早期,创始人 John Kemeny(左)和 Thomas Kurtz(中)正在与达特茅斯的一名学生一起检查程序(图片来源:Adrian N. Bouchard /达特茅斯大学

这两位数学教授深信编程的知识在未来几年必不可少,而且他们还设计了这门语言——全名为“初学者通用符号指令代码”(Beginner’s All-Purpose Symbolic Instruction Code,简称 BASIC),希望所有人可以通过该语言学习编程。他们的这一愿望实现了:首先是达特茅斯,然后是其他学校。

在 20 世纪 70 年代和 80 年代初期,BASIC 为家用电脑的普及做出了很多贡献。特别是一家名叫微软的小公司出品了该语言的多个版本。我也是在那个时候开始接触编程语言,当时我在上高中,我的编程熟练程度超过了英语写作,因为编程对我来说更重要。(我的生日恰巧在 BASIC 诞生前一个月,也许是这个原因我感觉它格外亲近。) 

BASIC 并非旨在改变世界。创始人 Kurtz(Kemeny 于 1992 年逝世)说:“我们只想到了达特茅斯。我们需要一种语言来‘教’所有的学生和教师编程,让他们无需参加课程就可以学习编程。”

640?wx_fmt=png

一个 BASIC 的标志出现在 20 世纪 80 年代中期俄罗斯学校的计算机实验室图片来源:维基百科

他们的智慧结晶迅速成为了世界各地人民学习计算机编程的标准方式,并且一直持续了很多年。但是,如果仅仅将这门语言的发明视作计算机语言史上的一个重要时刻,那便大大低估了它的重要性。

在 20 世纪 60 年代中期,使用计算机就像通过邮件下棋一样:你需要使用打孔机在卡片上输入程序,把它们交给训练有素的操作员,然后需要一直等到第二天,才能等到结果的输出。BASIC 及其运行平台——达特茅斯时间共享系统加快了整个过程并揭开了计算机神秘的面纱。当你需要计算机处理某个操作时,只需输入单词和数学语句,然后计算机马上就可以完成。


640?wx_fmt=png

“我们只想到了达特茅斯。”


如今,我们希望计算机(和手机、平板电脑以及一系列其他智能设备)能够快速响应我们的指令和请求。从很多方面看来,现在的即时响应始于 Kemeny 和 Kurtz 的创造发明。此外,他们的成果早在 20 世纪 60 年代先驱者道格拉斯·恩格尔巴特(Douglas Engelbart)做出同等重要的突破之前就公布于众了。道格拉斯·恩格尔巴特发明的鼠标和其他概念仍然出现在我们现代用户的界面中。

你可能会认为,一种为了帮助所有人学习计算机知识而创建的编程语言无疑会受到大众的爱戴。但是你错了。BASIC 总会受到一些严肃计算机科学领域的批评,他们指责它养成了大家的坏毛病。甚至它的创始人都因为在 20 世纪 70 年代和 80 年代人们对他们初衷的广泛误解而感到不满。

最终,BASIC 走了,淡出了家庭和学校中计算机的使用。没有人密谋干掉 BASIC,没有人能解释为什么它逐渐淡出了。但是我们中的一些人非常想念它。

谈到技术,我不觉得自己像个脾气暴躁的老头。我总是相信最美好的时光就在眼前。但是我不介意说:如果当初所有使用个人电脑的人都学习 BASIC 的话,这个世界会更加美好。


640?wx_fmt=png

BASIC 的开始


迟早会有人想出一种面向初学者的编程语言,这是不可避免的。但 BASIC 成为了这种语言的主要原因是因为它诞生于一所拥有前瞻性数学课程的文理学院。而达特茅斯之所以能够创立 BASIC 主要是因为数学系主任 John Kemeny 的愿景。

1926 年 Kemeny 出生在布达佩斯的一个犹太人家庭中,1940 年他与家人为了逃离纳粹一起来到了美国。他就读于普林斯顿大学,在那里他花了一年的时间为曼哈顿计划做出贡献,并受到了先驱数学家和物理学家约翰·冯·诺伊曼的计算机讲座的启发。

640?wx_fmt=png

JohnKemeny 在达特茅斯学院的学生讲授 BASIC 课程

Kemeny 曾担任阿尔伯特爱因斯坦的数学助理,并于 1953 年开始担任达特茅斯的教授,两年后年仅 29 岁的他被任命为数学系主任。他因创造性的数学教学方法而闻名于世:1959 年阿尔弗雷德·斯隆基金会向学校提供了 50 万美元的补助金,帮助他们建新的教学楼,时代杂志报道了这则新闻,还说这主要归功于 Kemeny 的声誉。 

创建 BASIC 的想法源自“Kemeny 的一个普通的信念,即人文科学教育很重要,而且应该包含一些严肃且重要的数学教育,数学没有脱离人文科学教育的总体目标。”现任达特茅斯数学系主任 Dan Rockmore 说,他是一部关于 BASIC 诞生新纪录片的制片人之一。 


640?wx_fmt=png

“我们的愿景是校园里的每个学生都可以使用电脑。”


在 20 世纪 60 年代早期,普通公民甚至是那些常春藤联盟学校计算中心的学生都从未接触过计算机。Rockmore 说,这些机器被“锁在门后,只有一些小伙子(偶尔也会有女生)穿着白大褂进去使用”。

Kemeny 相信这些电子大脑将在日常生活中扮演越来越重要的角色,而且应该向每个达特茅斯学院的人做介绍。“我们的愿景是校园里的每个学生都可以使用计算机,而且所有教职工都可以在适当的时候在教室里使用计算机,”他在 1991 年的视频采访中说,“仅此而已。”

当然,达特茅斯学院无法为每个学生和教师提供计算机:当时的计算机是一种昂贵的共享资源,通常一次只能执行一项任务。这就是为什么一般你都需要将你的程序写到穿孔卡上,然后轮番等候。

TomKurtz 于 1956 年加入了达特茅斯学院的数学系,他提出使用一种相对较新的名为“分时共享”(time-sharing)的概念。多人分摊一个系统的处理能力,从而实现同时为多人服务。后来就有了达特茅斯时间共享系统(Dartmouth Time-Sharing System,简称 DTTS),坐在终端前的用户能够编写程序并立即运行。 

640?wx_fmt=png

达特茅斯分时系统的示意图,来自1964年10月达特茅斯学院的手册

“如果你想让一个学生对计算感兴趣,那么你需要一些具有即时性的东西,”Rockmore 说,“你不想在知道自己做的是否正确之前,就将 10 行的程序送到计算机中心。” 

但那是什么样的程序呢?过去,Kemeny 和 Kurtz 在为初学者创建计算机语言方面做了两次不成功的尝试:达特茅斯简化代码(Dartmouth Simplified Code,简称Darsimco)和达特茅斯超简化编程实验(Dartmouth Oversimplified Programming Experiment,简称DOPE)。但这次他们考虑修改现有的语言。 

640?wx_fmt=png

Tom Kurtz(站着的那位)正在与DTSS的合作程序员Michael Busch一起工作,后面是GE-225大型机 图片来源:Adrian N. Bouchard /达特茅斯大学 

“我简单地尝试开发了一些 Fortran 和 ALGOL 的简化子集,但很快就发现这样做行不通,”Kurtz 说。即使是最简单的任务放到 Fortran 中也很棘手,因为它有一个“几乎不可能记得住的循环的惯用方法:'DO 100,I = 1,10,2'。这究竟是'1,10,2'还是'1,2,10',还有行号后面的逗号是必须的吗?”

达特茅斯学院的学生、DTSS 软件的合伙人 John McGeachie 说:“Fortran 和 ALGOL 过于复杂,凡是需要每日反复训练的方案都无法满足我们的需要。因为它无法得到广泛的普及。”

所以 Kemeny 和 Kurtz 决定直接创建一些直截了当的东西,根本不需要记住任何内容就可以使用的东西。“我们希望这种语言的语法由常用的单词组成,而且还可以使用或多或少代表了表面含义的词,”Kurtz 说,“这只是基本的衍生,使用 HELLO 和 GOODBYE 代替 LOGON 和 LOGOFF 不是更简单吗?”


640?wx_fmt=png

“如果你编写了一个非常简单的程序,那么你可以在一秒后得到答案。”


BASIC 主要是 Kemeny 的想法,他自己写了第一版的 BASIC。从 1963 年 9 月开始,他和 Kurtz 开始共同努力创造了这门语言并在 DTSS 上运行。他们领导了一支由十几名本科生组成的团队,他们都是仍在学习计算机的男生。(当时达特茅斯学院是一家男校,直到 1972 年在 Kemeny 担任校长期间才改成了男女同校。Kemeny 于 1970-1981 年间担任该职位。)

McGeachie 回忆说:“那时我们经常通宵工作,然后回去睡觉。Kemeny 和我们一块工作,然后去给本科生上数学课。” 

640?wx_fmt=png

Tom Kurtz 和 John Kemeny 检查了 GE-225 大型计算机的手册,该手册为达特茅斯分时系统的第一个版本提供了动力  图片来源:Adrian N. Bouchard /达特茅斯大学

美国国家科学基金会提供的 30 万美元赠款资助了这项工作,当时他们需要两台功能强大的计算机,这两台计算机都来自通用电气。其中一台 GE-225 大型机(很快被更快的 GE-235 取代)负责浮点数学的繁重工作,而较小的 Datanet-30 负责与电传打字机通信(其实就是美化的打字机),学生们可以通过电传打字机编程。

“我们没有受到太多限制,”Kurtz 说,“我们有 16K 的 20 位字可以使用。”虽然按照今天标准,这点内存只能算是舍入误差,但在当时这些内存足够编写一个 BASIC 的功能。多年以后,当其他人将 BASIC 移植到个人电脑上时,有时不得不将其塞进 3K 的 8 位内存中,结果产生了一些缩减内存后笨拙的实现,恐怕 Kemeny 和 Kurtz 都不认同。 

640?wx_fmt=gif

早期达特茅斯 BASIC 的程序,在达特茅斯学院的分时系统模拟器上运行简单的数学演算 图片来源:Harry McCracken / 时光杂志

与许多 BASIC 不同,达特茅斯 BASIC 是一个编译器,这意味着它会将你的整个程序一举转化成计算机可以理解的机器代码,而不是在每次运行程序时逐行处理。它可以快速地完成这项任务,尤其是在 20 世纪 60 年代计算的宽松标准下:“如果你写了一个非常简单的程序,那么你可以在一秒钟内得到答案,”McGeachie 说,“但是输出结果却需要很长时间,因为电传打字机每秒只能输出 10 个字符。”

1964 年 5 月 1 日凌晨 4 点实际上是达特茅斯学院的历史上两个关键的时刻。两三个简单的 BASIC 程序可以同时运行,这证明了 BASIC 可以正常工作,而且达特茅斯时间共享系统能够同时处理多个用户。

1964 年 6 月,在达特茅斯学院的学生中间,BASIC 和达特茅斯时间共享系统得到了普及,最初只有 11 台电传打字机。第一版的 BASIC 有 14 个命令,所有命令的名称和语法都非常直白浅显:

  • PRINT:通过电传打字机输出文本和数字(稍后在分时终端和个人电脑的屏幕上显示);

  • LET:告诉计算机执行计算并将结果赋给变量,例如LET C =(A * 2.5)+ B;

  • IF和THEN:让程序判断语句是否为真,对于涉及判断的情况该命令至关重要;

  • FOR和NEXT:让程序在循环中运行;

  • GOTO:让程序分支跳到指定的一行;

  • END:达特茅斯BASIC要求通过该命令告诉计算机该程序已经得到了结论。

后来有了 INPUT,BASIC 程序可以通过这个命令接受用户输入的字母数字字符。它不是最初的 14 个命令,直到 1966 年第三版的 BASIC 才加入了该命令。但是有了它以后,人们就可以编写更多交互式的程序了。在 INPUT 出现之前,BASIC 主要用于解决数学问题和进行简单的模拟;在有了它之后,BASIC 几乎可以做任何事情。包括玩游戏,很多人都认为这才是创建该语言的目的。

640?wx_fmt=png

JohnKemeny检查了他的女儿Jennifer在“家用电脑”上写的程序,该“家用电脑”是达特茅斯分时系统的一个终端图片来源:Adrian N. Bouchard /达特茅斯大学

你可以用达特茅斯 BASIC 编写非常复杂的程序。(一本早期的手册称最长的程序可以装满“大约2英尺的电传打字纸。”)但是你也可以在接触这门语言后不久,就尝试通过几行简单的代码让计算机做一些有趣和有用的事情。这才是该语言的目的所在。

对 Kemeny 和 Kurtz 来说,尽可能地让人们自由使用 BASIC 和 DTSS 至关重要。“每个学生都可以进入图书馆,浏览书籍或带一些书回房间。没有人会问他为什么需要这本书,而他不需要得到任何人的许可,”Kemeny 在 1966 年学院新开设的计算机中心手册中写道,“同样,每个学生都可以走进 Kiewit 计算中心,坐在控制台前,使用分时系统。没有人会问他是否正在解决一个严肃的研究问题,或者在做功课,玩足球比赛的游戏,还是给女友写信。”

640?wx_fmt=png

达特茅斯欢乐合唱团的成员通过达特茅斯分时系统与加利福尼亚州的女孩在计算机上约会。图片来源:Adrian N. Bouchard /达特茅斯大学

Kemeny 在 Kiewit 手册中描述的就是个人计算机。只是当时还没有这个词。甚至这个概念在当时也是非常大胆的。

达特茅斯 BASIC 实现了 Kemeny 和 Kurtz 所希望的一切,而且还远不止此。1967 年在一份胜利报告中,他们说,到那个学年结束的时候,将会有两千名达特茅斯学院的学生(自BASIC问世以来第三批新晋学生的80%)通过编写和调试他们自己的程序来学习计算机。许多学生在完成了BASIC的作业后依然在学习编程,BASIC 课程也是该学校数学课程的必修部分。40% 的教职工(不只是数学和科学教师)也使用了该系统。

该报告称:“任何对计算机怀有恐惧之心或认为计算机无用武之地的人,如果试图说服达特茅斯学院的学生,都会遭到白眼。达特茅斯学院的学生更加了解计算机,而且他们根据亲身体验学习计算机。”

640?wx_fmt=png

通用电气宣传册的封面,其中宣传了达特茅斯版的BASIC 图片来源:计算机历史博物馆

达特茅斯通过电话线为其他东部沿海地区的学校提供了 DTSS 的访问,包括哈佛大学和普林斯顿大学,以及一些高中。它还帮助他机构实现了分时系统和 BASIC,而通用电气将 DTSS 和达特茅斯 BASIC 进行了商业化,并出售给商业客户。美国数字设备公司(Digital Equipment Corporation,简称DEC)和惠普等其他计算机公司也推出了自己的 BASIC。

简而言之,达特茅斯在让计算机大众化方面做出的努力取得了巨大成功。Kemeny 在 1991 年接受采访时说,“从性质上来说,在这种影响上我做的很对。但是从数量上来看,我大大低估了它。也就是说,受它影响的课程远比我想象的多,并且影响的程度要大得多。这些都是由于计算机的便利性导致了课程的完全改变。当然,我也低估了计算机教育在全世界的传播范围。”


640?wx_fmt=png

BASIC 受到的抨击


并不是每个人都对通过这种语言将计算机交到每个人手中的做法感到满意。最具说服力和最强烈的反对者是 Edsger Dijkstra(1930-2002),他是一位很有影响力的计算机科学家。“凡是接触过BASIC的学生都无法学习优秀的编程技术,”他在 1975 年的一篇题为“我们如何倾诉可能会伤害到别人的真相?”(http://www.cs.virginia.edu/~evans/cs655/readings/ewd498.html)的论文中抱怨道,“优秀的程序员在精神上遭到了摧残,他们已没有康复的希望。”

640?wx_fmt=png

EdsgerDijkstra,很有影响力的计算机科学家和BASIC评论家,2002年图片来源:维基百科

现在看来,Dijkstra 可能夸大了 BASIC 带来的影响效果。在众多编程语言中 BASIC 不是他唯一的眼中钉:他还吐槽过 FORTRAN(称其为“发育不健全的婴儿”),PL/1(称其为“致命的疾病),以及  COBOL(称其为“刑事犯罪”)。

尽管 Dijkstra 不看好 BASIC,但是无数程序员都开始使用这种语言,并且获得了蓬勃发展的职业生涯。事实上,损坏 BASIC 名声的正是该语言简单易学的特点。

例如,BASIC 提供了 GOTO,你可以通过该命令跳到程序中的任何其他地方,但在实践中这可能引发“意大利面条式代码”的混乱现象。1968 年,Dijkstra 在“GOTO 语句的危害”(http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html)一文中表达了他对该命令的鄙视。思虑周全的BASIC 程序员确实应该编写没有 GOTO 的严谨代码。但是我坚持认为对文科学生来说,从一开始就用严谨的编程技术要求他们,恐怕会让他们对计算机产生畏惧。对他们来说,GOTO 乃天赐之物。


640?wx_fmt=png

“凡是接触过 BASIC 的学生都无法学习优秀的编程技术。”


BASIC 还有其他经典的方面,它可以让你通过行号来组织程序,例如 10 PRINT “HELLO”中的 10,也有人争论说这很多余,并最终被遗弃。但是行号有助于强调计算机程序的顺序,无论使用哪种语言,计算机程序都包含了可以分解成各个步骤的任务。

在“我们如何倾诉可能会伤害到别人的真相?”一文中,Dijkstra 将编程称为“应用数学中最难的一个分支”,并建议没有天分的数学家就不必学习编程了。如果这是他 1975 年的观点,那么他是不会批准 BASIC 的。计算机编程难度非常大,要么把这种工作留给专家,要么向大众普及(就像 BASIC 那样)。你只能二选一。

640?wx_fmt=png

1965年达特茅斯学院的学生在远程计算机中心工作图片来源:Adrian N. Bouchard /达特茅斯大学

今天,面对有人指责 BASIC 不够严肃,通过该语言学习计算机编程是一种危险的方式等的说法,合伙创立者 Kurtz 直言不讳地说:“简直是胡说八道。”

“我愿意承担风险,而且我觉得那些专业人士对 BASIC 的贬低只是有点嫉妒。毕竟,这是我们花费了数年的心血才开发出来的技术,而且经过几个小时的学习就可以编写程序的技术怎么可能完全是白痴呢?”

也许对 Edsger Dijkstra 这样的人来说,BASIC 的存在并不合理。但也没关系,这门语言本来就不适合他们。对于那些新手来说 BASIC 十分合理,他们从学习编程那一刻开始只是想教计算机做一些有用的事情。1975 年当 Dijkstra 指责 BASIC 残害编程思想的时候,学习 BASIC 的人则越来越多。


640?wx_fmt=png

跨入个人电脑时代 


由于 BASIC 可以让不是计算机科学家的普通人也能使用 DTSS,Kemeny、Kurtz 和他们的同伴们的发明可以说是真正形式上的个人计算机。虽然这还不是真正的个人电脑。十年之后,一家名为 MITS 的新墨西哥模型火箭公司推出了 Altair 8800,一款售价 497 美元的个人组装微型计算机(组装好的是621美元),这款微型计算机掀起了个人电脑的革命浪潮。

当时这在所谓的计算机呆子的少数人中间简直是一个爆炸式的新闻,比如保罗·艾伦(微软的联合创始人)当时在波士顿霍尼韦尔担任程序员。

640?wx_fmt=png

1976年MITS推出的Altair 8800,首台运行微软BASIC的微型计算机

当时他在哈佛广场的一家报摊上买了一本 1975 年 1 月的《大众电子》,封面上就是 Altair,他与一位名叫比尔盖茨就读于哈佛二年级的好友一起对此兴奋不已。他们马上想要尝试在 Altair 运行 BASIC,他们俩都在西雅图 Lakeside 学校通过时间共享系统和电传打字机上学习了 BASIC。

实际上,在得知 Altair 之前艾伦就一直在考虑构建自己的 BASIC 的可能性。“没有人曾经试过为微型处理器编写完整的编程语言”,他解释说,“但是当 8080 处理器的芯片问世时,我意识到我们可以为它编写一个程序,而且它的能力足够运行 BASIC。”


640?wx_fmt=png

“我意识到我们可以为它编写一个程序,而且它的能力足够运行 BASIC。”


众所周知,他们在编写 Altair BASIC 的初稿时甚至没有一个可以访问的Altair,所以他们在数字设备 PDP-10 的小型机上运行了一个模拟器。艾伦说:“Monte Davidoff 帮助我和比尔为 Altair 编写了 BASIC,他曾经说编程就像写小说一样。我们学习 BASIC 的时候亦是如此。首先从各个情节开始,了解我们采取的常用方法。然后深入了解各个章节的主要思想,然后编辑再编辑,直到我们勾勒出大致的作品,然后再修复所有的 bug。这是我做过的最难的同时也是最愉快的工作。”

640?wx_fmt=png

新墨西哥州自然历史与科学博物馆展出的保罗·艾伦、比尔·盖茨和MonteDavidoff创建的Altair BASIC的原始纸带副本  图片来源:维基百科 Michael Holley

艾伦和盖茨合伙借着 BASIC 成立了一家公司,最初名为 Micro-Soft(微软的前身)。他们将这种语言授权给了MITS,而MITS以高达500美元的价格出售,如果与 Altair 硬件捆绑购买则可以降到 75 美元。或者你可以通过盗版免费获取,在早期许多微型计算机的主人中间盗版很常见,以至于盖茨写了一封传奇的公开信,哀叹 Micro-Soft 的知识产权盗窃十分猖獗。

将 BASIC 的定价设置的如此之高,然后通过它推动用户购买硬件“是一种适得其反的战略,”负责 MITS 出版的 DavidBunnell 说。MITS 的总裁 Ed Roberts“就是那种小心眼的人。他看不出大局。”

即便如此,可以在微型计算机上使用 BASIC 也是一件大事。“新计算机革命有两个关键,”一篇没有署名的文章宣称(Bunnell 说几乎肯定是他写的这篇文章),而另一个是 1975 年 4 月 MITS 在计算机新闻报道上发布了 Altair BASIC。“一个是廉价的计算机,一个是很容易理解的计算机。有了 Altair 8800 和 Altair BASIC,你可以同时兼顾两者。”

640?wx_fmt=png

RadioShack的TRS-80(1977)是首批采用BASIC作为标配的个人电脑之一

这是事实,但也只是故事的开始。Altair及其最早的竞争对手迎合了那些喜欢拨开关和玩电烙铁的业余爱好者。1977年,新一波的个人电脑推出,面向更广泛的消费者群体,包括苹果的 Apple II,Commodore 的 PET2001 以及Radio Shack 的 TRS-80。让这些计算机成为消费者个人电脑的关键因素是它们加载了 BASIC。 

PET 从一开始就提供了另一个版本的微软 BASIC。苹果和 Radio Shack 在获得微软版本的发售权之前使用的是该语言的基本变体,苹果公司是由联合创始人史蒂夫·沃兹尼亚克本人编写的。在接下来的几年里,几乎所有有名的微型计算机都带有微软 BASIC,包括 Atari 和德州仪器等公司的产品。

640?wx_fmt=png

1981年,保罗艾伦(左)和比尔盖茨,周围是部分运行了他们编写的微软BASIC的计算机

技术专家喜欢谈论杀手级应用程序——即那些非常有用的软件,你甚至会为了运行它们而去购买一台计算机。1979 年问世的 VisiCalc 是第一个这类的程序。但在此之前,微软 BASIC 本身就是个人电脑上的杀手级应用。很多人购买电脑都是为了可以学习编程。

除了微软之外,还有其他微电脑 BASIC。在早期,最著名的是 CBASIC,由一位名叫 Gordon Eubanks 的海军军官编写。他的版本在开发商业程序的人中间特别受欢迎,在当时几乎有一半的程序都是用 BASIC 编写的。

“微软 BASIC 比 CBASIC 更基础,”Eubanks 说,“每台机器上都有 BASIC。如果你有台TRS-80,那么可以打开它编写一个小程序输出‘HELLO’。然后就可以了。我关注的是更为狭窄的领域,即如何开发商业应用程序……但最终的结果是,比尔盖茨做的更好。”

(虽然他可能没有像比尔盖茨那么成功,但是 Eubanks 最终也取得了很大成果,他成为了赛门铁克长期的 CEO,这是一家久经考验的伟大的软件公司。)

Eubanks 提到了有关微软 BASIC 重要性的一个关键原因:无处不在。打开早期的微型计算机(如TRS-80),你立刻就可以看到 BASIC。你可以随意从磁带盒或软盘上加载程序,也可以从头开始编写新程序。这些计算机鼓励用户编程的方式是后来的计算机所没有的。

640?wx_fmt=gif

与达特茅斯 BASIC 和 CBASIC 不同,微软 BASIC是一种解释性语言,这意味着每次运行程序时,它都会将 BASIC 程序的每一行都转换成机器代码。这导致它行为迟钝,尤其是当时大家都没有动画图形等加速的东西。

但这也意味着任何人都可以检查原始程序中是否包含用微软 BASIC 编写的内容,包括通过磁带或软盘上出售的商业软件。你可以从中学习,进行改造,或窃取部分片段用于自己的项目。因此它具有许多开源软件的优点,尽管这个概念当时还没有这个名字。

640?wx_fmt=png

1972年Bob Albrecht的BASIC手册,内容和封面一样可爱古怪

如果在学习 BASIC 的术语时你需要帮助,那么有大量的参考资料,其中包括供你输入和自定义的程序。与语言本身一样,BASIC 的文档记录工作往往也不符合计算机科学的正式标准。

例如,1972 年加利福尼亚州门洛帕克市的 People’s Computer Company 的 Bob Albrecht 写了一篇引人入胜文章,题目为:为什么当我讲 BASIC 的时候,我的电脑更加喜欢我。你无法想象在有关 FORTRAN(以及如今的Objective-C 或 Java)的文档中出现类似的标题。

BASIC 时代最具影响力的一本书不是教科书(至少不是正式的教科书),而是《101个BASIC计算机游戏》,后来改名为《BASIC计算机游戏》,两个版本均由David H. Ahl编辑。

这本书是 Ahl 根据在 DEC PDP-8 系列小型机产品线上担任教育市场经理时的工作经历撰写而成的。大约在 1971 年,他创建了两个 BASIC 版的游戏(原本这两个游戏是用DEC的FOCAL语言编写的):汉谟拉比(Hammurabi,玩家可以通知古老的苏美尔),登月者(Lunar Lander,游戏内容也如其名)。他说:“我从头撰写了这两个游戏是为了展示我们的机器。”

由于这两款游戏的受欢迎程度,他在 EDU(这是由他负责编辑的 DEC 新闻时报)中也加入了 BASIC 游戏。许多游戏都是读者(特别是高中生)贡献的,1973 年 DEC 出版了一本选集《101个BASIC计算机游戏》。

640?wx_fmt=png

David Ahl创建的BASIC游戏选集,DEC出版的原本以及后来为个人电脑重新调整过的版本

很快这本书就进行了第二次印刷,共计售出 1 万余册。Ahl 回忆说:“这本书远胜计算机周边的书,所以人们3本、4本、5本的买,每台计算机一本。”

1974 年在 Ahl 离开 DEC 后不久,他创办了一本名为 Creative Computing 的杂志,其中为 BASIC 保留了大幅空间。之后他获得了发行《101个BASIC计算机游戏》的权利,并更名为《BASIC计算机游戏》。

与 BASIC 语言本身一样,《BASIC计算机游戏》也早于个人电脑的革命,还推动了它的发展。《BASIC计算机游戏》在更新后翻译成了6种语言,并发行了很多续集,成为了第一个销量超过百万的计算机图书。与民歌一样,它的程序也是共享文化遗产的一部分。这些书迅速在大众之间传播,并出现了多个翻版。

当我拿到这本书的时候,那是大约在 1978 年,我的父亲拿回家了一台 TRS-80,我知道里面有游戏。因为它们都根源于电传打字机时代,大多数游戏还没有图形界面。它们是绝对的文字导向,就像有个高尔夫的游戏一样,你可以在挥杆的时候输入 1 到 100 的数字。

640?wx_fmt=png

1982年3月的计算机杂志,一如既往满满的都是BASIC程序

从理论上讲,我不应该觉得这本书非常有价值。毕竟,我可以在家里和学校通过软盘获得为 TRS-80 编写的游戏,并在几秒内加载它们,而不用费力地照着书一点点输入,然后再修复输入过程中由于输入错误而产生的 bug。但是我却乐在其中。我还输入了大量其他程序,这些程序来自 CreativeComputing、80 Microcomputing、SoftSide 以及最主要的以编程为中心的月刊 Compute 等杂志。 

计算机杂志上发表的最佳 BASIC 程序出乎意料的专业,部分原因是因为专业化的壁垒很容易被消除。“当我在 1983 年第一阅读 Compute 的时候,外面卖的软件全都是装在塑料袋里手工制作的东西,附带1-2页的说明。”Gregg Keizer 说,他本人最终成为了该杂志的编辑。

这让学习编程变得更加诱人:当时的我们没有看过太多商业软件,而且觉得“我也可以编程”,却没有尝试过,所以难免有点蠢蠢欲动。


640?wx_fmt=png

“软件是装在塑料袋子里手工制作的东西,附带1-2页说明书。”


(当然,那时也有人用过个人电脑,却没尝试过编程。但是在20世纪70年代末和80年代初期,我高中的计算机实验室的同学都会带着同情的目光看待他们。好似他们是文盲,还表现得很不在乎。)

输入程序是一项智力练习,而不仅仅是生搬硬套的努力,部分原因是因为你常常需要修改这些程序,才能适合你的计算机的微软BASIC版本。随着各家授权的公司为自己的计算机对BASIC进行改编,然后将其放入内存,并即兴创建了机器特有的一些功能(例如图像和声音),这门语言已经分裂成了很多版本。它看起来不怎么像达特茅斯BASIC,最多也只是一种通用语言。

例如,Commodore 64计算机有一个著名的单行 BASIC 程序:

10PRINT CHR $(205.5 + RND(1)); :GOTO 10

该程序会生成一个随机的迷宫似的模式,而且没完没了,直到你按下Ctrl-C。该程序有具有催眠的功效,且很形象,所以2012出现了一篇以它为主的论文,标题为“10 PRINT CHR $(205.5 + RND(1)); :GOTO 10”。但它不能在任何非Commodore计算机上运行,因为它聪明的技术依赖于Commodore 64处理图形的方式。

640?wx_fmt=gif

看到其他人对BASIC的所作所为,Kemeny和Kurtz感到非常失望。1985年,他们出版了一本书《Back to BASIC》,书中哀叹了微软BASIC以及其他微型计算机上创建的变异版本粗制滥造且前后矛盾。其中针对个人电脑上的BASIC一章的命名为“问题出在哪里?”,他们还将这些BASIC称之为“流落街头的BASIC”,一个非常刺耳的绰号。

两个创始人不仅抱怨了 BASIC 的发展情况。他们两个还成立了一家公司,并起名为 True BASIC,该公司出品的版本加了新功能,  同时保留了达特茅斯BASIC的原有愿景。 与微软 BASIC 不同,无论你在什么计算机上运行,True BASIC 都是同一个语言。

“大约在 1983 年的时候,所有微型计算机上 BASIC 的版本都不同”,Kurtz 说,“我们以为在不同的计算机上实现同一个语言是一件好事。但是我们错了。不同的计算机慢慢变得强大起来,而且发展速度非常快,像我们这样的小公司根本跟不上。”


640?wx_fmt=png


“我们都知道结果:各种版本的面向 XYZ 计算机的 BASIC。令人作呕。”


作为一个在流落街头的 BASIC 中长大的人,我很高兴我并不知道《Back to BASIC》的出版。虽然 Kemeny 和 Kurtz  的大部分牢骚对今天的我来说都非常合理,但他们本可以将我当时编写的BASIC 程序作为案例研究,尽管他们对于我输入的一切都不满意,但这是真实发生在他们的语言上的情况。

我为 TRS-80 编写的 BASIC 程序只能在 TRS-80 上运行;后来我得到了一台 Atari 400,我编写的程序只能在 Atari 上运行。与众多微软 BASIC 程序一样,我的程序行为很奇怪,而且没有任何文档记载这种语言的局限性,最重要的是它非常慢,Kemeny 和 Kurtz 也对此非常不满。

我的程序一点都不优雅,除了我和 TRS-80 之外,任何人都理解不了。但是这些程序是我创作的,它们告诉电脑完全按照我的意愿去做。

BASIC 是如此平易近人,你几乎可以毫不费力地一口气做完一些即兴创作的程序。我可能在高中的计算机实验室里写了数百个这样的游戏、工具程序以及笑话给我的同学们玩。大多数都是一次性的,只有一部分被遗忘在了我父母家里的软盘上,其他的都已经消失殆尽了。

640?wx_fmt=gif

SLOT/BAS,我在1980年写的TRS-80游戏

但我很高兴的一个游戏是老虎机的模拟程序,尽管我从来没玩过老虎机,我把它上传到了一个本地在线公告板系统。大约 34 年后,我发现它出现了 Ira Goldklang 大量的收集程序中,该网站是名副其实的 TRS-80 博物馆。

我通过一台 TRS-80 模拟器在我的 MacBook Air 上重新安装了 Ira 保存下来的SLOT/BAS 游戏。仔细阅读我几十年前编写的代码,然后玩玩这个游戏,我有点普鲁斯特的感觉,任何一个沉迷于编程的人都会理解这种感受。

重回学习 BASIC 的时候,我的程序员偶像是一个名叫 Leo Christopherson的人。他是一名初中的数学老师,在一名学生带来了一本 BASIC 编程手册后,他买了一台 TRS-80,他用游戏(比如 Android Nim、Snake Eggs 和 Dancing Demon 等)里的动画和声音效果做了很多精彩的事情。想到他主要在 TRS-80 上完成了这些事情就觉得他非常令人钦佩,因为 TRS-80 只有非常粗糙的图形,而且官方根本不支持音频。(近年来,他还在现代的 Windows 个人电脑和 Mac 创建了一些游戏。)

Christopherson 的技术让 Kemeny 和 Kurtz 感到恐惧。因为他的程序涉及与TRS-80 特定软件和硬件密切相关的编程技术,并且为了超越微软 BASIC 理论上能够提供的速度,他使用了面向计算机 Z-80 微型处理器的机器语言编写了越来越多的代码,这些代码在BASIC程序中显示出来的都是乱码。

“我从来不担心 BASIC 的限制,因为我也可以使用 Z-80 代码,”Christopherson解释道,“真正的局限性是 TRS-80 本身强加的。我曾经花了几个小时绞尽脑汁想如何编写更小的例程来完成各种任务,因为 16K RAM 非常快。只要计算机本身允许,我想做的大多数事情都可以在 BASIC 中实现。”


640?wx_fmt=png

褪去光环


在 Kemeny 和 Kurtz 因为对 BASIC 发展的不满而创建 True BASIC 的同时,该语言的影响力到达了顶峰时期。它不再是学校教初学者编程时默认使用的工具:当我在 20 世纪 80 年代中期上大学时,学校的教学语言是 Pascal,尤其是那些非常重视良好编程习惯的人。(我不好意思告诉你我的 Pascal 课得了多少分,我只能说 Edsger Dijkstra 可以得意洋洋了。)

在个人电脑的基本构成中 BASIC 也不再那么重要。并不是说出现了一种更容易的语言取而代之。只是大家不学习编程也可以与深入理解计算机。

640?wx_fmt=png

Lotus1-2-3,在BASIC淡出个人电脑的过程中起了推波助澜作用的一个应用程序

在某种程度上,这是因为一大波丰富而强大的应用程序出现在了个人电脑上。如果你只想做数学计算,那么 Lotus 1-2-3 这类的电子表格比 BASIC 更容易实现。如果你想处理大量数据,那么 dBASE 这样的数据库可以为你分担。

微软感受到了扑面而来的软件风。艾伦说:“我们巩固了早期在语言方面的统治地位。但是很快大家就发现,文字处理等工具的应用程序会掩盖语言,而我们只需要构建一个文字处理器、数据库和电子表格。所以才有了今天的 Word和其他应用程序。”

640?wx_fmt=png

1982 年 2-3 月个人电脑杂志的首次发行

“当创办个人电脑杂志的时候,我宣称我们不会在杂志的页面上刊登计算机代码,”David Bunnell 说,他于 1981 年创办了该出版物,并与 1982 年创办了微电脑世界,1983 年创办了麦客世界。“代码很难看。我希望它更像是一本消费者杂志。”

苹果公司于 1984 年推出了第一台 Macintosh,上面没有附带 BASIC,现在这对我来说很震惊,尽管当时 Mac 还有很多很有趣的东西,我不确定当时有没有人注意到这一点。苹果确实打算在 Mac 首次亮相不久后就推出苹果版的 BASIC,但是这个计划被推迟了并最终夭折了,因为这是苹果与微软达成的协议中的一部分,当时微软为 Mac 发布了一个微软版的 BASIC。

640?wx_fmt=png

1987 年微软 QuickBASIC 的广告,该版本是面向高级程序员的语言编译器

Compute杂志1988年5月那一期的发布对我来说感觉那一刻像分水岭,因为该杂志一向认真地对待印刷的程序,比任何其他杂志都认真。编辑Gregg Keizer在他的“编辑许可”专栏中宣布该杂志将不再包括此类源代码,感觉这一举动就像花花公子宣布它将停止刊载色情图片。

Keizer 说这个决定是由许多因素造成的,其中之一就是印刷的源代码无法与包装在精美盒子里的软件竞争。“我认为最终这是一个关于杂志社怎样才能继续支持读者的问题。1988 年的情况与 1983 年完全不同,1983 年的时候人们愿意挥汗输入软件。”

1990 年当微软推出 Windows3.0 的时候,很明显基于文本的命令行环境已经时日无多,而经典的 BASIC 却在命令行环境中得到了蓬勃发展。但是尽管微软为专业开发人员推出了一个名为 Visual BASIC 的 Windows 版的 BASIC,并且后来发展成了至今仍然存在的 Visual Basic .NET,但是该语言的所有版本都从未捆绑到过 Windows。相反,它继续使用名为 GW-Basic 的 MS-DOS 版的 BASIC 发布其操作系统,后来被一个名为 QBasic 的版本替代。

2000 年微软发布了 WindowsMe,这是最后一个附带了 QBasic 的微软操作系统。那时候的它只不过是个残留品,只允许你编写 MS-DOS 程序,而那个时代没有人想编写 MS-DOS 程序。

当时我自己是 BASIC 程序员,1987 年买了 CommodoreAmiga 后我就开始偷懒。本世纪我写的唯一完整的 BASIC 程序就是我快速拼凑起来在微软的 Word 中自动处理一个繁琐任务的程序。那也是 7-8 年前的事情了。


640?wx_fmt=png

BASIC 永垂不朽 


在本文的开头我说过我很欣赏教更多人学编程的当代运动。我说过我很想念 BASIC。那么大家不免想问:如果每个人都应该学编程,那么是否每个人都应该用 BASIC 学编程?

以前就有人问过我这个问题,而且这是个争论不休的问题。2006 年,Salon 发表了“为什么 Johnny 学不会编程”(https://www.salon.com/2006/09/14/basic_2/),天体物理学家和科幻小说作者 David Brin 赞美了 BASIC 作为教学工具的优势,并提到他 14 岁的儿子 Ben 已无法运行数学课本中给出的简单的 BASIC 程序。


640?wx_fmt=png

“BASIC 已经过时了。新时代我们有新的创新工具。”


针对 Brin 的请求,许多人的回应是:BASIC 是一个老古董了。新手程序员学习 BASIC 就像一个有抱负的骑着修理工学习T型车的修理一样。

“爱斯基摩人有几百个形容雪的词语,”技术专家和企业家 Philippe Kahn 说道,他的第一家大公司 Borland International 是 20 世纪 80 年代编程语言的主要承包商,包括一个 BASIC 的版本,“但如果离开阿拉斯加,那么它可能就不是一种非常富有表现力的语言了。与之类似,编程从在简单的‘磁盘操作系统’上构建软件过渡到了面向对象平台的设计,而 BASIC 已经过时了。新时代我们有新的创新工具。” 

为了获得额外的指导,我问了几个在 BASIC 问题上与我的想法相差无几的人:Charles Forsythe。Charles碰巧是高中计算机实验室坐在我旁边的人,他于 1980 年左右开始玩 BASIC 游戏,我唯一羡慕他的一个技术力就是玩 BASIC 游戏。与我不同,他一直在坚持编程,如今他是 SAIC 的 Java 系统工程师。

他说,BASIC“简单而且互动性很好,所以它原本有个很好的目的:教初学者编程的基础知识。我们还有其他很好的入门语言,但是对于 BASIC,你不必说‘我们稍后学习如何定义个方法’,或‘我们稍后再学习对象’。向新手解释匿名函数表达式(或者闭包,或函数指针),可能会让他们完全陷入混乱。”

尽管如此,但这话听起来也不像是要支持该语言的再次回归:“一旦你学会了变量和分支,那么在当今编程的世界里,BASIC 就没有什么可以教你的了。”

Brin 说“为什么 Johnny 学不会编程”并不是希望 BASIC 能够回归。他感叹的是,现代标准版计算机根本没有提供任何方式,让初学者打开计算机并立即开始编程,而且只需要最少的指令。

“BASIC 普及了十年之久,教科书制造商在大多数标准数学和科学文本中都加入了简单的编程练习,”他说,“而且老师会布置作业。因此,很大一部分学生都可以体验写一个 12 行的程序,也许只是移动像素……但是即便是这样,他们通过直觉也可以明白每个屏幕上的每个点都遵守一个算法。”

640?wx_fmt=png

Quite Basic 是一种基于浏览器的当代语言

自 Brin 的论文发表以来的几年里,BASIC 有一点回归的起色。他赞扬了 NikkoStröm 的 Quite Basic,该程序完全可以在 Web 浏览器中运行,无需在计算机上安装任何东西即可编写和运行 BASIC 程序。顾名思义,Lyle Kopnicky 的 Vintage BASIC 旨在重现他年轻时经典 BASIC 的感觉,他在经过许可后改编了 David Ahl 的 BASIC 游戏。

甚至连微软也在商业上让 BASIC 重新回归到了新手中间。2008 年,微软推出了 Small Basic,这是一个为孩子和其他业余爱好者设计的免费的简化版 VisualBasic 版本。它有 14 个命令(与最初的达特茅斯版本相同),但是与 BASIC 的基础知识相去甚远。(原来你需要 10 PRINT “HELLO”完成的任务现在需要TextWindow.WriteLine("HELLO"))。

640?wx_fmt=gif

iPhone、iPad 和 Android 设备也有很多 BASIC 的版本。最重要的是:如果你有兴趣尝试 BASIC,那么你可以在任何计算机设备上尝试。即使从现在开始半个世纪后情况依然如此,我也不会感到惊讶。

然而,所有这些 BASIC 版本都没有解决 Brin 最初的抱怨:与过去的伟大 BASIC 不同,它们并不是为所有个人电脑用户准备的。 “请记住,即使打开电脑和实际输入程序之间只有一步之差,也会导致 30% 的学生流失,”他说。 “再加一步,又会失去 30%。下载并研究怎么用是不可能做到的。“

我同意 Brin 的观点。我很高兴我在学习 BASIC 的过程中学到了计算机的知识。但是回想起来,我对现在的情况更满意:BASIC 其实从来都不简单,甚至从来不是真正的编程。

“Kemeny 和 Kurtz 的目标是让这些伟大的、新颖和有趣的机器供更广泛的人群使用,”达特茅斯的 Rockmore 说。 “他们成功了。看看周围盯着手机的人们,你甚至可以说他们做得太成功了。“

640?wx_fmt=png

手持磁带的 Tom Kurtz,在 BASIC 早期拍摄于达特茅斯的计算中心

甚至 Kurtz 似乎对于现在很少有人学习 BASIC 的状况也很没有意见,他还称其为进步的标志:“BASIC 的许多用途现在都可以通过电子表格或特定应用程序轻松完成。现在,几乎现代计算机的所有功能都可以通过用手指点击在屏幕上的某些位置来实现。“

BASIC 不再是个人计算机普遍的组成部分了。但是,这个始于达特茅斯伟大的、不可思议的想法最终改变了我们的文化,历史上没有任何东西能与之媲美。

640?wx_fmt=png

1969 年达特茅斯学生在学校的 Kiewit 计算中心学习编程

原文:http://time.com/69316/basic/

作者:HARRY MCCRACKEN

译者:弯月,责编:屠敏

微信改版了,

想快速看到CSDN的热乎文章,

赶快把CSDN公众号设为星标吧,

打开公众号,点击“设为星标”就可以啦!

640?wx_fmt=gif


征稿啦

CSDN 公众号秉持着「与千万技术人共成长」理念,不仅以「极客头条」、「畅言」栏目在第一时间以技术人的独特视角描述技术人关心的行业焦点事件,更有「技术头条」专栏,深度解读行业内的热门技术与场景应用,让所有的开发者紧跟技术潮流,保持警醒的技术嗅觉,对行业趋势、技术有更为全面的认知。

如果你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新见解,欢迎联系 CSDN 投稿,联系方式:微信(guorui_1118,请备注投稿+姓名+公司职位),邮箱([email protected])。

推荐阅读:

640?wx_fmt=gif

640?wx_fmt=gif

猜你喜欢

转载自blog.csdn.net/csdnnews/article/details/83745850