“我意识到我们可以为它编写一个程序,而且它的能力足够运行 BASIC。”
众所周知,他们在编写 Altair BASIC 的初稿时甚至没有一个可以访问的Altair,所以他们在数字设备 PDP-10 的小型机上运行了一个模拟器。艾伦说:“Monte Davidoff 帮助我和比尔为 Altair 编写了 BASIC,他曾经说编程就像写小说一样。我们学习 BASIC 的时候亦是如此。首先从各个情节开始,了解我们采取的常用方法。然后深入了解各个章节的主要思想,然后编辑再编辑,直到我们勾勒出大致的作品,然后再修复所有的 bug。这是我做过的最难的同时也是最愉快的工作。”
新墨西哥州自然历史与科学博物馆展出的保罗·艾伦、比尔·盖茨和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,你可以同时兼顾两者。”
RadioShack的TRS-80(1977)是首批采用BASIC作为标配的个人电脑之一
这是事实,但也只是故事的开始。Altair及其最早的竞争对手迎合了那些喜欢拨开关和玩电烙铁的业余爱好者。1977年,新一波的个人电脑推出,面向更广泛的消费者群体,包括苹果的 Apple II,Commodore 的 PET2001 以及Radio Shack 的 TRS-80。让这些计算机成为消费者个人电脑的关键因素是它们加载了 BASIC。
PET 从一开始就提供了另一个版本的微软 BASIC。苹果和 Radio Shack 在获得微软版本的发售权之前使用的是该语言的基本变体,苹果公司是由联合创始人史蒂夫·沃兹尼亚克本人编写的。在接下来的几年里,几乎所有有名的微型计算机都带有微软 BASIC,包括 Atari 和德州仪器等公司的产品。
1981年,保罗艾伦(左)和比尔盖茨,周围是部分运行了他们编写的微软BASIC的计算机
技术专家喜欢谈论杀手级应用程序——即那些非常有用的软件,你甚至会为了运行它们而去购买一台计算机。1979 年问世的 VisiCalc 是第一个这类的程序。但在此之前,微软 BASIC 本身就是个人电脑上的杀手级应用。很多人购买电脑都是为了可以学习编程。
除了微软之外,还有其他微电脑 BASIC。在早期,最著名的是 CBASIC,由一位名叫 Gordon Eubanks 的海军军官编写。他的版本在开发商业程序的人中间特别受欢迎,在当时几乎有一半的程序都是用 BASIC 编写的。
“微软 BASIC 比 CBASIC 更基础,”Eubanks 说,“每台机器上都有 BASIC。如果你有台TRS-80,那么可以打开它编写一个小程序输出‘HELLO’。然后就可以了。我关注的是更为狭窄的领域,即如何开发商业应用程序……但最终的结果是,比尔盖茨做的更好。”
(虽然他可能没有像比尔盖茨那么成功,但是 Eubanks 最终也取得了很大成果,他成为了赛门铁克长期的 CEO,这是一家久经考验的伟大的软件公司。)
Eubanks 提到了有关微软 BASIC 重要性的一个关键原因:无处不在。打开早期的微型计算机(如TRS-80),你立刻就可以看到 BASIC。你可以随意从磁带盒或软盘上加载程序,也可以从头开始编写新程序。这些计算机鼓励用户编程的方式是后来的计算机所没有的。
与达特茅斯 BASIC 和 CBASIC 不同,微软 BASIC是一种解释性语言,这意味着每次运行程序时,它都会将 BASIC 程序的每一行都转换成机器代码。这导致它行为迟钝,尤其是当时大家都没有动画图形等加速的东西。
但这也意味着任何人都可以检查原始程序中是否包含用微软 BASIC 编写的内容,包括通过磁带或软盘上出售的商业软件。你可以从中学习,进行改造,或窃取部分片段用于自己的项目。因此它具有许多开源软件的优点,尽管这个概念当时还没有这个名字。
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计算机游戏》。
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 的数字。
1982年3月的计算机杂志,一如既往满满的都是BASIC程序
从理论上讲,我不应该觉得这本书非常有价值。毕竟,我可以在家里和学校通过软盘获得为 TRS-80 编写的游戏,并在几秒内加载它们,而不用费力地照着书一点点输入,然后再修复输入过程中由于输入错误而产生的 bug。但是我却乐在其中。我还输入了大量其他程序,这些程序来自 CreativeComputing、80 Microcomputing、SoftSide 以及最主要的以编程为中心的月刊 Compute 等杂志。
计算机杂志上发表的最佳 BASIC 程序出乎意料的专业,部分原因是因为专业化的壁垒很容易被消除。“当我在 1983 年第一阅读 Compute 的时候,外面卖的软件全都是装在塑料袋里手工制作的东西,附带1-2页的说明。”Gregg Keizer 说,他本人最终成为了该杂志的编辑。
这让学习编程变得更加诱人:当时的我们没有看过太多商业软件,而且觉得“我也可以编程”,却没有尝试过,所以难免有点蠢蠢欲动。
“软件是装在塑料袋子里手工制作的东西,附带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处理图形的方式。
看到其他人对BASIC的所作所为,Kemeny和Kurtz感到非常失望。1985年,他们出版了一本书《Back to BASIC》,书中哀叹了微软BASIC以及其他微型计算机上创建的变异版本粗制滥造且前后矛盾。其中针对个人电脑上的BASIC一章的命名为“问题出在哪里?”,他们还将这些BASIC称之为“流落街头的BASIC”,一个非常刺耳的绰号。
两个创始人不仅抱怨了 BASIC 的发展情况。他们两个还成立了一家公司,并起名为 True BASIC,该公司出品的版本加了新功能, 同时保留了达特茅斯BASIC的原有愿景。 与微软 BASIC 不同,无论你在什么计算机上运行,True BASIC 都是同一个语言。
“大约在 1983 年的时候,所有微型计算机上 BASIC 的版本都不同”,Kurtz 说,“我们以为在不同的计算机上实现同一个语言是一件好事。但是我们错了。不同的计算机慢慢变得强大起来,而且发展速度非常快,像我们这样的小公司根本跟不上。”
“我们都知道结果:各种版本的面向 XYZ 计算机的 BASIC。令人作呕。”
作为一个在流落街头的 BASIC 中长大的人,我很高兴我并不知道《Back to BASIC》的出版。虽然 Kemeny 和 Kurtz 的大部分牢骚对今天的我来说都非常合理,但他们本可以将我当时编写的BASIC 程序作为案例研究,尽管他们对于我输入的一切都不满意,但这是真实发生在他们的语言上的情况。
我为 TRS-80 编写的 BASIC 程序只能在 TRS-80 上运行;后来我得到了一台 Atari 400,我编写的程序只能在 Atari 上运行。与众多微软 BASIC 程序一样,我的程序行为很奇怪,而且没有任何文档记载这种语言的局限性,最重要的是它非常慢,Kemeny 和 Kurtz 也对此非常不满。
我的程序一点都不优雅,除了我和 TRS-80 之外,任何人都理解不了。但是这些程序是我创作的,它们告诉电脑完全按照我的意愿去做。
BASIC 是如此平易近人,你几乎可以毫不费力地一口气做完一些即兴创作的程序。我可能在高中的计算机实验室里写了数百个这样的游戏、工具程序以及笑话给我的同学们玩。大多数都是一次性的,只有一部分被遗忘在了我父母家里的软盘上,其他的都已经消失殆尽了。
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 中实现。”
褪去光环
在 Kemeny 和 Kurtz 因为对 BASIC 发展的不满而创建 True BASIC 的同时,该语言的影响力到达了顶峰时期。它不再是学校教初学者编程时默认使用的工具:当我在 20 世纪 80 年代中期上大学时,学校的教学语言是 Pascal,尤其是那些非常重视良好编程习惯的人。(我不好意思告诉你我的 Pascal 课得了多少分,我只能说 Edsger Dijkstra 可以得意洋洋了。)
在个人电脑的基本构成中 BASIC 也不再那么重要。并不是说出现了一种更容易的语言取而代之。只是大家不学习编程也可以与深入理解计算机。
Lotus1-2-3,在BASIC淡出个人电脑的过程中起了推波助澜作用的一个应用程序
在某种程度上,这是因为一大波丰富而强大的应用程序出现在了个人电脑上。如果你只想做数学计算,那么 Lotus 1-2-3 这类的电子表格比 BASIC 更容易实现。如果你想处理大量数据,那么 dBASE 这样的数据库可以为你分担。
微软感受到了扑面而来的软件风。艾伦说:“我们巩固了早期在语言方面的统治地位。但是很快大家就发现,文字处理等工具的应用程序会掩盖语言,而我们只需要构建一个文字处理器、数据库和电子表格。所以才有了今天的 Word和其他应用程序。”
1982 年 2-3 月个人电脑杂志的首次发行
“当创办个人电脑杂志的时候,我宣称我们不会在杂志的页面上刊登计算机代码,”David Bunnell 说,他于 1981 年创办了该出版物,并与 1982 年创办了微电脑世界,1983 年创办了麦客世界。“代码很难看。我希望它更像是一本消费者杂志。”
苹果公司于 1984 年推出了第一台 Macintosh,上面没有附带 BASIC,现在这对我来说很震惊,尽管当时 Mac 还有很多很有趣的东西,我不确定当时有没有人注意到这一点。苹果确实打算在 Mac 首次亮相不久后就推出苹果版的 BASIC,但是这个计划被推迟了并最终夭折了,因为这是苹果与微软达成的协议中的一部分,当时微软为 Mac 发布了一个微软版的 BASIC。
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 年前的事情了。
BASIC 永垂不朽
在本文的开头我说过我很欣赏教更多人学编程的当代运动。我说过我很想念 BASIC。那么大家不免想问:如果每个人都应该学编程,那么是否每个人都应该用 BASIC 学编程?
以前就有人问过我这个问题,而且这是个争论不休的问题。2006 年,Salon 发表了“为什么 Johnny 学不会编程”(https://www.salon.com/2006/09/14/basic_2/),天体物理学家和科幻小说作者 David Brin 赞美了 BASIC 作为教学工具的优势,并提到他 14 岁的儿子 Ben 已无法运行数学课本中给出的简单的 BASIC 程序。
“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 行的程序,也许只是移动像素……但是即便是这样,他们通过直觉也可以明白每个屏幕上的每个点都遵守一个算法。”
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”))。
iPhone、iPad 和 Android 设备也有很多 BASIC 的版本。最重要的是:如果你有兴趣尝试 BASIC,那么你可以在任何计算机设备上尝试。即使从现在开始半个世纪后情况依然如此,我也不会感到惊讶。
然而,所有这些 BASIC 版本都没有解决 Brin 最初的抱怨:与过去的伟大 BASIC 不同,它们并不是为所有个人电脑用户准备的。 “请记住,即使打开电脑和实际输入程序之间只有一步之差,也会导致 30% 的学生流失,”他说。 “再加一步,又会失去 30%。下载并研究怎么用是不可能做到的。“
我同意 Brin 的观点。我很高兴我在学习 BASIC 的过程中学到了计算机的知识。但是回想起来,我对现在的情况更满意:BASIC 其实从来都不简单,甚至从来不是真正的编程。
“Kemeny 和 Kurtz 的目标是让这些伟大的、新颖和有趣的机器供更广泛的人群使用,”达特茅斯的 Rockmore 说。 “他们成功了。看看周围盯着手机的人们,你甚至可以说他们做得太成功了。“
手持磁带的 Tom Kurtz,在 BASIC 早期拍摄于达特茅斯的计算中心
甚至 Kurtz 似乎对于现在很少有人学习 BASIC 的状况也很没有意见,他还称其为进步的标志:“BASIC 的许多用途现在都可以通过电子表格或特定应用程序轻松完成。现在,几乎现代计算机的所有功能都可以通过用手指点击在屏幕上的某些位置来实现。“
BASIC 不再是个人计算机普遍的组成部分了。但是,这个始于达特茅斯伟大的、不可思议的想法最终改变了我们的文化,历史上没有任何东西能与之媲美。
1969 年达特茅斯学生在学校的 Kiewit 计算中心学习编程
欢迎工作一到五年的Java工程师朋友们加入Java技术交流:585550789
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
喜欢小编轻轻点个关注吧!