乔·博克(Joe Bork)写了一篇很棒的文章,解释了决定是否修复错误的一些决定。这意味着我可以将它从我未来的潜在条目列表中划掉。谢谢你,乔!
但是,在我讲到这一点时,我想对Joe说的话做一些扩展,他的评论不仅仅是错误修复。错误修复是对产品行为的一种更改,所有更改都有类似的成本和过程。
在我实际定期向脚本引擎添加功能时,人们会给我发邮件,要求我实现一些新功能。通常,该功能是“一次性的”--这一功能解决了他们的特定问题。例如,“我需要调用ChangeLightBulbWindowHandleEx,但是没有ActiveX控件可以这样做,并且您不能直接从脚本调用Win32API,您能将ChangeLightBulbWindowHandleEx方法添加到VBScript内置函数吗?那就只有五行代码了!“。
我总是告诉这些人同样的事情-如果只有五行代码,那么就去编写您自己的ActiveX对象吧!因为是的,您是绝对正确的-将该功能添加到VBScript运行时库大约需要5分钟。但是换一个灯泡到底需要多少微软员工呢?
一个文档管理器将新文档集成到现有正文中,更新目录、索引等。
25名翻译员将文档和错误消息翻译成Windows支持的所有语言。翻译员的经理居住在爱尔兰(欧洲语言)和日本(亚洲语言),这两个地方都与雷德蒙德严重时移,因此处理它们可能是一个相当复杂的后勤问题。
一个由高级经理组成的团队来协调所有这些人,开支票,并向他们的副总裁说明费用的合理性。
您会注意到,我没有添加Joe谈到的所有内容,比如如果这五行代码中有bug怎么办?最初的5分钟开发时间转化为许多人周的工作和巨大的成本,所有这些都是为了节省一个人几分钟的时间来制作一个一次性的VB6控件,它可以做他们想做的事情。抱歉,但这在商业上没有任何意义。在微软,我们非常非常努力地不发布半生不熟的软件。通过确保说加泰罗尼亚语的法律盲人的西班牙人可以轻松地使用该功能,而不担心引入新的安全漏洞,获得正确的软件是相当昂贵的!但我们必须把它弄对,因为当我们发布新版本的脚本引擎时,数以亿计的人将使用该代码,数千万人将针对它进行编程。
任何不能为大部分用户提供服务的新功能,本质上都是在窃取宝贵的资源,这些资源本可以用来实施功能、修复漏洞或寻找确实影响数百万人生活的安全漏洞。
更新:KC Lemson和Raymond Chen以及Chris Pratley对此也有意见。
谁制定了开放源码软件的测试计划?谁更新用户指南和联机帮助中的屏幕截图?谁把文件翻译成波兰语和土耳其语?谁来验证该功能是否违反了“美国残疾人法”或德国隐私法?(回到我从事Linux工作的时候,答案是“没人。没有测试计划,没有印刷的用户指南,仅有的为数不多的文档只有英文,没有人关心是否遵守美国反兴奋剂机构或德国的隐私法。“。也许从那时起情况就发生了变化。)。
思想实验:明天,比尔将开源微软的所有产品,并设立1000亿美元的捐赠基金,以支付代码库的持续开发费用。是什么让我提到的所有成本突然消失了?
没什么!。开源不是魔术。在开放源码社区中似乎有一种奇怪的信念,即仅仅因为您可以更改源代码,并且没有人付钱让您这样做,所以更改是免费的。但事实并非如此,因为改变不需要花钱。改变需要付出努力才能做好,而金钱只是衡量努力的便捷方式,而不是努力本身。世界上只有有限的努力,知道如何将其发挥到最大的效果是一个困难的问题。
在这里换一个灯泡并不需要几十个人,因为我们以卖软件为生,即使我们把它和资源一起送出去,也需要几十个人。这需要几十个人,因为我们非常关心那个说加泰罗尼亚语的法律盲人客户。换一个灯泡需要几十个人,因为软件是一种极其复杂的设备,它运行在一个极其复杂的世界里。管理这种复杂性要比更改代码多得多。
关键是客户可以自由地修复/更改影响他们自己的东西,但对您来说不值得修复。由于该功能/问题对您来说并不值得,因此很明显,该功能不适用于广泛部署的软件…。你所有的努力都(正确地)集中在那里。它只需要为一个非常特殊的目的在少数盒子上工作,在那里说加泰罗尼亚语的盲人客户不会发挥作用。或者可能功能对客户非常非常重要(昨天!Dangit!),而且他们没有时间等待微软在Windows XP家庭阿拉伯语上进行质量保证。
明白了。但这正是我们将脚本引擎构建为可由任意第三方ActiveX对象扩展的原因。就像我说的,如果这个特性既便宜又简单,那么您可以自己在VB6对象中实现它。但是,不能允许脚本引擎本身分裂成一百万个略有不同、互不兼容的版本--这并不能很好地服务于客户。
现在,如果您为脚本引擎“提供”了一组“开源”的助手ActiveX对象,会怎样呢?您可以将它发布到某个microsoft网站上,然后只说这是一个如何扩展脚本引擎…的演示。我们能找到一种模式,让微软员工摆脱“快速黑客”,而不需要微软在未来100年内对此负责吗?
我相信微软已经发布了相当数量的“开源”软件,其形式是MSDN Online中的所有示例,以及各种产品安装(如VB)中包含的示例。
如果这还不够,你可以在网上找到大量的样本,在各种行业出版物中,在新闻组中,显然还可以在像这样的博客中找到。
OTOH你不能忽视这样一个事实,即微软对其发布的任何软件都要承担一定的责任,无论它是多么非官方的软件。如果你为这个网站复制一个样本,它格式化了你的磁盘,你会责怪微软和埃里克可能会丢掉他的工作。
由于某些原因,“记住我”复选框对我不起作用。当我提交的时候,我得到了一个内存异常屏幕。
您错过了一个步骤-三个人争论此方法对于脚本是否安全。
Raymond写道:“谁制定了开放源码软件的测试计划?没有测试计划,没有印刷的用户指南,仅有的为数不多的文档只有英文,没有人关心是否遵守美国反兴奋剂机构或德国的隐私法。“。也许从那时起情况就发生了变化。“。
他们当然已经改变了。如果您对这是否属实感兴趣,请查看Gnome和KDE项目。更有组织(特别是。KDE)比过去任何时候都要好。一般说来,这是大多数OSS开发人员都不想做的工作--用我经常听到的俗语来说,这并不是一件令人毛骨悚然的事情。现在人们对开放源码软件感兴趣,钱也在挥霍,人们正在做这些事情,因为他们正在拿钱做这件事。
埃里克似乎在争辩(如果我错了,请纠正我)“如果我们放弃一切,我们如何为人们的努力付出代价?”首先,开放源码软件并不意味着免费。仅仅因为一些开放源码软件应用是免费的,并不意味着它们“必须”是免费的。
我想知道到底有多少微软员工曾经去过opensource.org,现在他们可以*不用*求助于我们从微软那里得到的通常的FUD来讨论OSS。我不是故意在这里兜圈子,我喜欢OSS,我也喜欢Windows,但当我看到FUD和像SCO的暗中融资这样的东西时,我不喜欢Sco女士,就像他们不想在公平的条件下竞争-也许我只是天真,这就是商业运作的方式。我真希望不是这样。
我不得不说,关于用户指南和它的印刷,我从来没有见过有人读过它。没有外泄。绝不可能。永远不会。也许你应该做个民意测验,不打印可以省钱。
>;Eric似乎在争论(如果我错了,请纠正我)“如果我们放弃一切,我们如何为人们的努力付出代价?”
不,我当然不是在争论这个。也许雷蒙德是,但我不是。我意识到有些公司付钱让人们从事开源工作。
我的论点是,如果你从事的是编写供全世界数百万人使用的软件的业务,那么实现该软件的主要成本并不在实现上。成本包括设计、审查、文档、测试、维护、支持电话等。
您的业务模式是要求出售该软件,还是-就像我们在过去七年中对脚本引擎所做的那样-免费提供它,无论源代码是开放的还是关闭的,都对我的观点没有丝毫影响。对于将分发给一个人的一次性更改,开放源码模型是否能很好地工作?很明显。但这不是我所说的那种改变。
机会成本是假设的。“盗窃”是指剥夺他人实际财产的行为。因为假想的不是实际的财产,所以“偷窃”这个词在你最后一段用起来不合适。最好让事实为自己辩护,而不是用虚假的描述来结束。
事实上,“事实”是没有腿的抽象实体。所以他们不能真的为自己“挺身而出”。你不觉得这用词有点差劲吗?幸运的是,通过运用我的高级推理技巧,我大概可以从你不精确和口语化的表达中猜出你的意图。
你可以看出这些只是技术人员在读这篇文章,因为嘿,伙计们!(特别是Robert等)-最终用户不想要半生不熟的软件!
虽然作为一名开发人员,我更愿意让软件做我想让它做的事情,我也更愿意让它做它能做的事情(不会造成更多问题),并允许我改变它的行为。
仅仅因为街上的技术人员可以改变应用程序的行为,并不意味着所有的终端用户都可以。在科技界,我们不仅“看到”了最终结果,而且还看到了最终结果是如何产生的,以及如何影响变化的。最终用户,虽然这种态度有时会改变,但他们并不关心它是如何工作的-他们只是想要它这样做。
当我问时间时,我不想知道怎么造钟,也不想知道怎么修钟--我只想让钟告诉我时间。开源不是上面提到的问题的解决方案--它只是对它的另一种看法。
“仅仅因为街上的技术人员可以改变应用程序的行为,并不意味着所有的终端用户都可以。”
诚然不是,但至少他们会有机会付钱/雇人来帮他们做这件事。如果我希望有人给我的房子供暖系统增加一些东西,我希望“任何人”都有能力修理它,我不想被迫回到原来的安装程序…。。
看起来高维几何学的错综复杂还得再等一周;我简直是令人难以置信的…
John Gruber出现在Joel Spolsky即将出版的书“最佳软件写作I”(The Best Software Writing I)中。
无论是软件还是内容,做出改变往往比你想象的要大得多。I…。
我只想确认你看到我对你博客评论的回应:
这是当之无愧的反馈。我清楚地记得,我曾说过Outlook 2007的某个错误修复只需要几行代码(我没有主动为开发人员编写代码),但并不知道这几行还需要做多少其他工作。
如果用户不能创建ActiveX对象怎么办?不是因为用户不会编码,而是因为他们没有访问开发环境、编译器或创建和/或安装对象的足够权限。毕竟,VBScript(以及JScript、VBA、WSH等)比Visual Studio或一些其他开发工具可供更多用户使用。
您可以争辩说,他们应该获得必要的软件/授权等来开发activex对象(也许在12个月后,业务案例可能会获得批准的…)。。但是,需要业务案例来实现一些所需功能的语言本质上是残缺的。
我可以说,从我个人的经验来看,有一种语言不是像典故所暗示的那样“走到尽头”是令人沮丧的。
关于开源的讨论太多了。请原谅我的无知。谁使用开源软件?我听到每个人都在宣传它。到目前为止,我还没有看到任何人使用这些产品,至少在发展中的社区是这样。我们不要伪善了。你想做一些人们使用的东西,那是要花费的。听着,没有什么是免费的。
尽管我非常喜欢开源软件,但这个论点(作者的论点)也适用于开源软件。然而,使用开放源码软件,您通常不会有一个项目经理、多个QA人员等所有人协作的奢侈品。通常是你,也许还有其他几个敬业的人在热情地做一些事情。当你完成后,你把它扔给用户,然后大量的错误出现了,这是你从未想过的(谁会想到用户会在零度天气的…中把灯泡放在外面。哎呀!)所以,在我看来,这不是“支持”开放源码软件的论据。开源软件也患上了同样的“需要几个人”综合症。
回到文章作者的观点,您不想把各种一次性的东西扔到您的项目中,因为那样会使项目变得臃肿。然而,越来越多的项目选择基础,然后是可扩展的脚本(EG:一些视频游戏,Firefox等)。当然,如果您的项目只不过是一种脚本语言(VBScript),那么它就应该是轻量级的。所以,是的,接受它,自己做这5行代码。甚至如果VBScript充斥着每个人的“一次性”垃圾,它将是如此笨重的大杂烩,没有人会使用它(或者抱怨它变得多么复杂)。
我想比尔·考斯比说得最好,…“。我不知道成功的秘诀,但失败的秘诀是努力取悦每个人。“。
很多人使用开源软件。从决定使用Open Office或Firefox的人,到下载一个微不足道的小程序或教练来破解一些游戏文件的人,这样他们就可以提升自己的角色。如今,软件是如此无处不在,而且很容易制作,以至于人们认为要想让它仍然存在,必须花费大量的时间和金钱。开源只是意味着源代码是可查看的,并且(可能)是可修改的(取决于作者发布它的许可证)。*开源在某些情况下不一定是免费的…。人们可以让你看到源代码,但仍然要向你收取使用它或编译后的程序的费用。但是,软件并不是大公司唯一有权使用的商品。“这就像是经常写…一样。任何人都可以做这件事,而且很多人都这样做。你是选择从商店购买一本有你想要的信息的书,还是从互联网网站免费获得信息,这是一个选择的问题。“免费”并不一定意味着“质量差”或“质量差”。然而,特别是在美国,人们认为东西成本越高越好。尽管如此,人们仍然对开源和免费软件不屑一顾。这就像是说只有昂贵的经销商才能修好你的车,因为街上的遮阳树机械师什么都不知道。相反,遮阳树机械师可能知道很多。但话又说回来,他可能不会。“与遮阳树机械师在质量上有较大差异,但你仍然可以从经销商那里得到糟糕的服务。”质量不是因为你花钱买产品或服务就一定会有的。相反,糟糕的质量并不是因为你免费得到一些东西就一定会有的。
看起来高维几何学的错综复杂还得再等一周;我难以置信地。
我认为问题在于开发工具不是免费的。*作者建议的编写和ActiveX扩展显示出很好的可扩展性,然而,如果我必须花费500美元或1000美元来获得工具来做到这一点,那么这是不可能的。
微软的问题往往是规模!当你有数百万依赖于你的项目的人时,通常不假思索就完成的更改现在突然变得非常困难。这就是对产品使用的巨大依赖。将使用你的产品的人数除以制造你的产品的人数,你可能会对你的团队的效率有更好的了解(这不是我所知的最好的衡量标准,但它有助于透视)。第二个描述的问题是流量。在长达数周的过程中,由于等待他人的时间,大部分时间都是浪费的。“如果你让每个人都在同一个房间里,那么任务就会完成得快得多。开源很棒,但是开源在更大的规模上也有同样的问题。这些规模问题经常导致社区“分叉”,这可以使情况变得更好,但也可能导致支离破碎。
换一个灯泡不需要一个员工,比尔·盖茨刚刚将“黑暗”重新定义为新的行业标准…
我试着告诉我的经理们,一个小错误可能需要多长时间才能修复并投入生产。
我看得出你在这篇文章中提出的观点。事实上,这就是为什么我如此珍视来自雷蒙德的东西。它实际上是经过测试的,考虑到了一些API问题,最重要的是,您可以找到一些如何使用系统特定部分的实际示例。
关于开源框架,请注意:它们非常棒,甚至非常棒!但是最好的那些有大量的文档和大量的示例。那些没有学习资源的人,即使他们在解决问题上表现最好,也注定只会被使用一次,甚至两次。
我完全同意这篇文章。人们往往没有意识到,一个简单的改变就能造成如此巨大的副作用。我们的网站有16种语言,我们已经接受一些文本(在某些页面上甚至大部分)不被翻译,因为翻译它会带来更多的悲伤而不是快乐。例如,翻译一些文本会导致语法错误(考虑复数形式-在英语中很容易,1张照片,2张或更多照片,但在波兰语中是1zdjecie,2zdjecia,5zdjec,12zdjec,但是...。22zdjecia,然而21zdjec等),并引起了大量投诉,这就产生了额外的回答它们的任务,这…。花费时间==金钱。
@bob-您当然有免费的开发工具(在MS平台上-Express版、Linux Eclipse等)。
@开源支持者-我喜欢一些开源的东西,但你必须接受这一点,如果有人做出了只为他自己的更改,他们必须接受整个修改后的产品不能得到适当的支持,因为他们在代码中的微小更改可能会在非常意想不到的地方产生轰动效应。我在我的生活中开发了很多库,我从痛苦的经历中知道,在完全意想不到的地方,你会得到错误。
我们遇到的最奇怪的错误之一是下面的场景(多年前用C语言编写的代码。
.