《Joel谈软件》一书的翻译,我好久没提了。
合同规定今年1月交稿。假定我没有违约的话,此书现在应该上市了。可是,实际上......就算到下个月,我恐怕都翻译不完。......我也不想多解释了,反正这本书现在是我最大的烦恼,只能争取今年夏天上市了。
下面的文章是该书的第21篇。
=========================
关于战略问题的通信之六
作者:Joel Spolsky
译者:阮一峰
原文网址:http://www.joelonsoftware.com/items/2007/09/18.html
发表日期 2007年9月18日,星期二
IBM公司最近发布了一套开源Office软件,叫做IBM Lotus Symphony,看上去大概是根据StarOffice[1]修改的。但是,我怀疑起这个名字的真正目的,可能是想清除人们对最早那套Lotus Symphony[2]的记忆。那套软件在发布之前,被吹得天花乱坠,简直就像耶稣要复活一样,但是在发布之后一败涂地。它就是软件业中的 Gigli[3]。
上个世纪80年代后期,Lotus公司努力地想找到下一步的方向,升级他们的旗舰产品----电子表格和作图软件Lotus 1-2-3。他们很自然地就想到了两条路。第一条路是往软件中加入更多的功能,比如文字处理功能。这就是Symphony这个产品的由来。第二条看上去很 显然的路,是做一个3D电子表格软件。这就是后来Lotus 1-2-3的3.0版本。
这两条路一开始就遇到了一个大麻烦:在古老的DOS环境中,内存占用不得超过640K。那个时候,IBM已经开始少量出售配备80286芯片的个人 电脑,这种新的芯片能够提供更多的内存。但是,Lotus公司觉得,为这种售价高达10000美元的电脑开发专用软件,市场不会很大。所以,他们一个字 节、一个字节地压缩,花了18个月,才将Lotus 1-2-3的新版本塞进了640K的内存中。但是,最终在白白浪费了许多时间之后,他们不得不放弃了3D功能,因为没有足够的内存可以塞进去。 Symphony的遭遇也差不多,许多功能都被砍得干干净净。
这两条路都走错了。当Lotus 1-2-3的3.0版本上市的时候,每个人家中都已经有了一台80386芯片的电脑,配备了2MB或者4MB的内存。至于Symphony,它的电子表格功能很弱,文字处理功能也很弱,所有其他功能都很弱。
"够了,老同志,"你们会说。"谁如今还关心那些老掉牙的、只能在字符模式下运行的软件?"
请暂且忍耐我一分钟,因为历史正在以三种不同的方式重演。那么,最聪明的应对策略,就是压宝在同样的结局上面。
低速CPU和小容量内存的环境
从最早的时候一直到大概1999年,程序员都极其关注软件的效率问题。在这段时期中,内存空间总是不够大,CPU主频也不够高。
到了20世纪90年代后期,一些像微软和苹果这样的公司,开始注意到摩尔定律[4](其实它们只比别的公司早了一点点)。它们认识到,不必太在意软 件的效率问题和内存占用......只要把很酷的功能做出来,然后等着硬件升级就可以了。微软公司首次发布Excel的Windows版本的时 候,80386电脑还非常贵,实际上没什么人买得起,但是微软公司很有耐心。只过了几年,80386SX[5]出来了,兼容机的价格下降到1500美元, 你只要买一台,就能运行Excel。
由于内存的价格直线下降,CPU的速度每年都在翻番,所以作为一个程序员,你就面临选择。你可以花6个月用汇编语言,重写程序的内循环(inner loop)。你也可以休假6个月,找一支摇滚乐队当鼓手。不管是哪一种选择,6个月后你的程序都会运行得更快。实际情况是没有程序员真的喜欢用汇编语言编 程。
所以,我们都不怎么关心软件的效率或优化问题。
不过有一个例外,那就是在浏览器的Ajax应用程序中使用的JavaScript语言。因为这是当前几乎所有的软件开发工作的方向,所以这是一个重大的问题。
眼下的许多Ajax应用程序,有一百万行甚至更多的客户端代码。现在的瓶颈已经从内存和CPU,转移到了带宽和编译时间。你真的必须想尽办法进行优化,才能使复杂的Ajax程序有良好的表现。
但是,历史正在重演。带宽正在变得越来越便宜,即使这样,还是有人在考虑如何对Javascript进行预编译(precompile)。
有一些程序员将大量的精力投入优化工作,要将程序变得更紧凑和更快速。某一天,他们醒来后将发现,这种努力或多或少是白忙一场。如果你喜欢用经济学家的口吻夸夸其谈,那么你最低限度可以说,这种努力"不会带来长期的竞争优势"。
那些不关心效率、不关心程序是否臃肿、一个劲往软件中塞住高级功能的程序员,在长期中,将拥有更好的产品。
跨平台的编程语言
C语言的原始设计目标,就是为了让编写跨平台的应用程序变得更容易。它很好地实现了这个目标,但是并不是真的100%跨平台。所以,后来又出现了Java,它的通用性甚至要超过C语言。历史大概就是这样啦。
眼下,在跨平台这出连续剧中,正出现又一个高潮,那就是----没错,你猜对了----客户端Javascript的兼容性问题,尤其是浏览器 DOM(文档对象模型)的兼容性问题。编写一个网络应用程序,让它在所有不同种类的浏览器上都能运行,这简直是一场可怕的噩梦。你根本找不到其他方法,只 能精疲力竭地在Firefox、IE 6、IE 7、Safari和Opera上一一测试,猜猜发生了什么事?我没有时间在Opera上测试,所以只好不管Opera了。这意味着,新兴的互联网浏览器根 本不会获得立足的机会。
未来会怎样?当然,你可以在心里企盼或祈求,微软公司和Firefox能够制作出更具备兼容性的产品。 祝你好运。不过,你还有另外一个选择,就是使用p-code虚拟机[6]或者Java虚拟机模型,你在底层系统之上建立一个小小的沙箱 (sandbox),再将软件的运行建立在沙箱之上。这样做的不利之处,就是沙箱有很多缺陷,它们非常慢而且错误百出,这就是为什么Java applet[7]都死光光的原因。建立一个沙箱,你就等于走上了一条不归路,你能得到的运行速度只有底层系统的1/10,你也无法利用任何一个只有某个 底层系统支持、而其他底层系统都不支持的特性。(直到今天,我都在翘首期待,有人能向我展示可以在智能手机上使用的Java applet。它能利用手机的所有功能,比如拍照、读取地址本、发送短消息、与全球卫星定位系统GPS互动等等。)
沙箱在过去行不通,在将来也不会行得通。
那么,未来会怎样?获胜的一方所采取的策略,正是贝尔实验室在1978年做出的决定,那里的科学家决定开发一种跨平台的、高效的编程语言,这就是后 来的C语言。这种语言可以将程序编译成不同平台、不同系统可以理解的"本地"码(各种不同的Javascript和DOM就是本地码)。至于怎么编译,那 是编译器作者需要解决的问题,与你无关。代码编译后的运行效果,与"本地的"Javascript直接运行完全一样,能够以一种统一的方式获取DOM模型 的全部潜力,能够自动地和跨平台地,与IE和Firefox的核心代码融合在一起。对的,它还完美地支持CSS,能够以一种令人惊骇、但是事实证明是正确 的方法,让你玩转CSS,所以你永远都不必为CSS的不兼容问题发愁。再也不会这样了,永远不会了。哦,等这一天到来的时候,该是多么美好啊。
完善的互动性和用户界面标准
IBM 360大型机(mainframe)使用一种叫做CICS[8]的用户界面,你今天在飞机场还能看到这个系统,你只要在办理登机手续的柜台上弯下身子就能 看到。这种界面是80字符宽、24字符高的绿色屏幕,只有字符模式,没有图形界面,这是肯定的。主机发送一个表单给"客户端"(一台IBM 3270智能显示终端)。这个"客户端"是智能的,它知道如何将表单呈现给你,允许你将数据输入表单,在这个过程中,根本不与主机通信。这就是IBM大型 机如此强大、远远超过Unix系统的原因之一,因为CPU根本不需要处理你的行编辑,这种任务由智能终端承担了。(如果你做不到为每个人都配置一台智能终 端,那么你就去买一台System/1小型机,充当主机和哑终端[9]之间的中介,为你承担表单编辑的任务。)
不管怎样,只要你填完了表单,按下"发送"键,你输入的所有数据就被送回服务器端处理。然后,服务器端又给你发来一个新的表单。整个过程周而复始。
一切都很棒。但是,如果你想在这种环境下,使用文字处理软件,你该怎么办?(你真的无法如愿。在大型机上从来都没有过一个像样的文字处理软件。)
这就是历史上的第一阶段。它与互联网时代的HTML阶段正好对应。HTML语言就是带有字体变化的CICS。
等到历史进入第二阶段,所有人都在写字桌上配备了PC。于是,突然之间,也不管程序员本人愿不愿意,他就是具有了在任意时间、任意场合,随意操弄屏 幕上任意角落的任意文字的能力。实际上,你可以获取用户打字时的每一次击键,因此你就能做出一个很好很快的应用程序,不必等到用户按下"发送"键,CPU 就能提前介入,做出相应的处理。比如说,你可以开发一个文字处理软件,一旦当前行快要写满了,软件就会自动换行,将结尾的最后一个词移到下一行的行首。一 切都在瞬间完成。哦,我的老天,你能做到这一点?
第二阶段也有自己的问题,那就是缺乏一个明确的用户界面标准......程序员具备了空前强大的决定权,几乎可以随意按照自己的偏好来制作软件,因 此每个人都用不同的方式写软件,这就给用户带来了困扰,如果你会用X软件,这并不代表你就会使用Y软件。WordPerfect[10]和Lotus 1-2-3有截然不同的菜单设计、截然不同的键盘接口和截然不同的指令结构。在程序之间复制数据,根本没有可能。
这也正是我们今天在Ajax开发中面对的局面。当然,不可否认,Ajax应用程序的易用性比第一代DOS应用程序,有了很大的提高。因为从那时开 始,我们已经学到了不少经验。但是Ajax应用程序没有规范的标准,如果想要协同工作,非常麻烦。你完全没有办法,将对象从一个Ajax应用程序中,剪切 和粘贴到另一个中。举例来说,我就不太确定,你怎样才能将Gmail中的图片传到Flickr中。拜托,老兄,剪切和粘贴在25年前就发明出来了。
在历史上的第三个阶段中,出现了配备Macintosh操作系统和Windows操作系统的PC。一个统一的、标准的用户界面诞生了,包括多窗口和 剪贴板这样的标准功能,这使得在多个程序间进行协同工作成为可能。这种崭新的GUI(图形用户界面),带给我们易用性和实用性的飞跃,导致了个人电脑爆炸 式增长。
因此,如果历史会重演,我们就可以期待总有一天,Ajax程序的用户界面会出现某种程度的统一,它的诞生方式就如同Windows的诞生方式一样。 总有人会写出一个具备压倒性优势的SDK(软件开发工具包),其他人就可以用它来开发功能强大的Ajax应用程序。不同的程序员使用同样的用户界面组件, 使得开发出来的程序可以协同工作。那种赢得最多程序员认可的SDK,就具备了垄断性的竞争优势,堪称可于微软用Windows API获得的竞争优势媲美。
如果你是一个互联网开发者,你不想用别人都在用的主流SDK,那么越来越明显地,你将发现没有用户使用你的程序。原因其实你知道的很清楚,那就是你的程序不支持剪切和粘贴,无法进行地址本同步,也做不到其他所有在2010年流行的新奇的互动功能。
比如,请想像一下,假定你是Google公司的负责人,你为自家有Gmail这样的产品,感到沾沾自喜。但是没过多久,某家你从来没有听到过的公 司,----很可能是一家桀骜不驯的初创公司,背后有Y Combinator[11]的资助----开发出了一种NewSDK,销售状况好得难以置信。这种NewSDK使用一种性能优异的跨平台编程语言,可以 直接编译生成Javascript,而且更出色的是,它还配备了一个大型Ajax库,能够执行所有种类的智能性的互动功能。不仅仅是剪切和粘贴,还有一些 很酷的聚合(mashup)功能,就像同步和单点身份管理(single-point identity management)。有了单点身份管理,用户就不必将自己正在干什么告诉Facebook和Twitter了,只需要在网上任意一个支持这个功能的地 方,输入就可以了。你对这一套NewSDK嗤之以鼻,因为它的大小居然高达惊人的232MB!......232MB啊!......编译生成的 Javascript,单单载入一个页面就需要76秒。所以你认定,自家的应用程序Gmail不会流失任何用户。
但是就是从那时起,就当你在Google总部里、坐在Google式座椅上、细细品味Google味咖啡、感到洋洋得意、沾沾自喜、高枕无忧、踌躇 满志的同时,新版本的浏览器发布了,支持缓存编译后的Javascript。于是,突然之间,NewSDK的载入速度变得真的很快。Paul Graham又及时地向这家初创公司补充了6000包方便面,让他们饿的时候有东西吃。这样一来,这家公司又可以继续运营三年,将产品不断完善。
你手下的程序员,不管是张三还是李四,都有相同的看法,那就是Gmail太庞大了,无法移植到那个呆呆的NewSDK上面去。如果那样的话,我们就 必须改变每一行的代码。这接近于完全重写整个程序,太可怕了。整个系统模型会一团混乱,充满了嵌套。NewSDK使用的跨平台编程语言用到的括号,多得连 Google也无法承受。几乎每一个函数的最后一行,都是一个包含连续3296个右括号的字符串。你因此不得不去买一个特殊的编辑器,才能数清到底有多少 个右括号。
后面的事情是,NewSDK的工程师又发布了一个相当不错的文本处理软件,以及一个相当不错的电子邮件应用程序,还有一个杀手级的Facebook/Twitter式的事件发表器,能够将网上与你有关的所有事情都进行同步。人们开始使用他们的产品。
就在你不知不觉之间,所有人都开始编写基于NewSDK的应用程序。这些程序的表现真的很好,一转眼,产业界点名只想用基于NEWSDK的应用程 序。所有老式的纯Ajax应用程序看上去都变得很寒酸,它们做不到剪切和粘贴,不能够聚合和同步,互相之间无法很好地协同工作。Gmail就这样成了遗 迹,好比Email程序中的WordPerfect。未来的某一天,你对孩子们说,曾几何时当你得到2GB的空间储存Email时,你是多么激动。孩子们 全都嘲笑你,他们的指甲油都不止2GB。
你是不是觉得这个故事太荒诞不经了?那你就将"Google Gmail"替换成"Lotus 1-2-3"。NewSDK将是微软公司Windows传奇的重现。整个过程完全是Lotus公司如何丢失电子表格市场的重演。在互联网上,这种事情将再 发生一次,因为现在所有影响市场的因素和背后的动力,同当年完全一样。我们唯一不知道的就是,它到底发生在何时、何地、何人身上,但是它一定会发生。
注释:
[1] StarOffice是Sun公司发布的一套Office软件,它的源代码在2000年7月开源,成为了后来的OpenOffice的基础。
[2] Lotus Symphony是Lotus公司在1984年发布的一套Office软件,在DOS环境下运行。1995年,IBM公司以35亿美元的价格,并购了Lotus公司。
[3] Gigli是一部2003年上映的美国电影,主演中包括Ben Affleck、Jennifer Lopez、Al Pacino等大明星。由于Ben Affleck和Jennifer Lopez在拍摄过程中爆出绯闻,这部电影在上映之前被大肆宣传,但是上映之后,口碑极差,被认为是有史以来最滥的电影之一。
[4] 摩尔定律(Moore's Law)是指大约每隔18个月,芯片的晶体管容量比先前增加一倍,同时性能也提升一倍,而价格下降一半。这个定律描述了硬件的发展趋势,由Intel公司的共同创始人Gordon E. Moore在1965年提出。
[5] 80386SX是80386芯片的一个低价版,后者在1986年上市,前者在1988年上市。
[6] P-code是软件编译过程中产生的一种中间代码,不同于最终的机器码,可以使得编程语言不依赖于特定的平台或硬件。
[7] Java applet是用Java语言编写的、镶嵌在网页的小应用程序。它需要计算机安装了Java虚拟机以后才能运行。
[8] CICS是Client Information Control System(用户信息控制系统)的缩写。
[9] 哑终端(dumb terminal)就是连接主机而不做任何计算处理的终端机。
[10] WordPerfect是Coral公司拥有的文字处理软件,在20世纪80年代末和90年代初流行一时,是事实上的文字处理软件标准。后来,被微软公司的Word取代。
[11] Y Combinator是一家创业投资公司,专门为创业者提供种子资金。该公司由Paul Gramham等人在2005年创立。
(完)
相关推荐
美国著名程序员Joel Spolsky关于软件管理和技术公司管理精辟论述,读来受益匪浅,特别是其中给大学计算机系学生的建议。
Further Thoughts on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work ...
《More Joel on Software》是Joel Spolsky的著作,由Apress出版社于2008年出版。这本书深入探讨了软件开发、设计与管理领域的多样性和相关问题,旨在为软件开发者、设计师、经理以及与他们合作的人士提供有价值的...
《Joel on Software》是由Joel Spolsky撰写的一本著名IT著作,主要涵盖了软件开发、团队管理、软件工程以及互联网行业的多个重要方面。这本书以其深入浅出的讲解和实战经验分享,深受程序员、项目经理和技术领导者们...
在《Joel on Software》中,Spolsky分享了他的许多核心观点,这些观点对于理解软件开发的本质及其背后的商业逻辑至关重要。以下是一些关键知识点的详细说明: 1. **软件质量**:Joel强调软件质量的重要性,主张开发...
Joel On Software 大家都知道这个东西哈。挺不错的
《软件随想录 - More Joel on Software》是乔尔·斯波斯基(Joel Spolsky)的一本经典著作,他是一位知名的软件开发者、企业家和博客作者。这本书汇集了他在软件开发、团队管理、产品设计等多个领域的深入思考和经验...
根据提供的文件信息,我们可以推断出这是一本关于软件开发、设计与管理的书籍,作者是Joel Spolsky。本书包含了对各种与软件开发者、设计师及管理者相关的议题的深入探讨,同时也为那些与这些专业人士合作的人提供了...
根据提供的文件内容,可以看出这是一篇关于Joel Spolsky和他的网站Joel on Software的文章,但文本中包含了大量的乱码和非中文字符,这可能是由于编码错误或原文本的特殊处理造成的。尽管如此,我们仍然可以从有限的...
### Joel_Spolsky对计算机学生的七大建议 #### 第一大建议:毕业前练好写作技巧 Joel Spolsky强调,对于计算机专业的学生而言,掌握优秀的写作技能是至关重要的。他通过举例说明了这一观点: - **Linus Torvalds*...
Joel Spolsky是一位在软件开发领域有着丰富经验的老兵,他的思想不仅对软件开发者有启发性,对于设计人员、管理人员乃至与之合作的所有人也同样具有重要意义。 #### 二、作者Joel Spolsky介绍 Joel Spolsky是业界...
根据提供的文件信息,我们可以推断出这是一本关于软件写作的书籍,名为《The Best Software Writing I》,由Joel Spolsky编辑选择并作序。虽然我们没有完整的书籍内容,但可以通过标题、描述以及部分版权页的信息来...
在给定文件信息中,我们可以看到关于概率方法的书籍《概率方法十讲》是由JOEL SPENCER所著。遗憾的是,文件内容只提供了书籍的一部分信息,而没有具体到每一讲的具体内容。不过,文件内容列出了一系列表题为“应用...
软件大牛再出新书。相信第一本joel说软件 你也看了 想必收获不少 这本也不能错过
本书是一部关于软件技术、人才、创业和企业管理的随想文集,作者以诙谐幽默的笔触将自己在软件行业的亲身感悟娓娓道来,观点新颖独特,内容简洁实用。全书分为 36 讲,每一讲都是一个独立的专题。 本书从不同侧面...
《PSP Studio - Joel Henry 使用说明书》 在IT行业中,个体软件过程(Personal Software Process,简称PSP)是一种自我改进的技术,旨在提升软件工程师的生产力和软件质量。PSP Studio,由Joel Henry开发,是一款...