A Brief, Incomplete, and Mostly Wrong History of Programming Languages

原文出处:   A Brief, Incomplete, and Mostly Wrong History of Programming Languages   html

译文出处: Mort Yaojava

警告:python

  • 原文中的内容不必定都是真实的。
  • 小字部分不属于原文,是翻译君为了便于读者读懂原文擅自所加的注解。  固然,也不能保证必定都是真实的。
  • 为了照顾那些幽默感退化的人们,维基百科有一个主题关于:History of programming languages

 

1801 - Joseph Marie Jacquard用打孔卡为一台织布机编写指令,在挂毯上织出了“hello, world”字样。当时的reddit网友对这项工做的反响并不热烈,由于它既缺乏尾递归调用,又不支持并发,并且甚至都没有注意在拼写时恰当地区分大小写。程序员

  • Jacquard织布机是第一台可进行程序控制的织布机。用打孔卡进行编程的概念,直到电子计算机被发明出来以后仍然被普遍运用。
  • 最先的Hello World程序(出自K&R C)打印的是全小写的字符串:"hello, world"
  • 在许多英文技术社区里,不正确地使用大小写发贴会被视做是小白的行为。(如把“Python”拼做“python”,把“FreeBSD”拼做“freebsd”,把“Qt”拼做“QT”)
  • reddit / Hacker News的月经帖标题:“.*: a new .*-based .* programming language”。底下常见的回帖形式:“它支持并发吗?”“没有尾调用优化果断差评。”“如今的编程语言已经足够多了,为何咱们还须要更多的语 言?”……

 

1842 - Ada Lovelace写了世界上第一个程序。她的努力只遇到了一点点小小的麻烦,那就是:实际上并无任何计算机可以用来运行她的程序。后来的企业架构师们从新吸取了她的这个技能,用来学习如何更好地使用UML进行编程。算法

  • Ada Lovelace为Charles Babbage的分析机写了一个计算伯努利数的算法实现,所以被后世公认为是世界上第一个程序员。实际上,分析机因为其设计思想过于先进,在当时根本没有 被制造出来。(Babbage的分析机通常被认为是现代电子通用计算机的先驱)
  • 讽刺如今的某些“软件架构师”顶多只会纸上谈兵地画画UML。

 

1936 - Alan Turing发明了世间一切程序语言的最终形态,但很快他就被英国军情六处“请”去当007了,以致于他根原本不及为这些语言申请专利。express

  • 与通用图灵机(Universal Turing machine)等价的语言被称为图灵完备的(Turing completeness),它定义了“什么样的语言能够被称做是程序语言”。
  • 二战期间Turing曾秘密地为英国军方工做,破解德军的Enigma密码机,并在战后被授予大英帝国勋章。但这项事实直到多年之后才向公众公开。

 

1936 - Alonzo Church同时也发明了世间一切程序语言的最终形态,甚至作得更好。但他的λ演算被绝大部分人忽视了,由于它与C语言“不够像”。尽管存在着这样的批评,但事实上,C在当时尚未被发明出来。编程

  • Church是Turing在Princeton的博士生导师,他在λ演算方面的工做先于Turing指出了不存在一个对可断定性问题的通用解法,这后来证实和Turing针对停机问题提出的图灵机模型是等价的。即著名的Church-Turing论题
  • Church“甚至作得更好”,由于λ演算为后世全部的函数式语言提供了理论基础。
  • 如今一种常见的关于函数式编程的批评就是:“它们与C语言不够像”。

 

