Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4056888
  • 博文数量: 272
  • 博客积分: 7846
  • 博客等级: 少将
  • 技术积分: 6476
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-25 16:27
文章分类

全部博文(272)

分类: LINUX

2009-11-27 11:59:49

这句话一语中的:好的软件都是源自解决开发者的切身之痛,推而广之则是因为很多人也面临着相同的困扰。这将我们带回了“格言1”,或许换个角度重申能让其更具效用:

18.要解决有趣的问题?那就先找到你感兴趣的吧!

To solve an interesting problem, start by finding aproblem that is interesting to you.

卡尔·哈里斯先前的popclinet如此,我的fetchmail也是如此。这个观点已经久为人知。而更有趣(Linuxfetchmail中更值得我们关注的)的话题则是出现在下一阶段——由用户和协作开发者组成的庞大的活跃社区,推动了软件的演进。

《人月神话》中,布鲁克斯指出程序员的编程时间不能简单叠加。为已经延期的项目增派人手会让它拖地更久。像我们之前提到的,他指出:项目的复杂度和沟通成本会以开发者人数为基础呈平方指数增长,而业绩仅能直线上升。布鲁克斯定律早已被广泛认可。但是在本书中,有不少开源软件的开发流程可以将这个假说证伪——从经验上看,如果布鲁克斯定律主宰了一切,Linux就不可能出现了。

杰拉尔德·温伯格在其经典著作《程序开发心理学》中对布鲁克斯定律作出了颇具后见之名的重要修正。在其关于“无私编”的讨论中,温伯格发现一些程序员不会“自扫门前雪”,而是鼓励他人帮助纠错和改进代码。在这样的工作室里,工作进展要显著的多。(最近,肯特·贝克的“极限编程”技巧,将编码者配对组合,令其相互督促。或许可以看作是对加强这种影响的一种尝试)

可能是温伯格的用词让这个结论没有得到应有的认可——把网络黑客说成“毫无私心”未免让人莞尔。但是我认为,他的结论今天看起来比任何时候都更让人信服。

借助“无私编程”的澎湃动力,市集模式有力削弱了布鲁克斯定律的影响。布鲁克斯定律背后的真理并没有被推翻,不过庞大的开发群体和廉价的通讯带来了非线性增长。正是这种增长湮没了它的影响。这就如同牛顿学说和爱因斯坦学说的关系。旧的体系在低能量领域依旧有效。不过一旦你将质量和速度推至足够的高度,就会惊现核爆或者Linux

Unix的应该使得我们对研究Linux(以及我小规模效法李纳斯的实证【注1】)得出的结论有所准备。也就是说,虽然编程依旧需要单打独斗,但是真正伟大的革新却要借助整个社区的关注和智慧。一个闭门造车的开发者将会输给一个懂得如何营造开放,演进环境的开发者。因为在这样的环境下,他可以从几百(甚至几千)人中汲取反馈从而探索设计空间、得到代码捐赠、错误检测、以及其他改进。

但是有几个因素制约了传统的Unix世界没能把这一效果推向极至。其中之一就是来自不同版本许可证、行业秘密、和商业利益的法律限制。另一个(回头看来)是因为当时的因特网还不够强大。

在廉价网络到来之前,有过一些地域性的协作社团,在那里他们提倡温伯格的“无私”编程。开发者可以很容易的吸引到一批高水平的建言者和协作开发人员。贝尔实验室,麻省理工大学的人工智能和计算机实验室,加州大学伯克利分校——这些都是创新的来源,颇具传奇色彩并且继续着影响力。

Linux是第一个致力于并且成功地将全世界当作其智库的项目。在我看来,Linux和万维网同期产生,以及Linux19931994年(ISP产业起飞和主流网络商机爆发的岁月)脱离婴儿期都不是巧合。李纳斯是在网络普及成为可能之后,读懂游戏规则的第一人。

尽管,廉价的网络是Linux模式发展的必要条件,但是我认为这并不足以成为充分条件。另一个关键环节是开发中的领导风格和协作机制——因为用户可以加入协同开发,才使得网络这个媒介的力量能够尽情展示。

