本文主要是介绍软件随想录(local.joelonsoftware.com/wiki)-2003年12月14日 双元文化主义 - Biculturalism,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2003年12月14日 双元文化主义 - Biculturalism
The Joel on Software Translation Project:双元文化主义
From The Joel on Software Translation Project
双元文化主义
作者:周思博 (Joel Spolsky)
译:Paul May 梅普华
Sunday, December 14, 2003
属于Joel on Software, http://www.joelonsoftware.com
到目前为止,Windows和Unix在功能上的相似之处比不同的要多。他们都支持同样的主流程序作法(由命令列到图型介面到web服务器);他们所依循的系统资源基本是完全一样的,比如几乎完全相同的文件系统、内存、sockets,还有行程和执行绪等等。两套操作系统的核心服务,还有开发者能写的应用程序类型也没多大的差别。
剩下的就是文化差异。没错,我们全都要吃东西,不过海那边的人是用木筷子吃生鱼片加米饭,而我们在这里则是用手拿著面包夹大块碎牛肉在吃。文化差异并不表示美国人的胃不能消化寿司,或是说日本人不能消化大麦克汉堡;也不表示吃寿司的美国人或吃汉堡的日本人很少;文化差异指的是美国人第一次去东京下飞机时所面对,「这地方真奇怪又该死」那种无法承受的感觉。至于什么「我们其实都是一样的,我们都有爱,也都会工作欢唱及死亡,将会克服美国人和日本人永远无法真正对对方的厕所安排感到自在。」这种空话根本连想都不会想。
Unix和Windows程序员的文化差异是什么呢?细微的地方很多,不过有一项最明显:Unix文化重视对其他程序员有用的程序,而Windows文化重视对非程序员有用的程序。
这当然是主要的简化说法,不过事实上确还是个很重大的差异:我们写程序究竟是为程序员还是为了一般使用者?除了这个问题之外其他的都只是诠释。
The Art of UNIX Programming - book cover
时常大发议论的Eric S. Raymond刚写了一本有关Unix程序设计的巨作The Art of UNIX Programming,极其深入地探索他自己的文化。你可以去买这本书的纸本来看。如果你觉得Raymond的想法太过激进(anti-idiotarian)而不想付钱给他,还可以在在线免费阅读,保证作者的心血绝对不会收到一分钱。
让我们来看个小例子。Unix的程序文化格外重视可由命令列呼叫的程序,这种程序可以用参数控制各种动作,其输出可以撷取成一般机器可读的纯文字格弋。这种程序之所以会被重视式,是因为可以让其他程序员轻易地整合进别的程序或较大的软件系统中。举个很小的例子,Unix文化中有一个Raymond称之为「沈默是金」的核心价值,是说当程序成功地完成你所交付的事时应该不要有任何输出。不管是在命令列输入300个字符的命令建立文件系统,还是建立并安装了一套复杂的软件,或是把载人火箭送到月球,全部都一样。只要成功执行就不要有任何输出。使用者看到下一个命令列提示就会推论一切正常。
由于你是为其他程序员写程序,所以这才会是Unix文化的重要价值。就如同Raymond所说的:「喋喋不休的程序不太能和其他程序好好合作。」 相较之下在Windows文化中是为张阿姨而写程序的,而张阿姨搞不清楚程序是因为执行成功而没有任何输出,还是因为出错了所以无法显示任何讯息,或是因为误解你的要求而没有输出。
同样的状况,Unix文化欣赏保持文字介面的程序。他们不是很喜欢图型介面,不过在纯文字介面程序上漂亮地涂一层GUI口红可以异常,另外他们也不喜欢二位元文件格式。因为文字介面比较好用程序控制,而图型介面除非提供其他机制(如内建脚本语言),否则几乎不可能用程序控制。我们在这里又再次看到,Unix文化重视有助于其他程序员的程序,而这一点很少会是Windows程序设计的目标。
这并不是说所有的Unix程序都只是为了程序员而设计的。这样说太偏颇了。不过这个文化重视对程序员有用的东西,而这可以解释很多很多的事情。
假设你找了一个Unix程序员和一个Windows程序员来,要他们分别写同一只针对一般使用者的应用程序。Unix程序员会先建立一个由命令列或文字介面驱动的核心,通常事后才写一个图型介面来呼叫核心。这样子应用程序的主要功能都可以让其他程序员使用,他们可以用命令列呼叫程序并把结果以文字方式读入。而Windows程序员会倾向先由图型介面开始,通常事后才加上脚本语言让图型介面的操作自动化。对一个99.999%使用者完全不写程序(也不打算学写)的文化来说,这是很正常的。
在Windows程序员中有个主要针对其他程序员写程序的重要团队,就是微软内部的Windows团队本身。他们做事的方法通常是建立一个可以由C语言呼叫的API,在API里实现出功能,然后再撰写图型介面程序来呼叫API。所有用Windows使用介面能做的事,全都可以用任何合理的程序语言呼叫某个程序介面做到。举例来说,微软的Internet Explorer本身只不过是一个89 KB的小程序,里面包装了数十个可供程序老手免费使用,功能强大又有弹性的的元件。问题是程序员无法接触到这些元件的源代码,所以只能完全依照微软内元件开发者所预见并允许的方式使用,而这种作法并不是每次都行得通。有些问题因为缺乏API源代码,以致于难以甚至无法追查,这时通常就怪罪到呼叫API的人身上。Unix具有公开源代码的文化价值,使它成为更容易开发的环境。每个Windows平台的开发者都会告诉你,某一次花了四天去查一个问题,原因只是他们认为LocalSize传回的内存大小应该和原先呼叫LocalAlloc时用的值一样,或是其他有程序库源代码就能在十分钟内搞定的问题。Raymond创作了一个有趣的故事,说明这个曾经用过无源代码程序库都会同意的道理。
所以你看到这些宗教性的论点了。因为可以进入程序库除错所以Unix比较好。因为张阿姨可以看到提示确认她的电子邮件真的送出去了,所以Windows比较好。事实上没有谁比谁更好,他们只是拥有的价值不同:Unix的核心价值是制作有助于其他程序员的东西,而Windows则把制作有助于张阿姨的事视作核心价值。
让我们来看看另一个文化差异。Raymond说「典型的Unix文件会写得简洁而完整]...这种风格假设读者够积极,可以推导未写出的推论,并且有自信信任这些推导。]小心的阅读每一个字,因为一件事很少会讲两遍。]」天啊,我认为他其实是在教年轻的程序员写出更不人性的man说明文件。
这对一般使用者而言是绝对行不通的。虽然Raymond可能说这是「过于简化的屈就]」,不过Windows文化了解一般使用者不读文件,即使不得不看也是愈少愈好,因此你必须不断重复的解释... 事实上在良好的Windows说明档中,必须每个主题都能让一般读者直接看懂,不必先看懂其他任何的说明主题。
怎么会出现不同的核心价值呢?这是Raymond的书另一个出色之处:他深入Unix的历史和演进,让新程序员熟悉回溯至1969年起累积的历史。在Unix被创造出来及其文化价值成形的时候,一般使用者并不存在。电脑很贵CPU时间也很贵,学电脑就等于是学写程序。无怪会蕴酿出重视有助于其他程序员的文化。相较之下Windows的创造只有一个目标:尽量卖更多套以获得更多利润,成亿上兆套的卖。「每个家庭每个桌上都有一台电脑」就是创造Windows的明确目标,并且设定了它的议题也决定它的核心价值。让非程序员容易使用,是进驻每个桌面和家庭的唯一方法。因此使用性自然凌驾其他东西而成为文化的基准。对这样的文化而言,程序员是极其次要的对象。
文化的裂缝是如此的明确,所以Unix从未真正的进入桌面。张阿姨不会真的去用Unix。不断有人努力帮Unix制作漂亮的外壳,希望让张阿姨能用Unix,不过全都失败了。因此这些程序员都深陷在Unix文化中。举例来说,Unix有一个源自于X设计者的价值:策略与机制分离。这种想法直接导致使用介面的分裂;桌面使用介面运作的细节并没有大家一致同意的做法,由于这些设计者的文化重视这种差异,所以他们就认为这种作法可以用。不过对张阿姨来说,在不同程序里剪贴得用不同的使用介面,绝对是行不通的。所以这就是现在的状况,Unix开发者20年前开始尝试在系统表面涂上一层漂亮的使用介面,结果到今天最大Linux厂商的执行长还告诉大家,家庭用户应该直接用Windows就可以了。我曾经听过有经济学家宣称,说硅谷永远不可能在其他地方(比如说法国好了)重现,因为法国文化对于失败的惩罚太重,以致企业家不愿意冒险。或许Linux也有相同的状况:Linux可能永远都不会成为桌面的操作系统,因为它重视一些会阻碍这件事的价值。OS X就是一个证明:苹果终于创造了给张阿姨用的Unix,不过原因并不光是因为苹果的工程师和经理坚持针对一般使用者的文化(我独断地称之为「Windows文化」,虽然这从历史来看是源于苹果),他们还拒绝了Unix文化中以程序员为中心的基本思想。甚至把核心目录的名字改掉了(多么违反传统!),用常见的英文单字"applications"和"library"代替"bin"和"lib"。
Raymond真的尝试比较Unix与其他操作系统并突显之间的差异,不过这却也是这本好书中最弱的部份,因为他真的不知道自己在讲什么。当他谈论Windows时常会显露他对Windows程序设计的知识多是由报纸读来,并非来自真正的Windows程序设计经验。这没什么关系:他并不是Windows程序员,而这一点我们可以体谅。不过他身为对一个文化有深厚了解的典型,知道该文化所重视的价值,却没有注意该文化中针对一般人部份(杀老太太跟当机:一定是不好的),与针对程序员部份(吃生鱼片和命令列参数:因对象而不同)的差异。
有太多的单文化程序员,他们就像从未离开过家乡的典型美国小孩,说不出来文化价值和人类核心价值间的差异。我遇过太多嘲笑Windows程序设计的Unix程序员,他们认为Windows野蛮又愚蠢。Raymond经常落入未考虑原由就轻视其他文化的陷阱。在Windows程序员中很少会发现这种顽固份子,因为Windows程序员大体上都是以解决方案为准而非意识型态的。至少Windows程序员会承认他们文化的缺陷,然后很实务地说:「看,如果你想把文书处理程序卖给很多人,就得能在他们的机器上执行。如果得用邪恶的registry代替优雅的~/.rc档储存设定才能办到,就这样做吧。」现在Unix世界充满自以为是的文化优越拥护者和slashdot的灌水教派(karma-whoring sectarianism),而Windows世界比较实务(我毕竟得在这里讨生活嘛)。这种现状源于Unix文化感觉自己被围攻,无法突破服务器和爱好者小众市场进入主流桌面市场。这种弱势的傲慢正是The Art of UNIX Programming最大的缺点,不过倒也并不是如此严重,整体而言这本书充满了非常有趣的洞见,内容泛及各种程序设计主题,以致我愿意闭住呼吸忍受偶而出现的意识型态高论,因为在其他部份可以学到太多一般性的观念了。事实上我会把这查书推荐给任何平台任何文化和任何目标的开发者,因为里面有大多价值是普世通用的。Raymond指出CSV格式不如/etc/passwd格式时,他尝试由Unix而非Windows观点去评价,不过你知道吗?他是对的。/etc/passwd 比CSV容易分析,如果你读了这本书就会知道为什么,而且也会成为更好的程序员。
这些网页的内容为表达个人意见。
All contents Copyright © 1999-2006 by Joel Spolsky. All Rights Reserved.
这篇关于软件随想录(local.joelonsoftware.com/wiki)-2003年12月14日 双元文化主义 - Biculturalism的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!