13年前,埃里克·雷蒙德的文章《大教堂与集市》2重新定义了我们的词汇表,并承诺结束瀑布模型和大型软件公司,这要感谢新的基层开源软件开发运动。我觉得这本书发人深省,但并没有使我信服。另一方面,作为一个深入参与开源的人,我不禁想,如果他是对的就好了。
今年夏天我带到海滨别墅的那本书也发人深省,比雷蒙德的书(它甚至相当正面地提到了):弗雷德里克·p·布鲁克斯(Frederick P. Brooks)的设计中的设计.1尽管我发现自己赞同布鲁克斯的观点,尽管我喜欢布鲁克斯对语言和主题的掌握,但这本书也让我感到悲伤和失望。
13年前也是网络繁荣的顶峰,那时每个青少年都是网络程序员,每个大学辍学生都有一个网络创业公司。我很乐意教那些新手一些很好的老式技巧,包括测试—恢复备份、脚本操作系统安装、版本控制等等。当然,后见之明是无可否认的(也就是说,事件可能没有你记忆中那么有趣),不可否认的是,整个互联网时代对于IT/CS总体来说是一场灾难,对于软件质量和Unix尤其如此。
我还没有看到任何有能力的分析,说明IT行业在网络时代发展了多少。我自己的估计是,在此之前,我们的贸易增长了两个数量级,或者你喜欢的话,超过100000%。
对计算机上瘾是很容易的——几乎任何人都能编写一个程序,就像几乎任何人都能在几次尝试中把两块木头钉在一起一样。问题是,在“骄傲的祖父”群体之外,两块不熟练地钉在一起的木板的市场相当小,而从那里到一套像样的椅子或配备齐全的橱柜,需要天赋、实践和教育。额外的9900%的人在进入我们这一行时既没有实践经验,也没有受过教育,在他们有机会获得这一行之前,派对就结束了,他们中的大多数人都失业了。我宽容地认为,那些成功坚持下来的人是最有才华、技能最强的,但即便如此,作为IT专业人士,他们大多数都很糟糕,因为他们缺乏压迫感。
雷蒙德所倡导的市场文化,“就这样吧”,与网络时代之前精心设计的教堂截然相反,不幸的是,并没有随着网络时代的疯狂而消亡,今天的Unix正在其重压之下迅速下沉。
我更新了我的笔记本电脑。到现在为止,我已经连续运行了18年的FreeBSD开发版本,甚至从源代码编译我的Spartan工作环境也要花上一整天的时间,因为它涉及到试图从Raymond无政府主义的软件集市中理解和架构。
在顶层,FreeBSD端口集合试图创建一个市集地图,使FreeBSD用户能够轻松地找到他们需要的东西。实际上,这张地图目前包含22,198个文件,它们给出了集市上每个摊位的概要描述,用几行文字告诉您该摊位提供了什么,以及在哪里可以阅读到更多有关该摊位的信息。还包括23214个makefile文件,它们告诉您如何处理在每个隔间中找到的软件。这些makefile还试图告诉您应该考虑哪些选择,选择哪些选项,以及对它们来说什么是合理的默认值。这款地图还附带了24400个补丁文件,弥补了许多产品缺乏工艺的缺陷,但总的来说,缺乏可移植性导致了对这些补丁文件的需求。
最后,地图会很有帮助地告诉你,如果你想要www /火狐,你首先需要获得devel/nspr、security/nss、databases/sqlite3等等。一旦您在映射中查找这些包并找到它们的依赖关系,然后递归查找它们的依赖关系,您将拥有一个购物列表,其中包括您需要的122个包www /火狐.
当然,模块化和代码重用是一件好事。然而,即使在最简单的情况下,代码重用的CS/IT教条在市场中也是完全陌生的:FreeBSD端口集合中的软件包含至少1342个复制和粘贴的密码算法。
如果对代码重用的抵制/忽视导致了自包含和独立的软件包,那么代码重复的代价实际上可能是简化包管理的一个很好的权衡。但事实并非如此:这些包形成了一个杂乱的依赖关系网络,导致了大量的代码重复和浪费。
下面是一个具有讽刺意味的浪费的例子:Sam Leffler的graphics/ libtiff是正在开发的122个软件包之一www /火狐,但是产生的Firefox浏览器不呈现TIFF图像。出于我还没有尝试揭示的原因,122个包中有10个需要Perl, 7个需要Python;其中一个devel/glib20需要两种语言,其原因我甚至无法想象。
再往下是彼得原则的重复应用,该原则认为,在一个以成就、成功和功绩为晋升基础的组织中,组织成员最终会获得超出其能力水平的晋升。这一原则通常被称为:“员工往往会上升到他们无能的水平。”将这一原理应用于软件,您会发现需要三个不同版本的Make程序、一个宏处理器、一个汇编程序和许多其他有趣的包。可以说,位于食物链最底层的是libtool,它试图隐藏这样一个事实:在Unix中没有标准化的方法来构建共享库。而不是在所有Unixensomething中标准化如何做,只需要一个旗帜到ld (1)
命令彼得原则被应用,并使它变成libtool的工作。在这种情况下,Peter原则确实很强大——devel/libtool的源代码有414,740行。行数的一半是测试用例,这在原则上是值得称赞的,但实际上这只是彼得原则在起作用:测试精心地探索了一个原本不应该存在的问题的复杂解决方案的功能。更令人恼火的是,其中有31,085行是在一个名为configure的丑陋shell脚本中。其思想是配置脚本执行大约200个自动化测试,这样用户就不用手动配置libtool了。这是一个非常糟糕的想法,在20世纪80年代它出现的时候就受到了很多批评,因为它允许源代码在配置脚本的表面下假装是可移植性的,而不是一开始就具有可移植性的质量。配置的想法幸存下来是一种讽刺。
20世纪80年代看到了非常不同的Unix实现:带有24位指针的cray -1、Amdahl UTS大型机Unix、许多小型计算机制造商或多或少能执行的SysV+BSD混搭,Data General等供应商几乎但不完全是Unix的shims,甚至还有来自油漆公司Mark Williams的真正的Unix克隆版Coherent。
那时的配置脚本都是手工编写的,可以判断这是最像BSD还是sysv风格的Unix,然后复制一个Makefile或者一个。h文件到合适的位置。后来配置脚本变得更加雄心勃勃,作为彼得原则几乎可以预见的应用,有人没有将Unix标准化以消除对它们的需求,而是编写了一个程序autoconf来编写配置脚本。
今天的Unix/ posix类操作系统,甚至包括IBM的z/ OS大型机版本,用1980年的眼光来看都是一样的;然而,libtool的31,085行配置仍然检查
这是怎么发生的?
由于一些一直没有意义的原因,autoconf是用晦涩的M4宏语言编写的,这意味着实际测试看起来像附图中的示例。
不用说,这是大多数程序员都不愿意忍受的,即使他们有技能,所以autoconf的输入文件通过复制和粘贴发生,通常隐藏在日益膨胀的标准宏后面,包括前面提到的“标准测试”,这些宏寻找过去20年没有见过的兼容性问题。
这可能也是为什么libtool的configure会为我的系统没有的Fortran编译器探测不少于26个不同的名称,然后再花26个测试来确定这些不存在的Fortran编译器是否都支持-g选项的原因。
这就是雷蒙德在他的书中所赞扬的市场的令人遗憾的现实:一堆旧的溃烂的黑客,被无知的一代IT“专业人士”无休止地复制和粘贴,即使你用正确的IT架构砸他们的脑袋,他们也认不出来。今天很难相信,在这令人尴尬的混乱之下,隐藏着美丽的Unix大教堂的废墟,它以设计的简单、功能的经济和优雅的执行而闻名。(Sic transit gloria mundi等等等……)
布鲁克斯的许多优秀观点之一是,只有当某人对其负有责任时,质量才会发生,而“某人”只能是一个人,除非是一个充满活力的二人组。我很惊讶布鲁克斯没有把Unix作为这种说法的一个例子,因为我们几乎可以精确地指出Unix开始分裂的时刻:在20世纪90年代初,AT&T剥离了Unix,将其商业化,从而剥夺了它的架构师。
近年来,其他人不止一次得出了与布鲁克斯相同的结论。有些人试图强加一种理智,甚至以技术标准的形式正式制定法律,希望给集市带来秩序和结构。到目前为止,他们都以失败告终,因为在集市上迷失的一代网络神童从未见过大教堂,因此甚至无法想象为什么你会想要一个大教堂,更不用说它应该是什么样子了。事实上,那些最需要阅读这本书的人可能会发现,这是一个可悲的讽刺设计中的设计完全无法理解。但是对于那些曾经怀疑使用m4宏配置auto-conf来编写shell脚本来寻找26个Fortran编译器来构建Web浏览器是否有点绕路的人来说,Brooks的书提供了一个合理的希望,即可以有更好的方法。
相关文章
在queue.acm.org
开放vs.封闭:哪个源更安全?
理查德•福特
http://queue.acm.org/detail.cfm?id=1217267
超次元沥青坑
Poul-Henning坎普
http://queue.acm.org/detail.cfm?id=2108597
破碎的构建
乔治Neville-Neil
http://queue.acm.org/detail.cfm?id=1740550
©2012 acm 0001-0782/12/10 $15.00
如果您不是为了盈利或商业利益而制作或分发本作品的部分或全部,并在第一页注明本通知和完整引用,则允许您免费制作本作品的部分或全部数字或纸质副本,供个人或课堂使用。本作品的组成部分必须由ACM以外的其他人享有版权。信用文摘是允许的。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,需要事先获得特定的许可和/或费用。请求发布的权限permissions@acm.org或传真(212)869-0481。
数字图书馆是由计算机协会出版的。版权所有©2012 ACM股份有限公司
好把。我希望我能在网上拥抱你。
显示1评论