级别: 初级 刘 朝阳, 专栏作家
2009 年 8 月 12 日
本书描述了软件行业技术、市场、产业、商业价值、关键事件、人物事迹的历史运行轨迹,以及软件已经改变的和将要改变的人类生活与商业创新之间的逻辑分析和价值判断。
在内容上,本书涉及了软件历史的几乎所有重要技术:程序语言、操作系统、数据库、中间件、应用软件和开源软件、人工智能、软件工程、网络安全、Web2.0、移动互联网、企业管理、个人数据处理等,并在横向话题分类中进行灵活组合。
在构架上,以史鉴今,糅合话题式和模块式的内容编排,迎合当今读者多元化的阅读取向,使不同身份的读者都能够轻松找到兴趣点和舒适的阅读方式。
在风格上,本书通俗、活泼、充满矛盾和尖锐的思想火花;书中挖掘了足够多的新闻历史事件的背景关联和更多重量级人物的对话和思想碰撞,内容具备足够的思想张力和启迪性,与当今IT业的热点话题和趋势息息相关,使得各行各业的非技术背景读者也能从软件的技术史和商业史汲取养分。
我们推出了本书的 前言 和 第 1 章和 第 2 章 供大家在线浏览。更多推荐书籍请访问 developerWorks 图书频道。
 | |
