我处于可以使用开源JavaScript插件完成任务的情况。但是,当我尝试使用它时,我发现自己不得不重新设计已经完成的很多工作,以我的拙见,这给项目增加了一定的复杂性。尽管我可以用干净的代码完成相同的任务,但我可以自己制作,而无需更改到目前为止的工作。
在这种情况下,您是否仍应选择一个库(例如,为了获得更好的质量代码?)
我处于可以使用开源JavaScript插件完成任务的情况。但是,当我尝试使用它时,我发现自己不得不重新设计已经完成的很多工作,以我的拙见,这给项目增加了一定的复杂性。尽管我可以用干净的代码完成相同的任务,但我可以自己制作,而无需更改到目前为止的工作。
在这种情况下,您是否仍应选择一个库(例如,为了获得更好的质量代码?)
Answers:
作为工程师,也许将其视为优化问题是合适的。自然,我们必须有一个优化目标。在这种情况下,常见的一种情况是将总拥有成本降至最低。
如果您认为添加第三方组件从长远来看可以节省成本,则应该使用它。如果不这样做,就不应该。确保考虑到持续维护的成本(例如,当发布新版本的O / S,发现安全漏洞或发布一些新的W3C规范时)。
对于许多琐碎的问题,您自己发展的成本会较低,但是对于组织核心能力之外的中等复杂的问题,通常需要第三方。
还有其他目标需要考虑(例如风险),但总体拥有成本是最大的目标。
比尔·盖茨曾经有句著名的话:
“通过代码行来衡量编程进度就像通过重量来衡量飞机制造进度。”
之所以想到这句话,是因为最终可以对库的数量说相同的话。通常,除非:
理想情况下,所有三个条件都满足,但我会满足任何两个条件。最重要的是,除非有一定用途,否则您不应该在程序中添加库。如果您必须问这个目的是什么,您可能不应该将其添加到程序中。因此,程序的代码质量会受益,因为它优雅地调用了每个库,而不必因必须在程序内部重写库而烦恼。
祝好运!
(注意:最初的问题是:库的数量是否会提高代码质量?)
您可能可以自己回答一个问题:不,当然,仅仅使用库并不能改善您的代码。如果这样做的话,很容易为所有内容编写出色的代码。
当人们建议重用时,人们的意思是,众所周知的库中的代码比您自己想出的代码更正确,更有效和/或更可用,这仅仅是因为作者花了更多时间在一个特定的功能范围内(您的整个项目的截止日期)超出了您的承受能力。
但这只是一种趋势,而不是法律。当然,有些库的使用可能不如自己动手使用。通常,当库实际执行的工作远远超出您的需求时,就会发生这种情况,并且这种执行方式会迫使您使自己的代码库适应其约定,而不是合理的。看起来这正是您在此实例中找到的。
虽然使用正确的库可以节省您很多工作,但也有很多隐藏成本:
因此,在向项目添加另一个依赖项以包含一些自己可以写的东西之前,请进行成本/收益分析。
图书馆以及何时使用它们是一个复杂的决定。
一方面,您已经很好地测试了几乎标准的东西(例如,在我的领域中,FFTW属于此类,或类似libsndfile之类的东西),这些东西通常被认为是可以正常工作的,并且在过去20年中一直是标准东西。每个人都使用。
另一方面,您有来自github的随机内容,没有测试套件,只有大约1个维护者,通常为什么要打扰?
对我来说,最苛刻的测试是该库是否适合我的体系结构(有时,如果您知道要使用给定的库,则最终要围绕该库进行设计),并且我是否想结束调试其他人的库代码?第二个问题的一个很好的代表是“是否有自动化测试套件,文档是什么样的?”。
一点调试不是主要问题,但是从维护的角度来看,库代码此时开始以我自己的代码大小为基础(如果由于某种原因而无法将我的修订推向上游,则更多)。
我还要区分库和框架,尽管有时区别并不那么清晰,但在我的世界(小型内核,DSP繁重)中,框架往往让人头疼,尤其是当您尝试合并时,一个或稍微做一些事情,库有时是有用的。我知道这在Web开发人员场景中有很大不同。
归根结底,这取决于您的口味和经验,即使经验丰富的人有时也会选择不佳,至少对于库来说,您总是可以将其删除并编写自己的实现(如果过于烦人)。
决定,决定...