软件随想录(local.joelonsoftware.com/wiki)-2003年12月14日 双元文化主义 - Biculturalism

本文主要是介绍软件随想录(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

Jump to: navigation, search

双元文化主义

作者:周思博 (Joel Spolsky)
译:Paul May 梅普华
Sunday, December 14, 2003
属于Joel on Software, http://www.joelonsoftware.com

到目前为止,Windows和Unix在功能上的相似之处比不同的要多。他们都支持同样的主流程序作法(由命令列到图型介面到web服务器);他们所依循的系统资源基本是完全一样的,比如几乎完全相同的文件系统、内存、sockets,还有行程和执行绪等等。两套操作系统的核心服务,还有开发者能写的应用程序类型也没多大的差别。

剩下的就是文化差异。没错,我们全都要吃东西,不过海那边的人是用木筷子吃生鱼片加米饭,而我们在这里则是用手拿著面包夹大块碎牛肉在吃。文化差异并不表示美国人的胃不能消化寿司,或是说日本人不能消化大麦克汉堡;也不表示吃寿司的美国人或吃汉堡的日本人很少;文化差异指的是美国人第一次去东京下飞机时所面对,「这地方真奇怪又该死」那种无法承受的感觉。至于什么「我们其实都是一样的,我们都有爱,也都会工作欢唱及死亡,将会克服美国人和日本人永远无法真正对对方的厕所安排感到自在。」这种空话根本连想都不会想。

Unix和Windows程序员的文化差异是什么呢?细微的地方很多,不过有一项最明显:Unix文化重视对其他程序员有用的程序,而Windows文化重视对非程序员有用的程序。

这当然是主要的简化说法,不过事实上确还是个很重大的差异:我们写程序究竟是为程序员还是为了一般使用者?除了这个问题之外其他的都只是诠释。

ArtOfUnixProgramming.gif 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则把制作有助于张阿姨的事视作核心价值。

hudsonBoats.JPG

让我们来看看另一个文化差异。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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/461191

相关文章

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank 正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的