|
|
书名:软件的黄金时代
作者:刘朝阳 编著
出版社:人民邮电出版社
出版日期:2009 年
ISBN:7115196486/9787115196484
购买:
中国互动出版网、当当网、卓越网
| |
推荐章节:
更多推荐书籍,请访问 developerWorks 图书频道。
欢迎您对本书提出宝贵的反馈意见。您可以通过本页面最下方的 建议 栏目为本文打分,并反馈您的建议和意见。
如果您对 developerWorks 图书频道有什么好的建议,欢迎您将建议发给我们。
|
|
|
引言
“巴别塔”这个词源自于《圣经》第十一章,讲的是洪荒之后,诺亚方舟上留下的人类妄自尊大,竟然想修一座通天塔与上帝见面,于是上帝非常搓火,混乱了他们的语言,造成思想无法统一,文化产生差异,分歧、猜嫉等各种问题接踵而来。于是,这座塔也便成了一个泡影。在希伯莱语中,“巴别”干脆就是“混乱”的代名词。
如果我们为《圣经》中记载的巴别塔故事寻找一个活生生的范型(Paradigm),那么计算机语言,或者说编程语言(Programming Language)的发展就是一个绝佳的例子。从 1955 年约翰·巴克斯(John Bucks)发明高级语言 FORTRAN 而引发软件的第一次工业化革命以来,经过几十年的发展,编程语言超过了 2000 种,语言之间的战争也从未停止过。
计算机语言与软件制造业的全球化运动紧密相关,也是人们参与下一代 DIY(Do It Yourself)互联网的关键。因此,理解语言进化所遵循的生存法则是我们探寻软件 2.0 革命趋势的第一步。即使在今天,对于程序开发人员来说,掌握什么样的程序语言与就业前景和薪水高低之间的关系依然众说纷纭,这方面的误区和口水大战也从来也没有停止过。
从 FORTRAN 到如今互联网上流行的动态语言,程序语言作为人类软件工程的核心技术已经经历了数次变革,而每一次变革,都深刻地影响到整个软件产业的技术和产业格局演变。在互联网时代的软件工业化和全球化趋势中,程序语言已经进入了一个全新的发展阶段,易于掌握、能够进行敏捷的 Web 开发的成为一种潮流,而类似 IBM 推动的 Project Zero 互联网应用开发平台则有望使“软件盲”也能够参与企业级软件的开发和定制,这将意味着以大规模协作为特征的第二次软件工业化革命已经拉开序幕。同时,这也让人们看到了平息编程语言“巴别塔”的希望。
从织布机到火星车
“如果你想成为周游世界的旅行家,那么你大概需要学习用 6912 种语言说:‘你好,厕所在哪里?’根据 Ethnologue.com 的统计,地球上现存的人类语言种类高达 6912 种。对于一个程序员来说,每周都会有一门新的编程语言问世。”
—— Brian Hayes 《分号的战争》
勇气号的困惑
2004 年 1 月份,Java 之父詹姆斯·高斯林(James Gosling)博士端坐在美国航空航天总署(NASA)的喷气推进实验室,目不转睛地观察着勇气号探测器在火星上的一举一动,这可能是人类有史以来最慢的一次互联网远程通信(有高达 9 分钟的延迟和只有数 KB 的数据带宽)。
也许有人会发问:“火星上怎么会有互联网 ?”当时,虽然只有地球、火星探测车和地球空间站等少数几个通信节点,但谷歌的首席科学家、互联网之父温瑟夫(Vin Cerf)依然认为这是星际互联网的雏形(早在 2001 年,温瑟夫来北京布道下一代互联网,我曾有幸向温瑟夫求证过类似的问题)。而 Java 语言,则再一次充当了互联网先锋的角色。在距离地球 1 亿 2000 万公里之外的红色星球上,勇气号的 Java 控制系统经受住了绵延千里的火星风暴的考验,从未死机。勇气号最初设计的使用寿命是 3 个月,能够在火星表面“自驾游”600 米;但出人意料的是,“勇气号”最终在火星上超期服役 18 个月,在火星上留下了一串足足 7 公里长的“脚印”,这让人们对勇气号的科技水平大加赞赏。
Java 语言漫游火星,成为 1995 年以来 Java 最为成功的一次品牌宣传,NASA 的网站提供一款名叫 Maestro 的软件供全球网民下载,用以观看勇气号传回的火星三维画面。根据美国《Associated Press》报道,自 1 月 4 日成功登陆火星之后的 24 小时内,NASA 网站首页和相关网站创造了 1.09 亿次的点击记录。这导致 NASA 不得不增加网站服务器带宽,以应付潮水般涌来的访问请求。
勇气号让大众对计算机语言的兴趣大增。人们想知道计算机语言是如何诞生、繁衍、变异、进化和消亡的,人们也对全世界程序员数十年来关于语言优劣的唇枪舌剑深感不解?为什么他们不说同一种语言?为什么语言不但没有实现统一,新的语言反倒是如雨后春笋一般破土而出?为什么 Java 是火星上唯一通用的计算机语言,而在地球上却不能一统天下?计算机语言,这个在开源运动先驱 Richard Stallman 眼中用来控制那些掌管人类信息社会的冰冷机器的神秘力量,从哪里来?到哪里去?
在探讨语言的巴别塔之前,我们首先要搞清楚什么是计算机语言?维基百科上的解释是:计算机语言是用来控制计算机行为的人工语言。
解释编程语言起源的最好例证也许是自动提花织布机,人们在卡片上编制好针脚顺序,织布机就能编织出人们想要的布料花纹,织布机好比是电脑,而布料的花纹则是计算机语言“编织”出的应用程序。
提花编织机最早出现在中国。据史书记载,西汉年间,钜鹿县纺织工匠陈宝光的妻子,能熟练地掌握提花机操作技术,她的机器配置了 120 根经线,平均 60 天即可织成一匹花布,每匹价值万钱。明朝刻印的《天工开物》一书中还赫然地印着一幅提花机的示意图。可以想象,当欧洲的王公贵族对从“丝绸之路”传入的美丽绸缎赞叹不已时,中国的提花机也必定会沿着“丝绸之路”传入欧洲。
不过,用当时的编织机编织图案相当费事。若要织出花样,织工们必须细心地按照预先设计的图案,在适当位置“提”起一部分经线,以便让滑梭牵引着不同颜色的纬线通过。机器当然不可能自己“想”到该在何处提线,只能靠人手“提”起一根又一根经线,不厌其烦地重复这种操作。
1725 年,法国纺织机械师布乔(B.Bouchon)突发奇想,想出了一个“穿孔纸带”的绝妙主意。布乔首先设法用一排编织针控制所有的经线运动,然后在一卷纸带上根据编织图案打出一排排小孔。启动机器后,正对着小孔的编织针能穿过去钩起经线,其他的针则被纸带挡住不动。这样一来,编织针就自动按照预先设计的图案去挑选经线,布乔的“思想”于是“传递”给了编织机,而编织图案的“程序”也就“储存”在穿孔纸带的小孔之中。
在高级语言发明之前,指挥计算机工作的程序是机器语言、汇编语言这样的针对特定计算机的“低级语言”写成的,“低级语言”由 0 和 1 这样的二进制码或者生涩的符号构成,以方便机器解读,这种非常不直观的语言害惨了程序员,他们需要像操作手工提花织布机那样不厌其烦地把自己的“命令”翻译成机器语言,其繁琐程度不亚于教导一个幼儿园小朋友:鸡蛋要剥了皮吃。在今天使用高级语言的程序员眼里,低级语言程序员同时也兼任着“人肉编译器”的苦差。最初的程序记录和输入方式现在看来也很原始,往往是通过打孔卡片、纸带、继电器开关旋钮这样的模拟介质(这比织布机的打孔卡先进不到哪里去)。
与低级语言对应的“高级语言”,拥有一个抽象层(在人类算法语言与机器语言之间充当翻译的编译器),使得程序员无需操心某一台具体的电脑硬件结构,而是把主要精力放在解决问题上。高级语言及编译技术彻底把程序员从繁重枯燥的机器代码中解放出来,同时也为软件生产从手工作坊走向工业化大规模生产提供了可能。所以说,高级语言是现代计算机科学的重要基石之一,也是最为核心的软件技术。早在 1955 年,IBM 的约翰·巴克斯发明了最早的高级语言 FORTRAN,随后开发了世界上最早的语言编译系统 KOMPILER,这被看作是软件业历史上划时代的一刻。
编程语言的五代十国
Noam Chomsky 坚信所有的人类语言都有共同的“深层架构”,这与大脑的“硬件”结构紧密相关。但是非常遗憾的是,计算机的硬件和算法始终处于高速的分化整合发展中,而计算机语言之间的差异也远比任何两种人类语言之间的差异要大。这一点,从最早的高级语言 FORTRAN 与 LISP 的分化就已经体现出来。
FORTRAN 问世之后,另外一位 IBM 员工麦卡锡想改造 FORTRAN 的功能,使它支持递归运算,但是由于改造的过程过于复杂,麦卡锡只好另起炉灶开发了表处理程序 LISP,麦卡锡希望他的 LISP 成为“制造一台拥有人类智慧的机器”的工具,LISP 后来也成为人工智能的标准语言之一,至今仍然有人使用。
FORTRAN 广泛运用的时候,还没有一种可以用于商业计算的语言。美国国防部注意到这种情况,1959 年 5 月,五角大楼委托格雷斯·霍波(G. Hopper)博士领导一个委员会,开始设计面向商业的通用语言(Common Business Oriented Langauge),即 COBOL 语言。
1958 年,一个国际商业和学术界计算机科学家组成的委员会在瑞士苏黎世开会,探讨如何改进 FORTRAN,并且设计一种标准化的电脑语言,巴克斯、麦卡锡都参加了这个委员会。1960 年,该委员会在 1958 年的设计基础上,定义了一种新的语言版本——国际代数语言 ALGOL 60,首次引进了麦卡锡提出的递归和条件表达式的思想。ALGOL 语言虽然没有被广泛运用,但它演变为其他程序语言的概念基础。
ALGOL 语言诞生之后,计算级高级语言的大家族逐渐人丁兴旺起来,人们对计算机语言的分类方法也见仁见智。通常,我们将计算机语言分为四类:命令式语言、功能性语言、面向对象语言和表述性语言。
命令式语言由一堆命令构成,组合起来完成一件特定的任务。打一个不那么形象的比方:一个生活缺乏规律的程序员早晨起床后,他的妈妈往往会对他发出这样一系列的“命令”:刷牙,冲咖啡,叠被子,打领带,然后到办公室打卡报到。最早的高级编程语言都是命令式的,比如 FORTRAN、COBOL 和 AlGOL。
功能性语言的鼻祖是麦卡锡发明的 LISP。FORTRAN 语言之父,约翰·巴克斯在发明 FORTRAN 之后也成为功能性语言的倡导者,在他的推动下,一些纯粹的功能性语言先后诞生,包括 ML、Miranda 和 Haskell 等。
面向对象编程语言的核心思想是把命令语句和它们调用的数据封装成一个个“对象”,人们不需要再为“对象”中的数据操作费心,这好比人们把金属丸、炸药、引信用金属壳封装起来,变成一颗子弹,显然,现代自动武器所使用的子弹远比早期需要每次射击前都人工装填火药的火绳枪能更快更好地“解决问题”,这也是面向对象技术流行至今的原因。面向对象语言的另一个重要特征是继承性,前辈们定义好的“对象”功能会得到继承,如此一直能追溯到面向对象语言的开山鼻祖—— SIMULA67。
最早引起程序界关注的面向对象语言是 Smalltalk。70 年代初,Alan Kay 在施乐公司的 PARC 研究中心开发出了 Smalltalk 语言。1984 年,IBM 在北卡罗莱纳州卡利市建立实验室,专门研发面向对象的软件开发工具。不久,该实验室推出了 VisualAge for Smalltalk,在面向对象开发工具技术领域取得了领先地位。随后,IBM 又推出了 VisualAge C/C++ 等一系列产品。这些产品不但至今仍然作为 IBM 平台上的主要开发工具而被广泛应用,而且成为后来一系列重要平台和产品的基石。
Smalltalk 还有一个鲜为人知的头衔,它是 Windows 操作系统图形界面的老祖宗之一。1979 年,苹果公司创始人史蒂夫·乔布斯拜访 Xerox 公司的 PARC 研究中心,在参观了 Smalltalk 编程界面后大受启发,“看到图形用户界面那一刻是我一生中最美妙的时刻,我当时想,未来的电脑都应该是这个样子……”乔布斯后来回忆道(Steve Jobs,from “Triumph of The Nerds,Part 3”)。1984 年乔布斯发布了 Macintosh 图形用户界面,这比微软的视窗界面要早很多。
虽然由于种种原因 Smalltalk 自身并没有流行起来,但从 1972 年贝尔实验室的 Dennis Ritchie 发明 C 语言开始,以及后来的 C++、Objective C 到今天的 C# 和 Java 这对冤家,面向对象的理念几乎影响着每一门新诞生的编程语言。
第四类计算机语言是逻辑型、关系型或表述型语言。这些语言的共同点是表述事实和关系,而不是一步步地编写算法。最典型的逻辑语言是 Prolog,而关系型语言的典范则是如今应用极为广泛的数据库查询语言。
在计算机语言的进化史中,还有一支有代表性的流派,那就是 1970 年诞生的,强调“结构化编程”的结构化语言,其中的代表是 Pascal 语言,结构化语言要求程序员严格规范程序中的数据类型和流程控制,以此来适应大规模的程序生产。而骇客们对严苛而死板的结构化语言的反抗运动催生了 C 语言(发明 C 语言的 Dennis Ratchie 热衷于电脑游戏,具有骇客的主要特征)。
计算机语言也不总是“深奥”和枯燥的。1967 年,麻省理工学院人工智能实验室西摩尔·帕伯特(S.Papert),为孩子设计出一种叫 LOGO 的电脑语言。LOGO 最初是个绘图程序,能控制一个“海龟”图标,在屏幕上描绘爬行路径的轨迹。用这种语言,儿童也能够用简单指令,以近乎游戏的方式指挥海龟画笔画出各种对称的递归图形,而且可以随意组词造句。
编程语言还可以根据最终用户和应用领域的不同进行分类。例如 FORTRAN 主要面向科学计算,COBOL 服务于商业领域。BASIC、Pascal、Smalltalk 和 LOGO 主要应用于教学领域。PHP、Python 等脚本语言则成为 Web 开发的首选。实际上在 20 世纪 60 年代中期 IBM 发明第一个通用语言 PL/I 以前,几乎所有的高级语言都是面向科学计算、商业等特定应用领域的。据 Unix 之父肯尼斯·汤普逊(Kenneth Thompson)回忆,C 语言实际上也是 PL/I 语言的简化分支,同时吸取了 B 语言的寻址算法。
程序员的钥匙
《程序之道》的作者吉佛雷·詹姆斯(Geoffrey James)讲述了这样一个故事。
一位 IBM 的业务主管问一位程序员:“设计一个操作系统,和编写一个财务软件包,哪个更容易呢?”
“当然是操作系统。”程序员的回答出人意料。
业务主管立刻发出一种不信任的惊叹:“与一个复杂的操作系统相比,一个财务软件包简直是小巫见大巫。”
“并非如此,”程序员说:“在设计一个财务软件包时,编程人员是作为一个中介者在观念各异的人之间起作用的。这个软件必须如何操作,它的报表必须是什么形式,它必须如何与税法一致,等等。相反,一个操作系统则不为其外观所限制。当设计一个操作系统时,编程人员只要在机器与人的思维之间寻找一种最简单的和谐就可以了。这就是为什么操作系统更容易设计。”
吉佛雷的寓言揭示了大多数编程语言的局限性,缺乏专业编程训练的业务和设计人员没有办法参与到应用软件功能的创作工作中去,而程序开发人员则写出了普通用户难以理解的复杂流程和界面。飞利浦消费电子部门的资深研究员史蒂文·凯芬(Steven · Kyffin)曾向《经济学家》杂志承认:“程序员和软件工程师,包括我自己,往往把软件功能搞得包罗万象,我们似乎有复杂的天然倾向。”显然,编程语言本身就像麦加大清真寺周围的高墙,把设计者、使用者与软件功能的核心教义远远地隔开了。编程语言,成了修复软件工程巴别塔的第一道障碍。
最近几年,一种新的语言的兴起,又让软件用户燃起了热情。这就是业务自然语言(Business Natural Language),它是领域专用语言(Domain Specified Language)的一种。领域专用语言号称是“非程序员的编程语言”(Programming Language For Non-programmers),它是一种最终用户能够轻松掌握并用来设计、开发特定业务领域应用的“智能”计算机语言。
假如你是一位广告公司的网站设计人员,你也许不懂什么 Java、C# 这样的庞杂臃肿的通用语言,也没接受过系统的程序开发培训,但是你可能很快学会 Ruby on Rails,进行过去只有专业人员才能进行的 Web 开发工作,例如把 Google Map 和各地连锁店的暑期促销信息混搭起来,或者让客户的产品信息能够在搜索引擎排名上“插队加塞”。Web 开发本身已经更多地与新媒体渠道建设、网络营销和电子商务等业务需求紧紧联系在一起,日益膨胀的 Web 开发需求与与职业编程人员的匮乏让 Ruby on Rails 这样的语言快速流行起来。对于企业软件领域来说,业务自然语言的前景同样诱人,企业的人事经理、销售经理或生产、物流经理不一定个个都拥有 DBD(数据库开发人员)头衔,他们甚至可能压根没有听说过 Web Service(SOA 架构的基础技术),但是通过业务自然语言,他们能修改 ERP 或企业信息门户的业务流程,甚至根据需要随时开发新的应用。
实际上,最早的高级语言 FORTRAN 和 COBOL 就属于业务自然语言,这些语言帮助科学家或工程师完成跟他们业务有关的程序开发,而无需依赖那些精通打孔卡片或者汇编语言的专业程序员担当“二传手”角色。美国国防部在 1959 年 COBOL 语言开发会议上曾一再强调:“这种语言需要尽可能多地使用简单的英语。”(国防部的这条要求导致 COBOL 被今天的专业程序员抱怨成“哩嗦”)
降低计算机编程的学习门槛,让各行各业更多的用户掌握计算机编程语言,更深刻地参与到 Web 和电子商务应用开发中来,已经成为内容互联网之后的“软件互联网”的关键。实际上,软件最初本来就是计算机用户自行编写的,就像 IBM701 的用户编程俱乐部和“分享”组织那样。
语言的战争
一份调查报告显示:作为最早的“非程序员编程语言”,即使在 FORTRAN 引入市场 1/4 个世纪之后,90% 的计算机在超过 70% 的时间内都在使用这种程序语言来处理工程设计和科学计算工作。50 年后,FORTRAN 所承载的“面向用户”以及“降低开发成本”的软件理想正在 Web2.0 时代燃起熊熊大火。
经过几十年的发展,编程语言超过了 2000 种,但真正常用的仍然不过寥寥数种,不同流派、不同领域、不同技术特点的计算机语言开始了长达半个世纪的征战,这倒不是因为上帝眼红人类开始大规模生产软件,而是以产品为中心的传统软件商业模式必然经历一个“诸侯割据”的阶段。
在中华英才网或者 Vault.com 随便打开一份软件工程师的招聘说明,你将发现技能要求一栏无一例外都注明“需精通 A、B、C、D ……编程语言……”。这种人事经理的例行公事在人们的大脑里形成了一个印象,那就是计算机语言的选择与程序员的能力和职业前景似乎存在千丝万缕的关系。
20 世纪 30 年代,语言学家 Edward Sapir 和 Benjamin Lee Whorf 提出一个观点:“采用什么样的语言决定了一个人的思维模式”。该观点在人类语言学界饱受批判,但在计算机语言领域却是非常适用,不同类型的编程语言产生了大相径庭的问题解决方法。不幸的是,这种观点也成为后来计算机语言战争的导火索。
从 1956 年 FORTRAN 语言诞生之日起,语言的家族争斗持续了足足半个世纪,这几乎跟软件的历史一样长。1975 年,结构化编程大师 Edsger W. Dijkstra 在一份题目为《那些难以言说的伤人事实》的备忘录中形容 COBOL 语言“脑残”,是对程序员的一种迫害,而把 PL/I 比喻为“致命疾病”。2008 年,当 Java 之父 James Gosling 谈到微软的 C# 时,也全然不顾大师风范:“我们一度很担心他们(微软)会做出什么创造性的东西——现在看来,他们专注于一个平台的做法前途堪忧。”今天,由于 Java 程序员和 C# 程序员的数量几乎势均力敌,微软和 Sun 之间的互相攻击从来都是刀刀见血。
面对语言的残酷战争,程序员们为了增加自己的“存活”几率,“被迫”地、不停地学习新的编程语言,这让程序员成为世界上压力最大的职业之一。不同语言的创造者、建设者、学习者、销售者和使用者都希望自己精通的语言能赢得这场计算机语言的混战。就像网络游戏《魔兽世界》里面战火连天的番邦部落,都希望扩大各自的领地,结束烽火连天、民不聊生的的军阀混战,成就“书同文、车同轨”的统一大业。
互联网将编程语言的发展推动到了一个新的阶段:多语言混用的和平时期。如今一个网站管理员至少得通晓将近半打的网络编程语言,如构成网页的最基本的超文本链接语言 HTML,让页面更加美观的 CSS 样式表,以及可以设计弹出窗口的 Javascript 脚本语言。在服务器端,内容会以 XML(扩展标记语言)格式编码,访问后台数据库需要用到 SQL(标准查询语言,我们会在第 3 章详细介绍 SQL 的前世今生)。而网站前端网页和后台数据之间则通过 PHP、Perl 或者 Python、Ruby 等“胶水”语言控制,形成完整的网站功能。如果你需要为大型企业或电子商务网站进行 SOA 开发,那么你还要精通 WSDL 等 Web Service 语言。
语言的血腥斗争导致极高的“阵亡率”和更新率,这也一度让人们认为程序员的职业寿命与时装模特没有太大差异。不过,少数编程语言有着极长的寿命,如 FORTRAN 和 LISP,今天已经年过半百但依然在科学计算和工程领域发挥着余热。大多数编程语言则像流行歌曲,重复着从众星捧月到门庭冷落的生命周期。21 世纪,占据流行语言排行榜榜首的是脚本语言,例如 Python、Ruby 和 PHP 等。脚本语言一般出身贫贱,它们源自批处理语言,最初用来粘合其他程序,IBM WebSphere 的首席技术官 Jerry Cuomo 把他们比喻成“胶水”语言,这非常形象。今天的动态脚本语言已经自成一统,成为编写互联网应用的流行语言。
从 FORTRAN 到脚本语言,计算机语言流派之间的唇枪舌剑从来就没有停止过,人们总是期待发明一种革命性的语言一统天下,重建软件工业化的巴别塔。在 20 世纪 60 年代,IBM 主持开发的 PL/I 试图扮演这样的救世主,后来美国国防部力挺的 Ada 也曾妄想号令天下,直到 1995 年 Sun 公司正式颁布的 Java 语言,宣称:“编写一次,到处运行”(是的,Java 甚至运行到了火星表面)。遗憾的是,语言的统一革命依然遥遥无期。相反,随着互联网的高速发展,新的计算机语言更是如雨后春笋,尝试普及一种“最棒的”编程语言的想法就像在全世界普及“世界语”一样变得遥遥无期。开创计算机高级语言时代的 IBM 公司如今开始另辟蹊径,那就是将能够掌握各种计算机“方言”的程序人员聚在一起高效率开发软件的 IDE(集成开发环境),不管这些开发者来自于企业“科班”队伍还是开源软件社区,这就是 IBM 领导的 Eclipse 和 Project Zero 开发项目(我们将在随后的章节中详细介绍)。
“面向用户”的 FORTRAN 与 COBOL
《软件为什么这样糟》的作者,David S. Platt 对 20 世纪上半叶的软件有着如下的描述:“就像在 20 世纪最初几年驾驶汽车一样,计算机的早期用户都知道使用计算机是一件麻烦的事情,但是我们很少因此感到失望。因为几乎所有的用户自身就是程序员。很少有人会发现需要或者期望计算机更加好用。我们接受了各种困难——及时配给制、神秘的命令、晦涩的文档等,就像机械工程师们能够接受手摇引擎和经常出现的轮胎破损一样。计算机在当时算是最好的东西。我们很高兴完成了一些重要的计算工作(人口普查、破译敌人的密码等),机械工程师们(有了机械行业的新工作,虽然不是很舒服)非常高兴再也不用打扫牲口棚。我们喜欢摆弄自己的程序,按照程序设计师预想之外的方式使用这些程序,就像早期的‘有车族’喜欢自行修理引擎。如果某人告诉亨利·福特想在自己的 T 型汽车上安装一个茶杯架,这个人一定会被福特取笑。”
显然,在哈佛大学教授微软 .net 课程的 David S. Platt 对早期的计算机软件的易用性深恶痛绝,但谁又会体量当年那些操着机器语言,通过继电器开关和打孔卡片与硬件“对话”的程序员呢。在高级语言出现之前,为了完成一项新的计算任务,程序员甚至需要用钳子改变线路板的接线,或者像个夜总会的音乐 DJ 那样飞快地在布满旋钮的面板上上下其手,来实现最原始的“编程”。
机器成了早期计算机编程的主角,因为当时的计算机硬件资源极其昂贵和稀少,一台 IBM701 计算机的月租金超过 1 万美金,而且第一批产量只有 18 台,而根据《Dr. Dobb's Journal》技术频道的编辑 Ken North 的回忆,60 年代一台 IBM 1410 计算机的价格抵得上 300 辆野马跑车。于是,最大限度地发挥计算机硬件性能成为第一要务,但是当编程的费用超过硬件费用后,这种暂时的妥协被打破了。20 世纪 50 年代初期,IBM 的工程师和 IBM 的客户几乎同时抱怨:给一台 701 编程所需的经费甚至会高于购买这台机器的价格,而且几乎一半的机器运行时间被用在了程序的除错调试上。约翰·巴克斯在接到一项计算月历的任务后,深深体会到用机器指令编写程序的困难性。他后来回忆说:“每个人都看到程序设计有多昂贵,租借机器要花去好几百万,而程序设计的费用却只会多不会少。”随着计算机硬件性能的提升和价格的不断下降,以及使用晦涩的汇编语言和机器指令进行程序开发的成本不断递增,汇编语言赖以生存的价值体系逐渐崩溃,面向程序员的高级语言揭竿而起,成为人们摆脱“机器帝国”奴役的希望。
面对客户的抱怨,1953 年 IBM 的约翰·巴克斯提出创造一种可以使用普通数学标记的“代数编程语言”计划,这个计划产生了第一个计算机高级语言—— FORTRAN。巴克斯希望这种语言能够很容易被科学家和工程师掌握,这个想法得到了联合航空公司罗伊·纳特在内的支持和帮助,但是更多的 IBM 用户对这个计划抱有怀疑态度。幸亏有联合航空公司的鼎力支持,罗伊·纳特也正式加入 IBM 工作组参与编译器的开发工作。1957 年,经过艰苦的技术攻关和测试工作,FORTRAN 语言开始正式向 IBM 的客户发布,并立刻激发了客户的极大热情。西屋电气公司幸运地成为 FORTRAN 的第一个商业用户,巴科斯给了他们一套存储着语言编译器的穿孔卡片。FORTRAN 的诞生过程应了当代一句管理名言——“客户不总是对的”,用户有时候并不是真正了解自己的需求,对于一项革命性技术的应用来说,更是如此。
1976 年,巴克斯因为发明 FORTRAN 语言被授予国家科学最高荣誉奖章,1993 年,因为在 FORTRAN 语言开发中的杰出贡献,巴克斯又获得了在工程设计方面的“德雷博奖”,巴克斯也是第一位获此殊荣的 IBM 员工。“我们确实认为这个系统能在社会上产生巨大的影响,因为它能使 704 的编程工作变得更加快速、便宜和可靠”。FORTRAN 之父约翰·巴克斯回忆说:“我们同样也期望着,如果我们能够实现这些目标,其他公司和生产商就会以我们为榜样,为节省编程的成本开发出相似的系统,当然这些系统所使用的语言和我们的不同,却也有相似之处。”
在试验阶段,IBM 没有对 FORTRAN 进行所有权声明,并且还免费为客户提供存有 FORTRAN 编辑器的磁带,这使得 FORTRAN 在当时的计算机用户中迅速流行起来。
受到 FORTRAN 巨大成功的影响,在接下去的几年里,有上百种高级语言被开发出来了。其中大多数在语言的战场上“阵亡”了。
60 年代中期,美国达特茅斯学院约翰·凯梅尼 (J. Kemeny)和托马斯·卡茨(T.Kurtz)希望能为没有多少编程经验的人提供一种简单的语言,尤其是那些非计算机专业的学生也能通过这种语言学会使用电脑。他们在简化 FORTRAN 语言的基础上,研制出一种“初学者通用符号指令代码”(Beginners All purpose Symbolic Intruction Code),简称 BASIC。由于 BASIC 语言易学易用,它很快就成为最流行的电脑语言之一,几乎所有小型电脑和个人电脑都在使用它,包括比尔·盖茨最初创业的时候,也是用 BASIC 语言编写应用程序赚取第一桶金。BASIC 的生命力也很强,经过不断改进一直沿用至今,出现了像 QBASIC、VB 等新一代 BASIC 版本,甚至在视窗时代仍在发挥着巨大的威力。
FORTRAN 语言之后,面向商业领域的 COBOL 语言则在编程语言的历史上占据着震古烁今的显要地位。COBOL 语言出身行伍,一开始是为了开发政府和军用系统而设计的,后来被广泛运用在各种军、民用大型系统中,一度是世界上最流行的应用程序开发语言。据估计,若以现有软件系统中的代码行数量而论,COBOL 至今仍然名列前茅。COBOL 的制定本身就是时代性的产物,在编程语言竞争异常激烈的今天,COBOL 的全行业达成一致规范的壮举是不可能得到复制的(看看微软的 C# 和 Java 在 ECMA 标准组织大门前的械斗吧)。
发明 COBOL 语言的最初设想可以追溯到 1959 年 4 月的一次集会上,6 家来自计算机用户和制造商的代表聚在一起谋划另外一个重大会议,意在发展一种“共同的商务语言”,这个想法得到了美国国防部的大力支持,因为它“符合国家利益”。于是 5 月份,这个重大会议在五角大楼召开,60 年代计算机行业的领袖们悉数列席,包括 IBM、Honeywell、NCR、Philco、RCA、雷明顿·兰德和 ICT 公司的代表和 7 名政府代表以及 11 名用户代表。会议宣布成立一个兼顾长短期目标的,具有广泛代表性的成员组成的委员会,其中短期项目的目标是开发一种初步的商用语言,这种语言需要尽可能多地使用简单的英语,可以让不懂电脑的人也能看懂,程序只需要少量的修改就能运行在不同类型的电脑上(国防部的这条要求导致 COBOL 被今天的专业程序员抱怨成“哩嗦”)。两种已经被市场承认的商用语言—— IBM 的 COMTRAN(后来的商用翻译机)和斯佩里·兰德公司的 Flow · Matic 成为 COBOL 委员会的重要参考,9 月,这种“初步的商用语言项目”被命名 COBOL(通用商务语言)。同年 12 月,对这种初级语言的审定过程完成,但在接下来的一年中又经历了大量的修改。
没有人能想到,作为临时性项目开发的 COBOL 语言,短短几年内就成为商用程序领域的主导语言,获得巨大成功,COBOL 委员会一个成员曾经害怕这种语言的命运不会太长久,特地为它制作了一个小小的墓碑,委员们还在这个墓碑前合影留念。然而,COBOL 语言却“幸存”下来了。
甚至 COBOL 语言的奠基者之一—— IBM 公司,都没有对 COBOL 语言的“寿命”和市场潜力作出准确的评估,由于一直忙着普及自己的“商业翻译机”,直到 1960 年 COBOL 语言的更新版本 COBOL61 开发出来以后,IBM 才开始使用 COBOL 语言,而 IBM 的 COBOL 编译器直到 1962 年 1 月才发布。1963 年,美国国家标准局将它进行了标准化;用 COBOL 写作的软件,要比其他语言多得多。但它对今天电脑界最大的影响,却是那条暗藏杀机的“千年虫”(Y2K),这也是人们始料不及的。
Java 的涅槃
“消灭微软的渴望,甚至已经强过了推广 Java 的意愿。”
—— 1995 年,《Wired》杂志
1994 年商业互联网开始成熟,作为一个时代的标记,网景公司在 1995 年成为首家登陆纳斯达克的网络公司,开盘当天股价从 28 美元飙升到 72 美元。无独有偶,1994 ~ 1995 年软件史上也发生了一连串的历史性事件:先是 Linux 在 1994 年发布了 1.0 版本内核,第二年微软公司发布了决定性的产品:Windows 95;Sun 公司则正式发布了 Java1.0 编程语言及平台;同年 IBM 公司成立了软件部门,并在接下来的 5 年内迅速超过个人软件霸主微软成为全球最大的软件服务公司。
从 20 世纪 60 年代 IBM 给软件和硬件“松绑”,奠定软件产业基础,到 1995 年成立 IBM 软件部门,软件产业经过 30 年风雨沉浮,终于迎来了互联网引发的第二次革命。
今天大红大紫的社会化网络 Facebook 的创始人马克·扎克伯格,在 1995 年即将升入六年级,他使用着一台 486 电脑,并买了一本《C++ 傻瓜书》开始自学。1995 年,求伯君卖掉了自己的别墅,全力开发 WPS,1995 年,中国第一个游戏软件《中关村启示录》 诞生。
在大革命时期诞生的 Java 语言,从命名开始就走上了传奇而坎坷的道路。
作为 C++ 和 COBOL 语言的继任者,Java 源自 Sun 公司 1990 年开始的“绿色计划”,最初的目的是研究数字家电之间的通信技术。James Gosling 负责为设备和用户之间的交流创建一种能够实现网络交互的语言,这种语言在 1992 年 9 月 3 日开始应用于 Sun 工作站的远程遥控。1995 年 5 月,Sun 公司正式发布 Java 编程语言及平台。一开始,James Gosling 把这种新语言命名为“橡树”(Oak),因为 James 的办公室窗户外正好有一棵郁郁葱葱的橡树,但随后为了配合“绿色计划”的商业推广,Java 被改名为“绿色”。看到这里任何一个有点艺术细胞的 Java 程序员都要震惊了,这个名字太平淡无奇了。非常幸运的是,在 Java 语言正式发布前几天,Sun 公司的命名小组花费了整整一个下午时间从一堆随机单词中选中了响亮的“爪洼”(Java),从而避免了 Java 因为一个过于平庸的名字而被埋没。而 James · Gosling 在 2007 年给 Sun 公司首席执行官 Jonathan · Schwartz 的一封电子邮件中,承认自己当初中意的名字是“Lyric”(抒情诗),Sun 公司市场部门相中的是“Silk”(丝绸),而律师最后选中了排在第四备选的“Java”。Gosling 应该感到庆幸,他今天被尊称为“Java 之父”而不是“Silk”之父,这会让人联想到一种吃桑叶的虫子。
就在 Java 发布的那年春天,“Java 热”迅速超过了“网景热”,数百家小软件公司一窝蜂涌向 Java“咖啡机器”,争先调制功能各异的 Java Applets ——一种可以嵌入 Web 浏览器执行丰富功能的 Java 小程序。而企业中的开发者也开始用 Java 小程序丰富企业网站的功能。由于 Sun 微系统公司并不生产软件产品,很难找到把 Java 转化为一种重要的营业收入,于是 Sun 以 12.5 万美金的价格把 Java 分别授权给微软和网景这对冤家,以及其他一些大的 IT 公司。Java 的开发工具则以每套 100 美金的价格出售,但这点收入对于 Sun 公司 1996 年高达 160 亿美金的销售收入来说,实在是微不足道。当时,华尔街的投资经理们经常这样安慰自己:“Java 对于 Sun 最大的价值在于其控制 Web 开发标准的战略意义。”
虽然 Sun 公司的 Java 语言险些成为 MBA 商学院的反面教材,但是其他推动 Java 前进的重要力量却获益匪浅。软件业有一个共识,那就是 Java 的最大赢家是 IBM 和 BEA,随着 BEA 于 2007 年被 Oracle 收购,Java 最大的赢家只剩下了 IBM。人们不禁好奇,为什么在 Java 的商业化道路上,IBM 能从中获益,Sun 却扮演着一个悲情的角色。其实 IBM 在 Java 的投入上并不比 Sun 少,是 IBM 的电子商务战略和面向服务的战略转型导致了两者的不同。
1995 年 12 月,IBM 正式获得了 Java 许可证,从此 IBM 软件技术开始加速进入 Java 时代。这时距离 IBM 软件集团成立仅仅不到 10 个月,距离 Java 的发布不过 7 个月。次年 11 月,IBM 又获得了 JavaOS 和 HotJava 许可证。
在 Java 发展最初阶段的 1995 ~ 1997 年,IBM 的主要精力放在完善 Java 基础设施上。IBM 成立了 Java 测试实验室,与 Sun 一起开发 Java 台式机规范,并且凭借自己雄厚的积累,迅速开发出了最快的 JVM(Java 虚拟机)和最快的 Java 编译器 Jikes。IBM 的 JVM 在效率上曾长期居于各家之首,并且拥有一些独特的优化技术,比如尾递归优化,直到今天仍领先其他的 JVM。
1997 年 4 月,IBM 以二进制格式在 Alphaworks 网站发布了 Jikes 编译器。紧接着,1998 年 7 月,IBM 发布了 Linux 版本的 Jikes,这在程序界刮起一股风暴,3 个月内的下载量超过了过去 15 个月的总和。严格遵守 Java 规范的 Jikes 成了 Java 技术普及的强力引擎,同时也表明了 IBM 对开放标准的坚定支持。1998 年 7 月,IBM 发布了 Linux 平台的 Jikes 版本,同年 12 月,在众多用户的请求下,IBM 宣布 Jikes 成为开源项目,这开创了大型商业软件公司投入开源事业的先河。这对 Java 在 Linux 平台上的成长,以及后来的 Apache、Eclipse 等重大开源项目来说意义深远。
名词解释:Eclipse
Eclipse 的前身是 IBM 的 Visual Age for Java(简称 VA4J)。把这个项目免费赠送给 Eclipse 社团(www.eclipse.org)前,IBM 已经投入超过 4 千万美元进行研发。Eclipse 社团的创始人还包括 Borland、Merant、QNX Software Systems、Rational Software、Red Hat、SuSE、TogetherSoft 和 Webgain,后来加入的还有 Oracle 等公司,实力相当雄厚。如今,IBM 通过附属的研发机构 Object Technologies International(简称 OTI),继续领导着 Eclipse 的开发。
1998 年 Java 2 的发布标志着 Java 作为基础平台的成熟。1999 年 J2EE 规范发布,标志着 Java 作为企业计算平台的成熟。同时,企业已经普遍开始在内部使用 Internet 协议和基础设施来部署应用系统。时机已经成熟,IBM 瞄准了自己真正的目标——中间件。最终,IBM 的 Websphere 中间件产品成为旗下各软件产品和服务的“黏合剂”,同时也坐稳了中间件市场三强位置。
2001 年,微软终于对 Java 的挑战作出回应,推出了其 .NET 战略的核心:C# 语言。时任 SAP 中国区 CTO 的芮祥麟在答复我的一封电子邮件中这样评价道:“Microsoft.NET 有几个关键点。其中最重要的一点是改革商务模型。微软感觉到只靠销售软件包的商务模型没有什么前途,该公司打算今后将中心转移到可以在网络上使用的‘ 服务’型商务。Microsoft.NET 的出世让我们认识到,IT 业在推进产业变革的同时,自身也在改变和转型,IT 业的价值越来越多地透过网络来实现——从提供产品、技术到服务、咨询。”
成为 C# 的死对头之前,Java 一开始是一个面向小型应用环境的,而不是面向企业级应用的设计。意外的是,Java 在 IBM、BEA 和 Oracle 等公司的推动下,在企业级应用中不断发展壮大,并已成为企业级业务应用的首选开发平台。Java 的另一个突破口是移动应用,基于手机平台的 Java 软件如今已经形成了上千亿美元的巨大市场。
显然,对于 Java 在新兴市场的种种“意外”机遇,Sun 公司都没有能够及时调整战略,错过了在 Linux 市场的话语权和巨大商业机会。倒是 IBM 领导的 Apache Harmony 和摩托罗拉的 Java ME 早早开展了 Java 虚拟机和编译器的开源项目,这些开源虚拟机在授权许可方面对 Linux 厂商相对友好,因此得到了 Redhat、Suse 等众多 Linux 厂商的广泛支持,这让 Sun 公司非常懊悔。而 Sun 公司雄心勃勃的“绿色计划”,花费 20 亿美金收购低端 Linux 服务器 Cobalt 都先后宣告失败,甚至 Sun 对 Solaris 操作系统的开放也大大滞后于蓬勃开展的 Linux 运动。
Sun 在 Java 的集成化开发环境(IDE)也落了后。为了方便开发者,Sun 把 Java 区分为 J2SE(Java 2 Standard Edition)、J2EE(Java 2 Enterprise Edition)、J2ME(Java 2 Micro Edition)和 Java Card 4 种平台。J2SE 是所有 Java 技术的基础,不管开发人员要开发什么平台的 Java 应用程序,都必须先从 J2SE 学起。J2EE 技术着重于企业服务器端的应用。J2ME 主要针对嵌入式系统,包括手机、PDA 等。针对手机应用程序的开发,Sun 还提供了免费的 J2ME Wireless Toolkit。Java Card 技术用来开发可以植入 IC 智能卡中的应用程序。
以上 4 种平台的软件开发包(Software Development Kit,SDK)都是免费的,可以从 Sun 的网站下载。但正规的软件开发项目需要开发工具来提高开发效率。这样的工具叫做集成开发环境 (Integrated Development Environment,IDE)。Borland JBuilder 和 IBM Eclipse 这两个 IDE 最受 Java 程序员的青睐,而 Sun 自己的 IDE 却名不见经传。2004 年以后,Sun 才开始努力推进 NetBeans 和 Java Studio 的开发。
Sun 也没有听从 IBM 的劝告及早彻底开放 Java。2003 年,IBM 宣布将花费几年时间,把其所有开发工具都建立在源代码开放平台上。在 IBM 新兴技术部副总裁 Rod Smith 2004 年给 Sun 的一封公开信中,我们可以看到 IBM 对 Java 开源的热切期待。但当年离职的 Sun 公司前任总裁麦克里尼依然固执己见:“Java 永远不会开源。” 时任 Sun 公司软件部副总裁的 Jonathan Schwartz 表示:“考虑到兼容性问题,公司不赞成早前 IBM 提出的让 Java 成为开源软件的合作建议。由于通用公共认证(GPL)鼓励开源软件‘百花齐放’,因此某个软件的不同实现版本中常常会存在分歧。他还举例说 Red Hat 事实上就已成为了北美地区 Linux 的专有发行商。Java 不会走分化的道路,因为这事关兼容性问题。而兼容性问题对于 Java 架构来说是至关重要的。”
不管找出什么样的理由,Sun 公司就是不愿意放松对 Java 的控制,这对 Java 开源社区来说是一个沉重的打击。
2006 年 10 月 13 日,升任 Sun 公司首席执行官的 Jonathan Schwartz 对 GPL 的态度发生了 180 度的大转弯,宣布 Java 虚拟机和编译器遵循 GPLv2 协议开放,这与 2004 年 Schwartz 认为 GPL 开源协议将分化 Java 的判断自相矛盾。
这个迟到的决定依然让 Java 开源社区为之振奋,不过 Sun 公司没有选择 IBM 主持的 Apache Harmony 开源项目中进行 Java 的开放,这让 IBM 非常失望,因为 Apache 的 Java 开源项目已经非常成熟,并且投入巨大。Sun 刻意另起炉灶,在 GPL 协议下重新发展 Java 开源项目,表面上是对遵循 GPL 的 Linux 业界示好,实际上是对 Java 战壕里的老战友们的一种“排挤”。这种排挤,在软件 2.0 的今天,显得缺乏商业竞争的平衡感。Sun 公司的一系列战略失误,耽误了 Java 的大好青春,同时让整个 Java 产业链付出了时间代价。而这些,即使不考虑商业利益因素,也背离了 Sun 公司扳倒微软的最大心愿。Java 阵营出现的任何不“Harmony”(和谐)的因素,都是微软所喜闻乐见的。
但是一切已经无关大局,IBM 在开放的开发平台上已经遥遥领先,Apache、Project Zero 和 Eclipse 等开放平台已经成为 IBM 下一代 Web 开发技术的新引擎,而 Java 语言,也已成长为企业级应用开发的中坚力量。
2005 年以来的 Web2.0 运动,掀起了动态脚本语言的热潮,而 Web 应用开发,本来是 Java 的老本行。但是动态脚本语言好学易懂,适合非职业程序员使用,它们也反过来推动 Java 技术向简洁和敏捷回归。
以 PHP、Perl 和 Python 为代表的动态脚本语言能够在 Web 开发领域独领风骚,并不是因为他们的语法更严谨优雅,而是更为容易被最终用户掌握,进而实现敏捷快速的 Web 应用开发和部署。这就像奔驰与宝马共用汽车零件一样,你就不难理解 Java 与微软 C# 语言这对宿敌在你死我活的标准之战中,依然能达成兼容性的城下之盟。今天,大多数企业信息基础设施都会采用面向 Web 的混合技术方案来实现最大限度的整合和兼容性。你死我活的标准争夺,在 Web2.0 时代,既不能让客户满意,也不利于整个软件产业的可持续成长。毕竟,Web2.0 所蕴含的巨大软件市场,已经远远超出了传统意义上的企业电子商务和商业互联网应用。还记得我们之前提到的 21 世纪软件生存法则吗?——数据比软件重要!另外一条配套法则是:技术的复杂性必须向客户需求低头。开发平台与开发工具的绑定并不能为微软带来决定性的胜利条件,在微软 2008 年试图以 440 亿美元收购的雅虎公司中,就有 2 万名以上的开源软件技术人员。语言和平台之争,不再是 Web2.0 时代的制高点。
这时候,我们突然发现今天的 IBM 与微软的关系与 80 年代两家企业的关系正好发生了对调——而微软、Sun、英特尔这 3 只刚刚成年的“大象”,也需要像 IBM1995 年以来所作的那样,证明自己也能在革命的风暴中轻快地跳舞。
互联网的快言快语
重要的是数据,而不是软件。
重要的是速度,而不是语言。
重要的是整合,而不是编码。
天下武功、唯快不破
近年来,随着用户对数据和业务流程的日益重视,软件开发语言的生存法则发生了巨大变化,完美的语法、庞大的类库支持、资深程序员的拥戴、大量的商业关键应用都不能帮助 Java 阻止动态脚本语言的迅速流行。因为,软件本身的价值体系已经随互联网经济的演进而乾坤斗转。
从 1995 年软件部成立,到 1998 年 IBM 开放 Jikes 编译器,IBM 只花了不到 3 年时间“空中更换机翼”,开始了开源战略的惊天转型。这期间,微软的盖茨还在为自由 / 开源软件的盈利模式而百思不得其解,而 Sun 公司前任 CEO 麦克里尼坚称“Java 永远不开源。”
市场给出的答案是,2004 年,Linux 已经迅速占据了 43 亿美元的服务器操作系统份额,而 2005 年更迅速达到了 53 亿美元,同时移动 Linux 在移动通信领域产生了一个千亿美金的市场,甚至有研究公司预测类似 Ubuntu 的桌面 Linux 操作系统将在 2010 年刮走 50% 的 Windows 市场份额;Firefox 仅仅用 4 年时间就从微软手中抢走了两位数的浏览器市场份额(要知道 21 世纪初微软是如何兵不血刃地干掉了 Netscape)。
CEO 们“天下武功、唯快不破”的管理哲学进一步影响到了整个商业技术领域,软件产业自然也不能幸免,在更快的和更好的编程语言之间,更快的不但生存下来,而且日益流行。这就是为什么日益复杂的 Java 没有成为 Web 开发的统治性语言,而没有什么像样的语法,轻量级的脚本语言,如 PHP,反而能得到 Facebook 这样顶尖的 Web2.0 网站的青睐。
Sun 公司的 CEO,Jonathan Schwartz 在个人博客中为此唏嘘不已:“技术上讲(互联网上的),软件产业已经与媒体产业融合,不论是 OpenSolaris、MySQL 还是周杰伦的最新专辑,亦或 Youtube 上的一段板球冠军杯视频,都不过是数字文件而已。”Schwarz 对软件的最新定义似乎有悖于经典的软件定义,例如在程序哲学家 Peter Suber 的眼里,软件至少应该是“可以执行任务或输出结果的数据纹理和模型”,周杰伦的网络 MV 虽然只能被播放软件执行,但最终还是被热情的粉丝通过眼镜和耳朵输入大脑,最终输出了快乐和肾上腺素。从体验经济或服务经济的高度俯视,这两者确实没有什么本质差异,他们都是某种可通过网络复制、传播并消费的内容服务而已(当然,相比 Jonathan Schwartz 的“顿悟”,我更惊诧于周杰伦的影响力)。
是的,我们很难说清楚 Widget 这种小程序到底算是软件,还是一本夹在报纸中用来增加广告收入的“副刊”,软件业终将回归解决商务问题的根本之道。客户只关心如何在 Web 上开展新业务、建立并推广品牌、寻找最好的交易机会;如何增加企业网站的访问客流、优化企业业务流程、把独到的业务方法与企业外部的互联网商务环境整合起来发挥倍增的竞争优势;而不是让客户困扰于选用何种操作系统、开发语言,以及各种与业务问题无直接关系的基础技术设施维护问题。
“请把复杂、麻烦和争斗留给你们这些孤芳自赏的 Geek 们自己去解决吧,给我一个能快速搞定问题的业务解决方案!”这是忍无可忍的客户对软件业的忠告。
Yes PHP !!
请原谅我使用了一个英文标题,Yes PHP 听起来更像是一句互联网直销广告,如果您曾经从 PPG 公司订购过衬衣的话。动态脚本语言 PHP 的“意外”成功,为程序语言的生存法则增加了新的注释:敏捷、贴近最终用户。
为什么 Facebook 会选择 PHP 这样的“玩具语言”?为什么谷歌的在线文档服务全部采用 Python 脚本程序编写?全球最大的 Web2.0 图片社区 Flickr 的 Cal Henderson 一语道破:“Languages don't Scale,Architecture Scale。”显而易见、敏捷开发,是 Web2.0 商业赛道上保持企业灵敏姿态和操控性的关键所在。笨重的卡车足够稳健,却无法赢得下一场弯道追逐赛。
第一个非 Unix 脚本语言 REXX 是 IBM 的 Mike Cowlishaw 在 1979 到 1982 年之间完成设计的,这个语言在 1994 年的 PC-DOS7 上一同发售。时下流行的动态语言,包括 PHP,Perl、Python 和 Ruby,都是用 C 语言写的,他们几乎都是在 Unix 操作系统上成长起来的,但它们今天的生命力则主要归功于类似开源软件社区驱动模式。更新快速、没有刻板的语言规范,而且不受某个公司的利益驱使。这些语言往往是使用者自己开发的,用来快速搞定手头的工作(例如,Sun 公司的首席科学家 Bill Joy 曾在上大学的时候写过 C-Shell 脚本语言)。脚本语言的这种“敏捷”本质在 Web 应用快速变化的今天受到广泛青睐。各种 PHP 程序如 Wordpress、Drupal、mediaWiki、osCommerce、SugarCRM 正在流行,大多数业务应用程序,包括 CRM、ERP、报表、文档管理等等也都开始转向了 Web,看上去游击队般的“前端”动态语言开始挑战 Java。
作为全球最知名的 Web2.0 社交网站,Facebook 的前端使用了 PHP 脚本语言,这让那些热爱 PHP 的 Web 程序员们信心爆棚。但是 PHP 教父 Andi Gutmans 回忆自己几年前参与的一个基于 IBM Websphere 的大型企业级项目时,发现其中最优秀的开发人员与 Andi 谈起 PHP 和动态语言时,还是将之视为玩具语言。这让 Andi 伤透了心,但这在当时正是整个 Java 界对动态语言的典型心态。而且也正是由于 Sun 对 Java 的控制,给了 PHP 和 Perl 等动态语言发展空间。
直至今天,关于 PHP 等面向 Web 的动态脚本语言优劣的争议仍然在继续。但 IBM、Oracle 等企业级软件的领导者已经开始拥抱 PHP,全力投入 Web2.0 开发。曾经伤害 Andi 感情的 IBM 软件部门早早放下偏见,IBM 领导的 Eclipse 项目经历面向 Web2.0 的重大升级后,已经远远超出一个 Java 开发工具的概念了。Java 之父 James Gosling 也不得不承认 PHP 的成功。2008 年 4 月,James Gosling 在纽约举行的 Sun 全球教育研讨会上进行演讲,当有记者问到当前 Java 所面临的威胁时,Gosling 不露锋芒地表示:“PHP 和 Ruby 是非常好的系统,但是它们作为脚本语言来发挥力量,只局限于网页这一领域内。PHP 能够简化产品因为它是 100% 瞄准网页的。”然而对于 Java,他说,“我们拥有平衡的艺术——简化与力量的双赢。”最后 James Gosling 说:“任何关于 Java 相对 PHP、Ruby 还是其他语言的讨论都是没有意义的,我们同样在使用其他语言,你可以应用 PHP 或者 Python,以及其他语言与 Java 一起工作,许多人这样做。”Gosling 已经开始平静地看待脚本语言的流行,但是他对“网页”的语气,则有些类似于 10 年前人们对雅虎创始人杨致远的职业评价:“这小子是个做网页的。”
随着互联网敏捷开发的流行,以及 IBM、Sun 等公司推动的集成开发环境(IDE)的成熟,关于语言优劣的争端似乎已经进入到一个新的认识阶段,语言的巴别塔现象依然存在,既然 Java 语言一时无法成为“世界语”,面向 Web2.0 的动态脚本语言又表现出鲜活的生命力,那么与其唇枪舌剑地讨论 PHP、PERL 与 Java 的优劣,不如明智地根据实际需要选择最符合需求的语言,缜密而功能强大的 Java 能够与灵活不羁的动态脚本语言、富媒体互联网应用(RIA)、甚至微软的 .NET 开发平台很好地协作,而 IBM 则很早就看准了这一趋势,Eclipse 和 Project Zero 就代表了这样一种趋势。
IBM WebSphere 的首席技术官 Jerry Cuomo 在个人博客中对 PHP 大加赞赏,并用“敏捷、内容化和易于掌握”3 个形容词来归纳 PHP 的 3 大优点。Jerry 这样评价 PHP 的敏捷性:“如果说 JEE(Java 企业级开发版本)应用程序是为流传千古优化的,那么,PHP 脚本程序则是为这个周末就要上线的那些需求准备的。PHP 开发快速而简介,尤其适合于那些情景性、临时产生的开发需求。至于“内容化”,Jerry 的解释是:“我们把 PHP 称之为剪刀糨糊语言,网络上有成吨的现成代码,很少有需要从零开始的开发项目。剪切、粘贴然后运行,就这么简单,这就是敏捷性。”
当然,如果你是 Java 程序员而一时无法适应 PHP,IBM 的 ProjectZero 项目还提供对类 Java 的脚本语言 Groovy 的支持,“Groovy 就像 Java 成瘾者的尼古丁药膏,借助 Groovy 你很快就能摆脱 Java 进行敏捷开发。”Jerry 在接受 InfoQ 采访的时候,非常风趣地宽慰那些使用 Java 语言的职业程序员。
对于对软件技术了解较少的读者来说,这一章出现的各种符号和名词已经足够把人搞花眼,为了便于更多的人理解计算机语言的进化与战争,我们不妨借用汽车行业的一个例子。
我们都知道陆虎汽车是顶级越野 SUV 的旗帜,而捷豹汽车则是运动型豪华轿车的老牌劲旅,但是当 2008 年,福特公司宣布将陆虎越野车和捷豹汽车出售给印度的塔塔公司时,我的一位同事当即取消了订购陆虎“揽胜”的计划。所有的汽车爱好者都惊掉了下巴,因为大家印象中的塔塔公司是一家生产 “全球最廉价”汽车的企业,没有人会把捷豹、陆虎与“廉价、大众消费”联系在一起,但这恰恰是市场的选择。如果我们牵强地把汽车市场与计算机语言的战争联系在一起,那么,“高尔夫”和“福克斯”这样的平民品牌的胜利也许能够部分解释脚本语言的流行——廉价、容易获得、更新换代快、维护费用低、使坏了就再换一辆新的。总之,是平民品牌兑现了汽车文化的自由理想,并最终主宰了市场。
读者反馈
欢迎您对本书提出宝贵的反馈意见。您可以通过本页面最下方的 建议 栏目为本文打分,并反馈您的建议和意见。
如果您对 developerWorks 图书频道有什么好的建议,欢迎您将建议发给我们。
参考资料 学习
讨论
关于作者  | |  | 刘朝阳,周末画报专栏作家;2005 年被《新京报》评为年度十大数字焦点人物;新浪博客 IT 名博(Google PR5);IT 评论文章曾发表于:IT经理世界、广州日报、中国经营报、计算机世界等多家媒体。 |
对本文的评价
|