“不要重新发明轮子”会忽略人类记忆的局限性吗?


16

在Haskell和F#中工作的一件事告诉我,一个比我聪明的大学里的某人可能已经找到了我所做工作的抽象。同样在C#和面向对象的编程中,无论我在做什么,都可能有一个“ it”库。

我非常强调在编程中重用抽象,这使我经常感到两难之间:1)自己编写简短又肮脏的东西; 2)花相同的时间找到别人更健壮的库/解决方案,然后再使用它。

像最近一样,这里的一位编码人员为CSV文件编写了一个(反)序列化器,我忍不住想起来,如果.NET标准尚未提供,那么在网上很容易找到这样的内容蜜蜂。

不过,我不怪他,在.NET中工作了好几次,我根据我所知道的方法修补了一个解决方案,只是意识到通常在同一个库中有一些方法调用或对象之类的东西 它们做了什么我想要,但我不知道。

这仅仅是经验不足的征兆,还是在编写新内容和重用旧内容之间总要权衡取舍?我最讨厌的是遇到一个我已经知道并忘记的解决方案时。我觉得现在一个人无法消化大多数语言预打包的大量代码。

Answers:


9

首先,您需要学习识别足够通用/可重用的“组件”,以使可能已经存在库或第三方解决方案。一旦做到这一点,就应该意识到,即使您是一名优秀的开发人员,无数开发人员在相同问题上花费无数小时的集体经验也可能会提供比您以往更好的解决方案。这并不意味着您永远不应该“重新发明轮子”,但是,如果您选择这样做,则最好具有DAMN这样做的充分理由。

我非常强调在编程中重用抽象,这使我经常感到两难之间:1)自己编写简短又肮脏的东西; 2)花相同的时间找到别人更健壮的库/解决方案,然后再使用它。

值得一提的是,即使它把你的时间是相同的,因为它确实给它写自己找到一个现有的库/解决方案,请记住,这样做你自己也意味着你必须去维护它永远。您不仅要重新发明轮子,而且要重新设计整个维修站人员以保持轮子运转。当然,有些库的错误或维护不善,但是在选择第三方解决方案时,您应该牢记这些。


2
但是,通常情况下,即使它很好并且得到了积极的维护,您也可能最终会在库上花费更多的维护时间。通常,这种情况是在设计时以某种方式恰巧不适合您的代码而发生的。
杰森·贝克

+1用于证明在搜索现有库/解决方案上花费的时间。
rwong 2010年

+1指出维修人员,我们似乎总是忘记了他们
FilipDupanović2011年

5

有时,这是缺乏经验的迹象,无论是使用特定的语言还是一般的编程。然而,有时候,如果配合不是很明显,它只是更好地滚动,它自己的代码究竟是什么你想,仅此而已。通用库虽然通常很有用,但可以为您根本没有的需求而构建,在某些情况下,这种通用性可能使它们变得比其值得的麻烦更多。

示例:对于我的一个人的小型项目,我从不使用“真实的”日志记录库。我使用print语句以及一些临时配置。当print语句可以很好地满足我的目的时,我不想为设置和配置日志库而烦恼,该日志库具有比我将要使用的功能更多的功能。我也不想再有一个可能与我要使用的编译器/解释器版本不兼容的依赖项,而必须分发等。


1
...或相反 有时,它已针对非常特殊的任务进行了调整,但是不够灵活,无法执行代码需要执行的操作。
杰森·贝克

这就是我要回答的
Dominique McDonnell

4

欢迎来到编程世界。这个问题将成为您与未来同事之间许多分歧的主题。您有两种选择:

  1. 自己动手。
  2. 在其他人的解决方案之上构建一些东西。

我认为有时候两种解决方案都合适。例如,如果可以避免的话,我宁愿避免滚动自己的ORM CSV解析器,主要是因为这是非常繁琐的工作。另一方面,库通常受到限制。我要说的是,对于我从事的每个项目,如果没有这个缺点,我都会遇到可以完美解决我问题的库。或者有时候,刚开始做某件事时,库正是您所需要的,但是,当您需要进行更改时,库的危害远大于帮助。

但总的来说,我建议不要尝试查找“正确”的答案,因为它们不存在。如有疑问,请随便吃。我曾经听说有人说经验是由您犯了多少个愚蠢的错误决定的。因此,通常情况下,您将学到东西或做一些有用的事情。无论哪种方式,都还不错。


我想说这是三个选择:针对特定需求推出自己的解决方案,改用其他人现有的解决方案,或者推出自己的通用解决方案来满足这种需求以及未来的需求。这是三向选择的事实使其比两向选择困难得多。
2012年

2

在以前的工作中,框架遭受严重的内部平台效应之苦,这(或类似的事情)经常发生在我身上。

基本上,他们的代码库是从早期的Windows C / C ++演变而来的,然后开始在MFC下进行编译-因此,维护人员开始将MFC及其旧的内部数据结构和窗口组件混合在一起。内部平台没有很好的文档记录,但由于它提供了一些内部功能,因此据说是在该产品上执行操作的“方式”。我经常发现从头开始(根据MFC基础知识)编写自己的东西变得更容易,更快捷,而不是研究如何使用公司的内部框架来完成。

(好吧,这似乎与您的初衷几乎是相反的-但是原理是一样的,呵呵!是的,有时候做自己的事情确实比花时间和精力寻找现有的可重用性要快得多。解。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.