1940年代 - 一些直接采用布线和开关来进行程序控制的“计算机”出现了。工程师们当时这么作,听说是为了避开“用空格仍是用制表符缩进”这样的论战。api

  • 听说当时负责设计ENIAC的工程师中间曾经发生过这样的争论:
  • 空格比制表符好。
  • 制表符比空格好。
  • 4个空格比8个空格好。
  • 什么?用2个空格的通通烧死。
  • 关于这台具备里程碑意义的人类史上第一台电子计算机ENIAC上应该预装何种编辑器,工程师们还发生过这样的争吵:
  • Vim比Emacs好!
  • Emacs比Vim好!
  • 强烈推荐Sublime Text。
  • 你丫用编辑器的都是找虐,IDE才是王道。
  • 没错,要用就用世界上最好的公司微软开发出来的世界上最好的IDE:Visual Studio。
  • 我早就看透了无谓的编辑器论战什么的了,我要告诉楼上吵架的,大家全都是傻逼!
  • 最后,工程师们一致决定使用布线和开关来为他们即将发明的计算机进行编程,机智地避开了全部这些无谓的争吵,最终齐心合力创造出了人类历史上第一台电子计算机:ENIAC。(鼓掌
  •  

 

  • (图:两位ENIAC程序员在运用敏捷开发方法进行愉快的结对编程。“自从抛弃伴随我多年的Emacs和HHKB Pro、改用布线和开关进行编程以后,个人左手小指麻痹奇迹般地痊愈了。”其中一位接受采访时如是说。另外一位则表示:“新的编程方式让曾经专一颈椎病20 年的我获得了完全的康复,不用再成天盯着显示屏,身心同时获得了极大的放松,值得大力推广!”)

 

1957 - John Backus和IBM发明了FORTRAN语言。关于IBM或FORTRAN并无什么特别可笑的地方。除了,写FORTRAN程序的时候不系蓝领带将被编译器视做是一个syntax error。安全

  • 蓝领带、白衬衫、深色西装彷佛是IBM公司20世纪经典的dress code。
  • 早期FORTRAN(FORTRAN 77)对程序书写格式的要求那是至关严格。(例如,蛋疼的固定格式缩进)

 

1958 - John McCarthy和Paul Graham发明了LISP。因为冷战期间的战略括号资源储备所形成的巨大成本,LISP从未流行过。尽管欠缺足够的流行度,LISP(如今叫作 “Lisp”,有时叫“Arc”)仍然被视做一门有影响力的语言,在关键的算法思想诸如递归(recursion)和提高逼格 (condescension)上尤其典范。多线程

(原文的脚注:

幸运的是对于计算机科学来讲,花括号和尖括号的供应尚充足。

“关键的算法思想”这一说法来自于Verity Stob的Catch as catch can。)

  • 战略括号储备:据信是由于克格勃对于他们费尽千辛万苦搜集到的程序片断全都是括号感到极端愤怒,因而封锁了世界各地的括号矿产资源,致使白宫方面不得不增强战略浓缩括号的储备。(误
  • LISP发明的那一年Paul Graham其实尚未出生。听说是由于某本叫作《Haste and Waste》的伪程装黑圣典实在太有名了,以致于许多编程小白们把写这本书的传奇人物同Lisp之间画上了等号。
  • 提高逼格确实是一种与递归调用一样关键的算法思想。嗯,你懂的。

 

1959 - 在输掉了和L. Ron Hubbard之间的一场打赌以后,Grace Hopper和其余几个抖S发明了所谓的“面向Boilerplate的全大写化语言(Capitalization Of Boilerplate Oriented Language,COBOL)”。多年之后,因为一些被误导的、性别歧视主义者对Adm. Hopper关于COBOL的工做的报复,在Ruby技术会议上不时会看到一些厌女主义乃至仇视女性的材料出现。

  • L. Ron Hubbard是山达基教(Scientology)的创始人,二战期间曾与Grace Hopper一样供职于美国海军。(尚不清楚这两人之间有无其余联系)
  • COBOL语言以代码极其冗长和通篇大写字母的书写风格而闻名。
  • Adm. Hopper:Grace Murray Hopper女士的军衔是Rear Admiral Lower Half,即美国海军准将。
  • Ruby技术会议与性别歧视:在09年的GoGaRuCo会议上,有人作了一场题为“CouchDB perform like a pr0n star” 报告,幻灯片演示中使用了大量色情材料,引发了在场的少数女性观众的极大不适(“This was a national conference, not a gathering of teenager boys in a smelly upstairs bedroom!”)。会后,DHH(Ruby on Rails的做者)发推表示“it's "absolutely" appropriate to use porn in a business presentation”。关于其余更多技术会议上出现的性别歧视事件,参见这里

 

1964 - John Kemeny和Thomas Kurtz创造了BASIC,一个为非计算机科学家设计的非结构化的程序语言。

1965 - Kemeny和Kurtz两人goto到了1964。

  • 调侃BASIC语言对行号和goto的无节制滥用。

 

1970 - Guy Steele和Gerald Sussman创造了Scheme。他们的工做致使了一系列以《Lambda之究极(Lambda the Ultimate)……》为标题开头的论文发表,并在《Lambda之究极厨房神器》这一篇中达到了最高潮。以这篇论文为基础,开始了一个终年累月的、收 视率究极失败的晚间电视购物节目。Lambda们由于其概念相对难以理解而被大众所忽视,直到将来的某一天,Java语言终于让它们变得有名了起来。经过 不包含它们这件事情。

 

1970 - Niklaus Wirth创造了Pascal,一个过程式的语言。很快就有人开始声讨Pascal,由于它使用了相似“x := x + y”这样的语法,而不是更为人熟知的类C语法“x = x + y”。尽管存在着这样的批评,而事实上当时C尚未被发明出来。

 

1972 - Dennis Ritchie发明了一把射击时能同时向前和向后两个方向发射子弹的绝世好枪。但他对此发明形成的致死和终身残疾数量感到还不够满意,因此他又发明了C语言和Unix。

  • 翻译君:……

 

1972 - Alain Colmerauer设计了逻辑编程语言Prolog。他的目标是创造一个具备两岁小孩智商的程序语言。为了证实他成功达到了这个目标,他展现了一个Prolog程序,它对于每条查询都会机智地给出相同的回答:“No”。

 

Ask me anything!

?-  

 

1973 - Robin Milner创造了ML,一个创建在M&M类型理论基础上的语言。由ML衍生而来的SML加上了一套形式语义的规范。当被要求给这个形式语义自己 书写一套形式语义时,Milner的脑子爆掉了。其余ML家族的著名语言还包括OCaml,F#,和,Visual Basic。

  • SML的形式语义规范事实上被写成了这样一本书(SML'97):The Definition Of Standard ML》
  • ML明显是创建在H-M(Hindley–Milner)类型推断的基础上的,不太清楚原文所说的M&M类型理论是在吐槽神马……

 

  • Visual Basic近年来吸取了函数式编程里的很多东西(不知道是否是由于受到了F#影响的缘故)。最典型的是它具有和ML类似的类型推断
  •  

 

1980 - Alan Kay创造了Smalltalk并发明了“面向对象”这个词。当被问到它的含义时,他回答道:“Smalltalk程序自己就是对象。”当被问到对象是由 什么组成时,他回答到:“对象。”当再一次被问到这个问题时,他说“看,它从里到外都是对象。直到你抽出一只乌龟。”

  • Smalltalk的设计从很大程度上受到了Logo的影响。

 

1983 - 为了记念伟大的先辈程序员Ada Lovelace那可以写出永远也没法被执行的代码的彪悍技能,Jean Ichbiah和美国国防部创造了Ada语言。尽管缺少证据显示有任何重要的Ada程序曾经被完成过,历史学家仍然确信Ada是个成功的公益项目,它让数 以千计的国防承包商免于沦落为与黑帮为伍。

  • Ada曾经是美国国防部指定的嵌入式计算机系统惟一开发语言,在其研发上耗资巨大。(国防承包商们因而不用靠贩卖军火给黑帮来维持生计了)
  • 虽然有充分的证据显示Ada的整型范围溢出检查失败致使弄坏了欧空局的一枚Ariane 5运载火箭,不过美国国防部发言人对此表示:关我P事。

 

1983 - Bjarne Stroustrup把他所据说过的一切都试图嫁接到C上,创造出了C++。最后获得的语言是如此地复杂,以致于程序必须被送到将来去让“天网”人工智能 进行编译。编译时间难以容忍。天网开展这项服务的动机仍然鲜为人知,但来自将来的发言人说道:“没什么好担忧的,宝贝。”带着一口奥地利腔的机械口音。有 一些来自坊间的推测,所谓的天网只不过是个自命不凡的缓冲区溢出而已。

  • 这篇文章写出来的时候,一个被称做C++0x的新标准还遥遥无期。许多编译器对它的支持彷佛永远停留在“partial”阶段。
  • 请自行脑补终结者里的T-800……
  • 不管什么都改变不了C/C++是个经典的“缓冲区溢出语言”的事实。

 

1986 - Brad Cox和Tom Love创造了Objective-C,宣称“该语言完美地结合了C的内存安全性与Smalltalk的神奇效率”。如今的历史学家怀疑这两人实际上是诵读障碍症患者。

  • C的内存安全性十分的好
  • Smalltalk编译出来的程序以低效缓慢著称。

 

1987 - Larry Wall在电脑前打了个盹,Larry Wall的脑门子压到了键盘上。醒来以后,Larry Wall深信 ,在Larry Wall的显示器上出现的神秘字符串并不是是随机的,那是某种编程语言之程序样例的神谕。那必是上帝要他的先知,Larry Wall,去设计的。Perl语言就此诞生了。

 

1990 - 一个由Simon Peyton-Jones、Paul Hudak、Philip Wadler、Ashton Kutcher和蔼待动物组织(PETA)组成的委员会创造了Haskell,一种纯函数式的、非严求值的语言。Haskell因为使用了Monad这种 较费解的概念来控制反作用而遭到了一些批评意见。Wadler试图平息这些质疑,他解释说:“一个单子(Monad)说白了不过就是自函子范畴上的一个幺 半群而已,这有什么难以理解的?”

  • 素食主义鼓吹者:为了获取食物而没必要要地杀死动物是邪恶的;“纯函数式编程”鼓吹者:为了编程而引入没必要要的反作用是邪恶的。
  • (科普帖)自函子说穿了就是把一个范畴映射到自身的函子,自函子范畴说穿了就是从小范畴映射到自身的函子所构成的以自函子为对象以天然变换为态射 的范畴,幺半群说穿了就是只有单个对象的范畴,给定了一个幺半群则可构造出一个仅有单个对象的小范畴使其态射由幺半群的元素给出而合成由幺半群的运算给 出,而单子说穿了就是自函子范畴上的这样一个幺半群。(这都不理解么亲连这种最基本的概念都不理解还学什么编程!)
  •  

 

  • 又:“A monad is a monoid in the category of endofunctors(一个单子是自函子范畴上的一个幺半群)”这句话的原出处据信是Mac Lane的这本书:

 

 

 

1991 - 荷兰程序员Guido van Rossum为了一次神秘的手术而进行了一次阿根廷之旅。回来后他带着一个巨大的颅疤,发明了Python,而被数以军团计的追随者们加冕为“终生大独裁 者”,并向全世界宣布“要办到一件事情,只可有惟一的一种方法!”。整个波兰陷入了恐慌。

  • BDFL(Benevolent Dictator for Life):开源社区一种流行的说法,“仁慈的”终生大独裁者。这个说法最先指的就是Guido van Rossum。
  • 希特勒在提出创建“纯正的雅利安人国家”“统一的大德意志帝国”并实现了德奥合并以后,翌年便入侵了波兰,引起了第二次世界大战。“我一我的征服了整个欧洲!”(感受好棒好棒的)

 

1995 - 在家门口附近的一个意大利饭馆用餐时,Rasmus Lerdorf意识到他吃的那盘意面正好是一个用来理解WWW万维网的极好模型,而全部的Web应用都应该仿照它们的媒介那样去作。在他的餐巾的背后,他 设计出了著名的“可编程超连接Pasta(Programmable Hyperlinked Pasta,PHP)”语言。PHP的文档至今仍然保留在那片餐巾上。

  • PHP最显著的特色就是:代码是能够直接嵌在HTML文档中的。

 

1995 - 松本“Mad Matz”行弘创造出了Ruby语言,用来辟谣一些意味不明的、有关澳洲将会变成一片由莫霍克族战士和Tina Turner统治的荒漠的末世预言。该语言后来被它的真正发明者David Heinemeier Hansson从新命名为Ruby on Rails。(关于某个叫松本行弘的人发明了一种叫作Ruby的语言这件事情从未发生过,最好在这篇文章的下一个版本中删掉。 - DHH表示)

  • 最先关于Ruby的国际会议不是RubyConf,而是每一年在澳大利亚举办的OSDConf。
  • 这里应该是在吐槽Ruby的杀手级应用Ruby on Rails实在太有名了,以致于超越了原来的Ruby语言自己。
  • Matz并无为“Ruby”这个名字注册商标——本着开源的黑客精神。
  • DHH(RoR的做者)却把“Ruby on Rails”这个(包含了“Ruby”字样的)名称注册成了商标,而且阻止别人未经受权使用“Rails”这个名字。
  • (虽然抢注商标对开源来讲未必是一件坏事情——Python基金会今年在欧洲还卷入了一场商标之争了不是)
  • 假如你历来没据说过的话,莫霍克族战士听说是像这个样子的:
  •  

 

 

 

1995 - Brendan Eich读完了历史上全部在程序语言设计中曾经出现过的错误,本身又发明了一些更多的错误,而后用它们创造出了LiveScript。以后,为了紧跟 Java语言的时髦潮流,它被从新命名为JavaScript。再而后,为了追随一种皮肤病的时髦潮流,这语言又被命名为ECMAScript。

  • WAT!https://www.destroyallsoftware.com/talks/wat
  • JavaScript和Java语言没有任何实质上的联系;就像ECMAScript和Eczema(湿疹)没有任何实质上的联系同样。 (Brendan Eich曾表示:“ECMAScript was always an unwanted trade name that sounds like a skin disease.”)
  • 但不少人以为其实JavaScript设计中包含的错误还不够多,本着为程序语言的设计贡献更多错误这样的目的,他们群策群力创造出了更多的、JavaScript中不曾成功涵盖的错误。这儿有一个五花八门的列表,以供有志于为程序语言设计的谬误史添砖加瓦的人们参考。

 

1996 - James Gosling发明了Java。Java是一个相对繁冗的、带垃圾收集的、基于类的、静态类型的、单分派的面向对象语言,拥有单实现继承和多接口继承。Sun竭尽全力地宣传着Java的独一无二不一样凡响之处。

 

2001 - Anders Hejlsberg发明了C#。C#是一个相对繁冗的、带垃圾收集的、基于类的、静态类型的、单分派的面向对象语言,拥有单实现继承和多接口继承。微软竭尽全力地宣传着C#的独一无二不一样凡响之处。

 

2003 - 一个叫Martin Odersky的醉汉看见了好时瑞森花生酱杯的广告,展现了某我的的花生酱倒入另外一我的的巧克力的场景,他突然有了个点子。他创造了Scala,一种结合 了面向对象和函数式编程的语言。这同时激怒了两个阵营的忠实信徒,他们马上宣布要发动圣战烧死异教徒。

 

 

 

(原文请戳:http://james-iry.blogspot.co.at/2009/05/brief-incomplete-and-mostly-wrong.html

  • 补充:原文的评论中有人尖锐地指出,开头提到的Jacquard可编程织布机不但支持并发(concurrency),并且是一个典型的多线程 (multi-threaded)的例子。如你所见,它确实经过良好的同步机制避免了多个thread间产生竞争条件致使死锁,其实能够看做是现代操做系 统最先的雏形。(目测此项科技树成果已突破天际)

 

相关文章
相关标签/搜索