那么这种领导风格是怎样的?协作关系又是如何的呢?它们不可能是基于权力关系的——即使能做到,强权的领导关系也不会带来我们所见的成果。在这个问题上,温伯格很恰当的引述了19世纪俄国无政府主义者,皮奥奇·阿列克谢耶维奇·克鲁泡特金在《我的自传》[1]中的论点:

我成长于一个农奴主的家庭,直到进入社会,同当时所有的年青人一样,我信奉诸如命令、秩序、叱责、惩罚的必要性。但是当我早期必须经手一些重要事务并与()人打交道的时候,发现任何错误的指令都会引发严重的后果。于是我开始理解“命令和纪律”与“达成共识”两种行事原则的不同之处。前者在阅兵中起到的作用令人钦佩,但在实际生活中则一文不值。因为现实生活中的目标只能由众人同心协力完成。

“同心协力”正是像Linux这样的项目所需要的——“命令和纪律”对于无政府主义天堂(我们称之为网络)里的志愿者来说则形同虚设。为了有效的运营和竞争,一个想要领导协作项目的黑客必须学会如何有效的激发社区对(克鲁泡特金暗示的)“达成共识”模式的兴趣。还必须学会如何应用李纳斯定律。【注2

先前我用“德尔菲效应”解释李纳斯定律,但是它本身更像一个生物学和经济学中的自适应系统。Linux世界在很多方面更像是一个市场或者生态圈,其中自私的个体都试图将自己的利益最大化,但是在这个过程中却自发形成了一种自我纠正机制,其周密度和有效性令任何中央计划都无法与之媲美。这就是可以“达成共识”的地方。

Linux黑客试图最大化的“效用”并不是传统经济学价值,而是在黑客圈中无形的声望和自我实现(或许有人会将他们的动机描绘成“利他的”,但却忽略了一个事实——利他主义本身就是对利他主义者的一种自我满足)。这样的志愿文化并不罕见;我热衷科幻小说已经很久了。与黑客圈不同,科幻迷们早就清楚地认识到“自我赏识”(自我激励或是赢取同好的赞誉)是志愿者活动背后的基本动力。

李纳斯,成功地在一个大部分由他人完成的项目中扮演了“看门人”的角色,培养利基直到它可以自我维持。可以说他准确的把握了克鲁泡特金“达成共识”的精神。Linux世界里这种类经济学的视角让我们得以看到“共识”是如何应用的。

我们可以把李纳斯的方法,视为一条通过“自我赏识”开创有效市场的路径——用尽可能稳固的方法连接自利的黑客,进而实现必须持续协作才能达成的目标。通过fetchmail项目(虽然规模小点),我证实可以通过效法李纳斯取得成效。或许我做得比他更有意识,更系统。

许多人(特别是不信任市场的人)预期(自我主义者的)“自我管理”文化会分崩离析、占山为王、挥霍无度、鬼鬼祟祟、和身怀敌意。但是只需看看丰富、优质、深刻的Linux说明文档就足以将这种预期推翻。程序员讨厌写说明文档似乎是金科玉律,那么这些文档是哪来的?难道Linux黑客都转性了?显然,与自我彰显的Linux市场相比,受人支配的商业软件工作室即使有大笔商业资金支持,也生产不出那么优质的文档。

FetchmailLinux项目都表明,通过对其他黑客的适当回报,一个优秀的开发者/协调者可以通过因特网网罗众多优秀的协作开发者,进而避免项目在混乱中倾覆。所以,针对布鲁克斯定律我提出反议:

19.倘若开发的协调者拥有不逊于因特网的媒介,又懂得如何避免强权领导,那么群体智慧定要强于单打独斗

Providedthe development coordinator has a communications medium at least as good as theInternet, and knows how to lead without coercion, many heads are inevitablybetter than one.

我认为开源软件的未来将日益倚重于那些懂得利用李纳斯游戏规则的人,那些告别大教堂投身市集的人。这并不是说个体的远见和才智光辉不再。相反,我认为开源软件的锋芒会属于一种人——他们以独到的远见和才智开始一个项目,之后通过有效的建立志愿者社区来将其扩大。

