重要通知:域名变更为m.bxuu.net请收藏
ngHong是个很聪明但是经验不足的程序员),Carl的代码更好一些,相当专业和稳固,但他的程序缺少几个重要的相当容易实现的fetchpop的特征(包括我自己写的那些)。
继续呢还是换一个?如果换一个的话,作为得到一个更好开发基础的代价,我就要扔掉我已经有的那些代码。
换一个的一个实际的动机是支持多协议,pop3是用的最广的邮局协议,但并非唯一一个,Fetchpop和其余几个没有实现POP2.RPOP,或者APOP,而且我还有一个为了兴趣加入IMAP(InternetMessageAccessProtocol,最近设计的最强大的邮局协议)的模糊想法。
但是我有一个更加理论化的原因认为换一下会是一个好主意,这是我在Linux很久以前学到的:
3.“计划好抛弃,无论如何,你会的”(FredBrooks,《神秘的人月》第11章)
或者换句话说,你常常在第一次实现一个解决方案之后才能理解问题所在,第二次你也许才足够清楚怎样做好它,因此如果你想做好,准备好推翻重来至少一次。
好吧(我告诉自己),对fetchpop的尝试是我第一次的尝试,因此我换了一下。
当我在1996年6月25日把我第一套popclient的补丁程序寄给CarlHarris之后,我发现一段时间以前他已经对popclient基本上失去了兴趣,这些代码有些陈旧,有一些次要的错误,我有许多修改要做,我们很快达成一致,我来接手这个程序。不知不觉的,这个计划扩大了,再也不是我原先打算的在已有的pop客户上加几个次要的补丁而已了,我得维护整个的工程,而且我脑袋里涌动着一些念头要引起一个大的变化。
在一个鼓励代码共享的软件文化里,这是一个工程进化的自然道路,我要指出:
4.如果你有正确的态度,有趣的问题会找上你的,但是CarlHarris的态度甚至更加重要,他理解:
5.当你对一个程序失去兴趣时,你最后的责任就是把它传给一个能干的后继者。
甚至没有商量,Carl和我知道我们有一个共同目标就是找到最好的解决方案,对我们来说唯一的问题是我能否证明我有一双坚强的手,他优雅而快速的写出了程序,我希望轮到我时我也能做到。
三.拥有用户的重要性
于是我继承了popclient,同样重要的是,我继承了popclient的用户基础,用户是你所拥有的极好的东西,不仅仅是因为他们显示了你正在满足需要,你做了正确的事情,如果加以适当的培养,他们可以成为合作开发者。
Unix传统另一有力之处是许多用户都是黑客,因为源优码是公开的,他们可以成为高效的黑客,这一点在Linux世界中也被推向了令人高兴的极致,这对缩短调试时间是极端重要的,在一点鼓励之下,你的用户会诊断问题,提出修订建议,帮你以远比你期望快得多的速度的改进代码。
6.把用户当做协作开发者是快速改进代码和高效调试的无可争辩的方式。
这种效果的力量很容易被低估,实际上,几乎所有我们自由软件世界中的人都强烈低估了用户可以多么有效地对付系统复杂性,直到Linus让我们看到了这一点。
实际上,我认为Linus最聪明最了不起的工作不是创建了Linux内核本身,而是发明了Linux开发模式,当我有一次当着他的面表达这种观点时,他微笑了一下,重复了一句他经常说的话:“我基本上是一个懒惰的人,依靠他人的工作来获取成绩。”象狐狸一样懒惰,或者如RobertHeinlein所说,太懒了而不会失败。
回顾起来,在GNUEmacsLisp库和Lisp代码集中可以看到Linux方法的成功,与Emacs的C内核和许多其他FSF的工具相比,Lisp代码库的演化是流动性的和用户驱动的,思想和原型在达到最终的稳定形式之前往往要重写三或四次,而且经常利用Internet的松散合作。
实际上,我自己在fetchmail之前最成功的作品要算EmacsVC模式,它是三个其他的人通过电子邮件进行的类似Linux的合作,至今我只见过其中一个人(RichardStallman),它是SCCS、RCS和后来的CVS的前端,为Emacs提供“onetouch”版本控制操作,它是从一个微型的、粗糙的别人写好的sccs.el模式开始演化的,VC开发的成功不像Emacs本身,而是因为EmacsLisp代码可以很快的通过发布/测试/改进的过程。
(FSF的试图把代码放入GPL之下的策略有一个未曾预料到的副作用,它让FSF难以采取市集模式,因为他们认为每个想贡献二十行以上代码的人都必须得到一个授权,以使受到GPL的代码免受版权法的侵扰,具有BSD和MITX协会的授权的用户不会有这个问题,因为他们并不试图保留那些会使人可能受到质询的权力)。
四.早发布、常发布
尽量早尽量频繁的发布是Linux开发模式的一个重要部分,多数开发人员(包括我)过去都相信这对大型工程来说是个不好的策略,因为早期版本都是些充满错误的版本,而你不想耗光用户的耐心。
这种信仰强化了建造大教堂开发方式的必要性,如果目标是让用户尽可能少的见到错误,那你怎能不会仅仅每六个月发布一次(或更不经常),而且在发布之间象一只狗一样辛勤“捉虫”呢?EmacsC内核就是以这种方式开发的,Lisp库,实际上却相反,因为有一些有FSF控制之外的Lisp库,在那里你可以独立于Emacs发布周期地找寻新的和开发代码版本。
这其中最重要的是Ohio州的elisp库,预示了今天的巨大的Linux库的许多特征的精神,但是我们很少真正仔细考虑我们在做什么,或者这个库的存在指出了FSF建造教堂式开发模式的什么问题,1992年我曾经做了一次严肃的尝试,想把Ohio的大量代码正式合并到Emacs的官方Lisp库中,结果我陷入了政治斗争中,彻底失败了。
但是一年之后,在Linux广泛应用之后,很清楚,一些不同的更加健康的东西诞生了,Linus的开发模式正好与建造教堂方式相反,Sunsite和tsx11的库开始成长,推动了许多发布。所有这些都是闻所未闻的频繁的内核系统的发布所推动的。
Linus以所有实际可能的方式把它的用户作为协作开发人员。
7.早发布、常发布、听取客户的建议
Linus的创新并不是这个(这在Unix世界中是一个长期传统),而是把它扩展到和他所开发的东西的复杂程度相匹配的地步,在早期一天一次发布对他来说都不是罕见的!而且因为他培育了他的协作开发者基础,
本章未完,请点击【下一页】继续阅读》》