acm-header
登录

ACM通信

实践

超次元沥青坑


男人站在几何表面的不同角度,插图

信贷:约翰·赫西

回到顶部

25年前,当我开始从事计算机工作时,一位好心的老同事给了我一条经验法则,让我估计自己何时能正确地完成一项任务:先猜一猜,把数字翻倍,然后转到下一个更大的时间单位。

这一规则以一种非常有趣的方式来扩展任务:一分钟的任务会变成两小时的120倍。一小时的工作在两天内“只”增长了48倍,而一天的工作在两周内增长了14倍。

最理想的情况是,一项为期一周的任务只需要延长8倍时间,但情况会变得更糟:一项为期一个月的任务如果在两年后完成,需要延长24倍时间。

对于应该采用何种时间单位,人们几乎没有达成一致一年.十年、一生和一个世纪都是可以辩解的,但规则把它们都转化为永远在实践中。

直觉上,这条规则是有道理的,因为我们倾向于忽略小任务的细节和含义,而现实生活中的假期、孩子和随意的管理行为会阻碍大任务的完成。可用性的问题在于,这是一个人的规则,只讨论持续时间,而不是努力。

我们确实还有另一个古老的规则可以帮助我们:在《圣经》第一章的第一幅图中《人月神话》我认为,小弗雷德里克·p·布鲁克斯在他的经典杰作中提出了最重要的一点。这幅图说明了交付“一个编程产品”要比仅仅编写“一个程序”多出三倍的努力,并且制作“一个编程系统”也要比仅仅编写“一个程序”多出三倍的工作,但是交付“一个编程系统产品”要比仅仅编写“一个程序”多出九倍的工作量。

这个术语有点过时了——这并不意外于1975年出版的一本书,许多年轻读者可能没有读过这本书,所以让我花点时间把它翻译成现代术语。

程序就是程序,程序就是程序。我们谈论的是你为做某事而编写的代码。它只会有一个用户,而且可能永远不会再运行,肯定不会在下个月或明年。这个节目是我们接下来讨论的标准。

要将您的程序变成产品,您必须使其他人能够在没有您的在场或帮助的情况下使用它。您需要记录它,在输入值中添加错误检查,并确保算法假设涵盖了预期的用途,并在未覆盖用途时警告用户。

Brooks所称的“编程系统”是我们使用类库、编程语言、调试器、剖析器、操作系统等来编程的东西。在这里,额外的工作将花费在一般化适用性领域,明智地处理边缘情况,并在整个过程中普遍地实现最小惊讶原则。

如果您想让您的类库或编程语言对陌生人可用,那么您需要做所有的“产品化”,正如Brooks所指出的那样,这并没有增加而是增加了必要的工作。

但布鲁克斯很幸运。

回到1975年,生活要简单得多。男人(当时他们大多是男人)是真正的程序员,电脑呆在叉车放它们的地方,“符合标准”是关于你的磁带的宽度(无论是纸的还是磁的),“国际化”是关于你的客户写得和(如果你不走运的话)说英语的程度。

我曾在一家公司工作,那里的白板上写着“国际化er et problem vi har大多styr på”,丹麦语和英语分别用绿色和黑色书写。对于这个如此棘手的问题,有一种讽刺的评论是,我们甚至放弃了它的正确名称(国际化),而只是简单地记录其中过多的字母:i18n。

在Brooks的两个笛卡尔坐标中,我们必须把国际化作为第三个笛卡尔坐标,当我们在它上面的时候,通过增加一个符合标准的维度来进入多维空间。遵循标准意味着除了您自己的想法和主题的概念模型之外,您必须能够处理编写标准的人所想象的任何概念模型,而头脑中又有一些完全不同的东西。

Tracy Kidder在他的书中提到了一个例子,新机器的灵魂.你可能以为自己造的是电脑,但如果你忽视了欧洲货梯的相关标准,后果自负。

在任何人被冲昏头脑之前,让我澄清一下,安全性不是这个软件几何结构的下一个维度。安全性既不是可选特性,也不是可选特性。缺乏安全性只是总体上缺乏质量的一个例子。

这四个维度与软件的其他属性的不同之处在于,就像怀孕一样,它们是二元属性。软件属性(如质量)是一个连续变量。你可以决定你想要多高的质量,看看你能负担多少,但做不做你的程序或产品是一个二元的决定。没有办法把它变成一种产品。

这并不是说世界上没有缺少文档的产品:库完成了所需的37%,除了“最棘手的对话框”之外的所有国际化,以及只遵从标准中“简单”或表面部分的代码。有很多这样的软件,我写了一些,你也有。但这些捷径和缺点总是被认为缺乏质量,而不是分数维度。我们不认为,“21%的产品”,我们认为,“远没有完成。”

一旦我们接受了这种思考软件的方式,我们就可以给营销灵感的想法贴上价格标签,比如这个来自现实世界的几乎不加掩饰的例子:“让它做。XML我们会大赚一笔出售作为一个模块所有的社交媒体网站世界如果这个程序花了一个月的时间来编写,而布鲁克斯1975年对因子3的估计仍然成立,我个人认为它只是一个下限。我们可以自信地说,这种情况不会在以下时间发生:

  • “XML”=标准化;现在是三个月。
  • “销售”=产品;现在是9个月。
  • “图书馆”=编程;长达27个月。
  • “世界”=国际化;那就是81个月。

减去已经花费的一个月:80个月的额外努力。

我们的经验告诉我们,如果我们期望一个程序员完成它,他或她永远不会完成:160年。

致小弗雷德里克·p·布鲁克斯:感谢你送给我最好的电脑书籍。

对其他人:现在去读它(再读一遍!)

ACM队列的q戳相关文章
queue.acm.org

Kode恶性重新加载
乔治Neville-Neil
http://queue.acm.org/detail.cfm?id=1053341

B.Y.O.C.(1342次,还在增加)
Poul-Henning坎普
http://queue.acm.org/detail.cfm?id=1944489

20年后的五分钟规则:闪存如何改变规则
Goetz Graefe
http://queue.acm.org/detail.cfm?id=1413264

回到顶部

作者

Poul-Henning坎普phk@FreeBSD.org)已经编写了26年的计算机程序,是其背后的灵感来源bikeshed.org.他的软件在开源和商业产品中被广泛采用,作为“幕后”的构建模块。他最近的项目是Varnish HTTP加速器,用于加速像Facebook这样的大型网站。


©2012 acm 0001-0782/12/0300 $10.00

如果您不是为了盈利或商业利益而制作或分发本作品的部分或全部,并在第一页注明本通知和完整引用,则允许您免费制作本作品的部分或全部数字或纸质副本,供个人或课堂使用。本作品的组成部分必须由ACM以外的其他人享有版权。信用文摘是允许的。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,需要事先获得特定的许可和/或费用。请求发布的权限permissions@acm.org或传真(212)869-0481。

数字图书馆是由计算机协会出版的。版权所有©2012 ACM股份有限公司


没有发现记录

登录为完全访问
»忘记密码? *创建ACM Web帐户
文章内容:
Baidu
map