或许这并不只是开源软件的未来。若论解决难题,没有一个闭源的开发者能与开源社区的智库相提并论。极少有人能雇用超过200人(1999600人,2000800人)为fetchmail效力。

或许开源文化会取得最终的胜利,但这并不是因为协作是善,而软件“囤积”是恶(或许你相信后者,不过李纳斯和我却不以为然),而只因开源社区可以为解决一个问题投入数量级的时间,所以闭源世界肯定会在这场进化角逐中落下马来。

注:

1.如今我们有了另一款软件,与fetchmail相比,它对市集模式假设做了更多的测试。这就是EGCS——实验性GNU编译系统(Experimental GNUCompiler System)。

这个项目始于19978月中旬,它被视为对早期(《大教堂与市集》公开版本中)观点的有意尝试。GCC项目(GUN C语言编译器,GNU C Compiler)创始人的离开,导致其停滞了许久。大约二十个月之后GCCEGCS开始了平行的开发——利用相同的因特网开发人员;都以相同的GCC源代码为基础;使用几乎相同的Unix开发工具和开发环境。惟一不同之处在于,对于EGCS我们使用了先前述及的市集策略。而GCC则采用了类似大教堂的开发模式——封闭的开发团队,极少的对外释放。

这是我们能做到的最贴切的核对实验了,其结果颇具戏剧性。几个月里,EGCS就凭借一些特色遥遥领先——更棒的优化设计以及对FORTRANC++语言更好的支持。许多人发现与最近的GCC稳定版本相比EGCS发展的更迅速也更可靠。而且主要的Linux发行版都开始改用EGCS了。

19994月,软件基金会(GCC的官方发起机构)决定解散原始的GCC开发团队,并正式由EGCS接管。

2.当然,克鲁泡特金的批判和李纳斯定律把社会组织控制论抬升到了更广阔的角度。进而联想到软件工程领域的另一则民间法则,康威定律Conway's Law):“让四个人开发编译器,你就会得到四个(4-pass)编译器”。原始表述更具有一般性:“产品必然是其组织通讯结构的缩影”。简言之就是“方法决定结果”或是“过程变为产品”。

在很多层面上,开源社区没有必要形成与这适应的组织功能结构。网络无处不在:非独因特网,人们的工作也可以形成一种分布式的松散连接,一种对等网络。正是这种联系提供了恰如其分的冗余和缓解。对于这两种网络而言,一个节点的重要性取决于有多少人愿意与其相连。

其中对等部分对社区惊人的生产力至关重要。SNAFU法则[2]发展了克鲁泡特金对权力观点的阐释:“只有平等才能带来真诚的交流,因为下级更习惯于取悦上级而非告知以诚。”创造性的团队协作需要坦诚的交流,所以权属关系的存在必然形成制约。有效摆脱权力羁绊的开源社区向我们展示了这有多可怕:错误、低产能与错失机会!

进而SNAFU法则预言在独裁组织中,随着谄媚越来越多,决策者和事实的剥离也愈发严重。其在传统软件开发中所扮演的角色显而易见:下级有很多动机去隐匿、漠视、淡化问题。一旦这个过程转化成了产品,就是一场灾难。

译者按:

1.皮奥奇·阿列克谢耶维奇·克鲁泡特金:Пётр Алексе́евичКропо́ткин (1842-1921) 俄国无政府主义者、地理学家、政治哲学家,他认为改善人类现状的方法是合作而不是竞争。他对俄国和英国的无政府主义运动产生了很大的影响。《我的自传》是巴金的译作,也是巴金认为对自己影响最大的一本书。其英文版名为《Memoirs of a Revolutionist》。

2. SNAFU:“snafu”是二战时期军队中使用的一条缩略语。也就是Situationnormal all fucked up(好日子都他妈搞砸了)。后来也写为Situation normal all fouled up(平静的状态被搅乱了)。黑客则借此解释集权模式的恶果。

阅读(2716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~