NIH何时才是明智的时间投入?

时间:2020-03-05 18:51:24  来源:igfitidea点击:

所以我坐在这里玩,赶上Stack Overflow Podcast#20,Joel谈论了MS的Excel专家,他们编写了自己的编译器来改善可处理指针的代码的性能,这让我感到纳闷

when is it NIH versus being a sensible investment of time?

考虑到当时的情况,当前的编译器性能非常糟糕,我可以看到,鉴于要添加的特定优化区域,将这种特殊情况出售给管理层非常简单。

但是如今,我们能想象尝试去管理部门并说我们想要时间重写gcc吗?

那么,人们如何确定一个想法是否值得追求,而不是像"向风车倾斜"那样追求NIH综合症呢?

我问是因为我们需要花一些时间来改善我们的运营平台的某些方面。我对如何"手头有余"地要求The Man分配一些时间来进行改进感兴趣,大多数人都知道这肯定会在将来得到回报。

编辑:我忘了强调我们是一家为主要广播公司提供平台的服务公司。在过去的15年中,这个已经有机地增长的平台需要进行一些改进。提供这项服务是我们的核心业务功能。

解决方案

回答

乔尔本人回答说,他的最佳建议(似乎合理)是:
如果这是一项核心业务功能-那就自己动手吧。

我还可以补充一点,如果它不是核心功能,那么我们最好同时具有经济和技术方面的理由。

顺便说一下,NIH涵盖了我们需要时间进行哪些改进?

回答

几个月前,我们有一个(大概)类似的问题,需要时间来重新做一些事情,而我们已经建立了一种解决下游库不稳定的方法。最终使该应用程序遭受痛苦似乎很容易获得批准,我想他们相信我们在说什么。

聚苯乙烯

可能是愚蠢的问题,绝对不是答案,但是NIH是什么?

回答

内存分配是所有软件(因此也是我的业务)的"核心"要求,但是通常我不会编写自己的分配器或者收集器。

像工程中的其他所有内容一样,每种情况下都有一系列的权衡取舍。这些要求经验丰富,可以用不同的方式成功处理,并且不能用博客的声音来概括。

尝试擅长评估第三方产品的质量。 log4net是在这里开始讨论的是忽略软件,该软件最近已被一些知名项目(例如nUnit)删除。那足以使我失望。

回答

Vinko,这取决于我们对"核心业务功能"的定义。如果我的业务是会计,那么计算贷款利息无疑将是一项核心业务功能,但它肯定不是我公司所独有的。像这样的"标准"几乎绝对不能在内部编写。

如果可用组件满足了我的需求,那么我会每次使用它。如果必须做很多工作才能使其正常工作,那么我可以考虑自己编写。我们还必须考虑法律问题。可能由于病毒许可证(GPL与LGPL)而无法在我的商业应用程序中使用一个非常好的库。

回答

@Will内存分配不是我们业务的核心业务功能,除非我们正在编写嵌入式软件或者其他对内存敏感的应用程序。即使那样,如果业务价值正在做其他事情,而不是比竞争对手更有效地利用内存,那么它仍然不是核心业务功能。而且,如果我们正在编写这种软件,并且该软件通过内存效率来与众不同,那么我们是如何进行管理的呢?

是的,当然,我们将一如既往必须始终权衡取舍,但这几乎不能为答案增加任何价值。 "取决于"始终是严格正确的答案,因此毫无意义。

@梅尔,我同意。对我来说,核心业务功能是与主要业务相关的功能,这些功能可以使我们与竞争对手区分开来。在会计示例中,我怀疑我们提到的计算是会计公司的核心资产,但与客户服务或者对法律的了解有所不同。

而且我也不同意,如果即使在应用程序的那部分据称是优势时(即使会鼓励人们使用/购买应用程序),我们仍然会使用某些可行的东西,那么它就不再是优势。

让我们只记得,由于软件的缘故,竞争优势并不总是(几乎永远不会出现),因此许多人可以使用现有组件而不会冒业务风险。

回答

这一切都与竞争优势有关。

Excel团队的成员编写了自己的编译器,因此他们可以使Excel比以前缩小得多。这减少了它们的加载时间,并减少了程序使用的内存量。它使他们的产品比竞争对手更好。

同样,杰夫本可以使用PhpBB来制作此网站,但随后他将像竞争对手一样。他只是论坛上的另一个家伙。他编写了自己的论坛引擎,因此可以使自己的网站与竞争对手区分开。

只有在这样做可以给我们带来明显的竞争优势或者在竞争中脱颖而出的地方,才应部署NIH。

回答

这个问题非常及时,非常有趣,以至于Excel的开发激发了这个问题。我们有一个内部项目,其中需要将一些Excel功能编程到PHP应用程序中。一位开发商对此项目进行了超过一年半的研究。除非我们尝试过,否则还没有意识到重写Excel有多么困难。无论如何,去年1月,我注意到PHP拥有一个由第三方积极为其开发和支持的PHPExcel库(它甚至支持Excel 2007)。因此,重新发明Excel完全有意义(特别是考虑到该部门下周要离开我们部门的程序员的交接)。

要回答这个问题,我们必须问自己要对项目代码进行的添加或者更改是否会对当前功能集产生极大的指数影响,或者将来允许我们以更少的时间增加更多功能花费。我们需要分析并记录代码更改对现在和将来对整个项目产生的正面和负面影响。另外,请考虑是否可以通过更改使维护变得更容易,并为项目的未来发展做出贡献,如果这样做的话,可以为应用程序增添价值,尤其是如果我们或者所涉及的其他人有一天可能会转而从事其他工作,否则在我们忙于其他项目时可能需要其他人进行更改。

顺便说一句," NIH"表示此处未发明。请参阅Joel在他的博客文章中的链接,主题为:捍卫未发明的综合征