所以我坐在这里听着追赶Stack Overflow Podcast #20,而Joel正在谈论MS的Excel人员,他们编写了自己的编译器,以提高使用指针的代码的性能,这让我感到奇怪< / p>
when is it NIH versus being a sensible investment of time?
鉴于当时的情况,当前的编译器性能非常糟糕,我可以看到,将此特定案例出售给管理层是相当简单,因为您有一个特定的优化领域,您想要添加
但是现在,你能想象一下去管理层说你想要时间重写gcc吗?
那么,人们如何确定一个想法是否值得追求而不是“倾斜风车”追求NIH综合症?
我在问,因为我们需要分配一些时间来改善运营平台的某些方面。我感兴趣的是如何“戴上帽子”,让The Man花一段时间进行改进,大多数人都知道这些改进肯定会在未来得到回报。
编辑:我忘了强调我们是一家为主要广播公司提供平台的服务公司。正是这个平台在过去15年中逐渐发展,需要一些改进。提供此服务是我们的核心业务功能。
答案 0 :(得分:7)
这都是关于竞争优势的。
Excel团队的人员编写了自己的编译器,这样他们就可以使Excel比原本要小得多。这减少了它们的加载时间以及程序使用的内存量;它使他们的产品比竞争对手更好。
同样地,杰夫本可以使用PhpBB制作这个网站,但之后他就像竞争对手一样 。他只是另一个有论坛的家伙。他编写了自己的论坛引擎,以便将自己的网站与竞争对手区分开来。
您应该只部署NIH,这样做可以为您提供明显的竞争优势,或者这样做可以使您在竞争中脱颖而出。
答案 1 :(得分:3)
我可以补充一下,如果它不是核心功能,那么你最好有经济和技术上的好理由。
顺便说一句,美国国立卫生研究院有哪些方面需要做的改进?
答案 2 :(得分:2)
几个月前我们有一个(含糊)类似的问题,需要时间重新做一些我们已经建立了一种不同的方法来满足下游库的不稳定性。最终让它获得批准似乎相当容易 - 应用程序很痛苦,我想他们相信我们所说的。
PS
可能是愚蠢的问题,绝对不是答案,但NIH是什么?
答案 3 :(得分:1)
内存分配是我所有软件的“核心”要求,因此也是我的业务,但我通常不会编写自己的分配器或收集器。
与工程中的其他所有内容一样,每种情况都有一系列的权衡。这些需要经验制作,可以通过不同的方式成功处理,并且无法在博主的声音中进行总结。
尽量善于评估第三方资料的质量。 log4net,这是围绕这里开始讨论的是忽视器,最近被一些着名的项目(如nUnit)删除了。这本来就足以让我失望。
答案 4 :(得分:1)
Vinko,这取决于您对“核心业务功能”的定义。如果我的业务是会计,那么计算贷款利息肯定是核心业务功能,但它肯定不是我公司独有的。像这样的“标准”几乎不应该在内部写。
如果可用组件能够满足我的需求,那么我每次都会使用它。如果我必须做很多争论才能使它发挥作用,那么我可能会考虑编写自己的代码。您还必须考虑法律问题。可能有一个非常好的库,我不能在我的商业应用程序中使用,因为病毒许可证(GPL与LGPL)。
答案 5 :(得分:1)
@Will内存分配不是您业务的核心业务功能,除非您正在编写嵌入式软件或其他内存敏感的应用程序。即便如此,如果您的业务价值不是比竞争对手更有效,那么它仍然不会是核心业务功能。如果您正在编写这种软件并且通过内存效率使自己与众不同,那么您是如何管理的?
是的,当然,你总是要像往常一样照顾权衡,但这几乎没有给答案增加任何价值。 “这取决于”总是一个严格正确的答案,因此毫无意义。
@Mel我同意。对我而言,核心业务功能是与您的主要业务相关的功能,使您与竞争对手区别开来。在您的会计示例中,我怀疑您提到的计算是会计公司的核心资产,但不同的是客户服务或更好的法律知识等等。
我也不同意,如果你总是会使用一些有用的东西,即使应用程序的那部分被认为是你的优势(什么会鼓励人们使用/购买你的应用程序。)那么它就不再是你的优势了。
让我们记住,由于软件的原因,竞争优势并不总是(几乎从不在大型计划中),因此许多人可以使用现有组件而不会冒他们的业务风险。
答案 6 :(得分:1)
这个问题非常及时,Excel的发展激发了这个问题,这非常有趣。我们有一个内部项目,我们需要在PHP应用程序中编写一些Excel功能。一位开发人员已经开展了一年半以上的工作。人们没有意识到在你尝试之前重写Excel有多难。无论如何,去年1月,我注意到PHP有一个由第三方为其编写的PHPExcel库,该第三方正在积极开发和支持(它甚至支持Excel 2007)。所以我们重新发明Excel是完全有意义的(特别是考虑到我们部门的程序员的转变 - 这个人下周要离开我们。)
要回答这个问题,您必须问自己,您想要对项目代码进行的添加或更改是否会对当前功能集产生巨大的指数影响,或者允许您在将来添加更多功能,花费的时间成倍增加。您需要分析并记录代码更改将对整个项目现在和将来产生的上行和下行影响。此外,考虑这些变化是否会使维护更容易并为项目的未来发展做出贡献 - 如果是这样,这会增加应用程序的价值,特别是如果您或其他相关人员有可能在某一天转向其他工作或者其他人可能需要进行更改,而您正忙于其他项目。
顺便说一句,“NIH”意味着“未发明 - 在这里”。请参阅Joel在其关于该主题的博客文章中的链接:In Defense of Not-Invented-Here Syndrome