了解如何编程对你很有好处,但是很可惜很多人都不愿意学。
多年来,学习编程一直高度受欢迎。它带来了很多教育创新,比如像 Hour of Code(由Code.org提供的编程教学网站)一样润物细无声,像 Code Year(由 Codecademy 带头创立)一样雄心勃勃。
就连美国总统奥巴马也给予了重视。2013 年 12 月,他公开了一段 YouTube 视频,鼓励年轻人学习编程,并宣称“学习这些技术不仅对你的未来很重要,而且对我们国家的未来也很重要。”
我认为“每个人都应该学编程”的运动值得称赞。然而它也引发了我的沉思,甚至是忧郁。很久以前,了解如何使用计算机实际上等同于知道如何写程序,而这一切都要归功于一门名叫 BASIC 的编程语言。
欢迎工作一到五年的Java工程师朋友们加入Java技术交流:585550789
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
BASIC 的诞生
BASIC 语言是由新罕布什尔州汉诺威市达特茅斯学院的 John G. Kemeny 和 Thomas E. Kurtz 共同创建的,现在距离 BASIC 首次成功地在达特茅斯学院通用电气生产的计算机系统上运行程序已经五十多年了。确切地说,那是1964 年 5 月 1 日。
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 年逝世)说:“我们只想到了达特茅斯。我们需要一种语言来‘教’所有的学生和教师编程,让他们无需参加课程就可以学习编程。”
一个 BASIC 的标志出现在 20 世纪 80 年代中期俄罗斯学校的计算机实验室图片来源:维基百科
他们的智慧结晶迅速成为了世界各地人民学习计算机编程的标准方式,并且一直持续了很多年。但是,如果仅仅将这门语言的发明视作计算机语言史上的一个重要时刻,那便大大低估了它的重要性。
在 20 世纪 60 年代中期,使用计算机就像通过邮件下棋一样:你需要使用打孔机在卡片上输入程序,把它们交给训练有素的操作员,然后需要一直等到第二天,才能等到结果的输出。BASIC 及其运行平台——达特茅斯时间共享系统加快了整个过程并揭开了计算机神秘的面纱。当你需要计算机处理某个操作时,只需输入单词和数学语句,然后计算机马上就可以完成。
“我们只想到了达特茅斯。”
如今,我们希望计算机(和手机、平板电脑以及一系列其他智能设备)能够快速响应我们的指令和请求。从很多方面看来,现在的即时响应始于 Kemeny 和 Kurtz 的创造发明。此外,他们的成果早在 20 世纪 60 年代先驱者道格拉斯·恩格尔巴特(Douglas Engelbart)做出同等重要的突破之前就公布于众了。道格拉斯·恩格尔巴特发明的鼠标和其他概念仍然出现在我们现代用户的界面中。
你可能会认为,一种为了帮助所有人学习计算机知识而创建的编程语言无疑会受到大众的爱戴。但是你错了。BASIC 总会受到一些严肃计算机科学领域的批评,他们指责它养成了大家的坏毛病。甚至它的创始人都因为在 20 世纪 70 年代和 80 年代人们对他们初衷的广泛误解而感到不满。
最终,BASIC 走了,淡出了家庭和学校中计算机的使用。没有人密谋干掉 BASIC,没有人能解释为什么它逐渐淡出了。但是我们中的一些人非常想念它。
谈到技术,我不觉得自己像个脾气暴躁的老头。我总是相信最美好的时光就在眼前。但是我不介意说:如果当初所有使用个人电脑的人都学习 BASIC 的话,这个世界会更加美好。
BASIC 的开始
迟早会有人想出一种面向初学者的编程语言,这是不可避免的。但 BASIC 成为了这种语言的主要原因是因为它诞生于一所拥有前瞻性数学课程的文理学院。而达特茅斯之所以能够创立 BASIC 主要是因为数学系主任 John Kemeny 的愿景。
1926 年 Kemeny 出生在布达佩斯的一个犹太人家庭中,1940 年他与家人为了逃离纳粹一起来到了美国。他就读于普林斯顿大学,在那里他花了一年的时间为曼哈顿计划做出贡献,并受到了先驱数学家和物理学家约翰·冯·诺伊曼的计算机讲座的启发。
JohnKemeny 在达特茅斯学院的学生讲授 BASIC 课程
Kemeny 曾担任阿尔伯特爱因斯坦的数学助理,并于 1953 年开始担任达特茅斯的教授,两年后年仅 29 岁的他被任命为数学系主任。他因创造性的数学教学方法而闻名于世:1959 年阿尔弗雷德·斯隆基金会向学校提供了 50 万美元的补助金,帮助他们建新的教学楼,时代杂志报道了这则新闻,还说这主要归功于 Kemeny 的声誉。
创建 BASIC 的想法源自“Kemeny 的一个普通的信念,即人文科学教育很重要,而且应该包含一些严肃且重要的数学教育,数学没有脱离人文科学教育的总体目标。”现任达特茅斯数学系主任 Dan Rockmore 说,他是一部关于 BASIC 诞生新纪录片的制片人之一。
“我们的愿景是校园里的每个学生都可以使用电脑。”
在 20 世纪 60 年代早期,普通公民甚至是那些常春藤联盟学校计算中心的学生都从未接触过计算机。Rockmore 说,这些机器被“锁在门后,只有一些小伙子(偶尔也会有女生)穿着白大褂进去使用”。
Kemeny 相信这些电子大脑将在日常生活中扮演越来越重要的角色,而且应该向每个达特茅斯学院的人做介绍。“我们的愿景是校园里的每个学生都可以使用计算机,而且所有教职工都可以在适当的时候在教室里使用计算机,”他在 1991 年的视频采访中说,“仅此而已。”
当然,达特茅斯学院无法为每个学生和教师提供计算机:当时的计算机是一种昂贵的共享资源,通常一次只能执行一项任务。这就是为什么一般你都需要将你的程序写到穿孔卡上,然后轮番等候。
TomKurtz 于 1956 年加入了达特茅斯学院的数学系,他提出使用一种相对较新的名为“分时共享”(time-sharing)的概念。多人分摊一个系统的处理能力,从而实现同时为多人服务。后来就有了达特茅斯时间共享系统(Dartmouth Time-Sharing System,简称 DTTS),坐在终端前的用户能够编写程序并立即运行。
达特茅斯分时系统的示意图,来自1964年10月达特茅斯学院的手册
“如果你想让一个学生对计算感兴趣,那么你需要一些具有即时性的东西,”Rockmore 说,“你不想在知道自己做的是否正确之前,就将 10 行的程序送到计算机中心。”
但那是什么样的程序呢?过去,Kemeny 和 Kurtz 在为初学者创建计算机语言方面做了两次不成功的尝试:达特茅斯简化代码(Dartmouth Simplified Code,简称Darsimco)和达特茅斯超简化编程实验(Dartmouth Oversimplified Programming Experiment,简称DOPE)。但这次他们考虑修改现有的语言。
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 不是更简单吗?”
“如果你编写了一个非常简单的程序,那么你可以在一秒后得到答案。”
BASIC 主要是 Kemeny 的想法,他自己写了第一版的 BASIC。从 1963 年 9 月开始,他和 Kurtz 开始共同努力创造了这门语言并在 DTSS 上运行。他们领导了一支由十几名本科生组成的团队,他们都是仍在学习计算机的男生。(当时达特茅斯学院是一家男校,直到 1972 年在 Kemeny 担任校长期间才改成了男女同校。Kemeny 于 1970-1981 年间担任该职位。)
McGeachie 回忆说:“那时我们经常通宵工作,然后回去睡觉。Kemeny 和我们一块工作,然后去给本科生上数学课。”
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 都不认同。
早期达特茅斯 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 几乎可以做任何事情。包括玩游戏,很多人都认为这才是创建该语言的目的。
JohnKemeny检查了他的女儿Jennifer在“家用电脑”上写的程序,该“家用电脑”是达特茅斯分时系统的一个终端图片来源:Adrian N. Bouchard /达特茅斯大学
你可以用达特茅斯 BASIC 编写非常复杂的程序。(一本早期的手册称最长的程序可以装满“大约2英尺的电传打字纸。”)但是你也可以在接触这门语言后不久,就尝试通过几行简单的代码让计算机做一些有趣和有用的事情。这才是该语言的目的所在。
对 Kemeny 和 Kurtz 来说,尽可能地让人们自由使用 BASIC 和 DTSS 至关重要。“每个学生都可以进入图书馆,浏览书籍或带一些书回房间。没有人会问他为什么需要这本书,而他不需要得到任何人的许可,”Kemeny 在 1966 年学院新开设的计算机中心手册中写道,“同样,每个学生都可以走进 Kiewit 计算中心,坐在控制台前,使用分时系统。没有人会问他是否正在解决一个严肃的研究问题,或者在做功课,玩足球比赛的游戏,还是给女友写信。”
达特茅斯欢乐合唱团的成员通过达特茅斯分时系统与加利福尼亚州的女孩在计算机上约会。图片来源:Adrian N. Bouchard /达特茅斯大学
Kemeny 在 Kiewit 手册中描述的就是个人计算机。只是当时还没有这个词。甚至这个概念在当时也是非常大胆的。
达特茅斯 BASIC 实现了 Kemeny 和 Kurtz 所希望的一切,而且还远不止此。1967 年在一份胜利报告中,他们说,到那个学年结束的时候,将会有两千名达特茅斯学院的学生(自BASIC问世以来第三批新晋学生的80%)通过编写和调试他们自己的程序来学习计算机。许多学生在完成了BASIC的作业后依然在学习编程,BASIC 课程也是该学校数学课程的必修部分。40% 的教职工(不只是数学和科学教师)也使用了该系统。
该报告称:“任何对计算机怀有恐惧之心或认为计算机无用武之地的人,如果试图说服达特茅斯学院的学生,都会遭到白眼。达特茅斯学院的学生更加了解计算机,而且他们根据亲身体验学习计算机。”
通用电气宣传册的封面,其中宣传了达特茅斯版的BASIC 图片来源:计算机历史博物馆
达特茅斯通过电话线为其他东部沿海地区的学校提供了 DTSS 的访问,包括哈佛大学和普林斯顿大学,以及一些高中。它还帮助他机构实现了分时系统和 BASIC,而通用电气将 DTSS 和达特茅斯 BASIC 进行了商业化,并出售给商业客户。美国数字设备公司(Digital Equipment Corporation,简称DEC)和惠普等其他计算机公司也推出了自己的 BASIC。
简而言之,达特茅斯在让计算机大众化方面做出的努力取得了巨大成功。Kemeny 在 1991 年接受采访时说,“从性质上来说,在这种影响上我做的很对。但是从数量上来看,我大大低估了它。也就是说,受它影响的课程远比我想象的多,并且影响的程度要大得多。这些都是由于计算机的便利性导致了课程的完全改变。当然,我也低估了计算机教育在全世界的传播范围。”
BASIC 受到的抨击
并不是每个人都对通过这种语言将计算机交到每个人手中的做法感到满意。最具说服力和最强烈的反对者是 Edsger Dijkstra(1930-2002),他是一位很有影响力的计算机科学家。“凡是接触过BASIC的学生都无法学习优秀的编程技术,”他在 1975 年的一篇题为“我们如何倾诉可能会伤害到别人的真相?”(http://www.cs.virginia.edu/~evans/cs655/readings/ewd498.html)的论文中抱怨道,“优秀的程序员在精神上遭到了摧残,他们已没有康复的希望。”
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 乃天赐之物。
“凡是接触过 BASIC 的学生都无法学习优秀的编程技术。”
BASIC 还有其他经典的方面,它可以让你通过行号来组织程序,例如 10 PRINT “HELLO”中的 10,也有人争论说这很多余,并最终被遗弃。但是行号有助于强调计算机程序的顺序,无论使用哪种语言,计算机程序都包含了可以分解成各个步骤的任务。
在“我们如何倾诉可能会伤害到别人的真相?”一文中,Dijkstra 将编程称为“应用数学中最难的一个分支”,并建议没有天分的数学家就不必学习编程了。如果这是他 1975 年的观点,那么他是不会批准 BASIC 的。计算机编程难度非常大,要么把这种工作留给专家,要么向大众普及(就像 BASIC 那样)。你只能二选一。
1965年达特茅斯学院的学生在远程计算机中心工作图片来源:Adrian N. Bouchard /达特茅斯大学
今天,面对有人指责 BASIC 不够严肃,通过该语言学习计算机编程是一种危险的方式等的说法,合伙创立者 Kurtz 直言不讳地说:“简直是胡说八道。”
“我愿意承担风险,而且我觉得那些专业人士对 BASIC 的贬低只是有点嫉妒。毕竟,这是我们花费了数年的心血才开发出来的技术,而且经过几个小时的学习就可以编写程序的技术怎么可能完全是白痴呢?”
也许对 Edsger Dijkstra 这样的人来说,BASIC 的存在并不合理。但也没关系,这门语言本来就不适合他们。对于那些新手来说 BASIC 十分合理,他们从学习编程那一刻开始只是想教计算机做一些有用的事情。1975 年当 Dijkstra 指责 BASIC 残害编程思想的时候,学习 BASIC 的人则越来越多。
跨入个人电脑时代
由于 BASIC 可以让不是计算机科学家的普通人也能使用 DTSS,Kemeny、Kurtz 和他们的同伴们的发明可以说是真正形式上的个人计算机。虽然这还不是真正的个人电脑。十年之后,一家名为 MITS 的新墨西哥模型火箭公司推出了 Altair 8800,一款售价 497 美元的个人组装微型计算机(组装好的是621美元),这款微型计算机掀起了个人电脑的革命浪潮。
当时这在所谓的计算机呆子的少数人中间简直是一个爆炸式的新闻,比如保罗·艾伦(微软的联合创始人)当时在波士顿霍尼韦尔担任程序员。
1976年MITS推出的Altair 8800,首台运行微软BASIC的微型计算机
当时他在哈佛广场的一家报摊上买了一本 1975 年 1 月的《大众电子》,封面上就是 Altair,他与一位名叫比尔盖茨就读于哈佛二年级的好友一起对此兴奋不已。他们马上想要尝试在 Altair 运行 BASIC,他们俩都在西雅图 Lakeside 学校通过时间共享系统和电传打字机上学习了 BASIC。
实际上,在得知 Altair 之前艾伦就一直在考虑构建自己的 BASIC 的可能性。“没有人曾经试过为微型处理器编写完整的编程语言”,他解释说,“但是当 8080 处理器的芯片问世时,我意识到我们可以为它编写一个程序,而且它的能力足够运行 BASIC。”
喜欢小缟轻轻点个关注吧!