重新发明轮子是一个习语,但由于使用了非常隐喻而无效。 这是因为轮子是在整个历史上已经成功地重塑了无数次的事情之一。
我们使用的材料从无数类型的石材和木材改变为无数的金属合金和碳基物质。 车轮的内容和比例已更改。
从某种程度上来说是圆形的,饱满而宽大的轮子。
到具有数百个辐条的完美圆形,薄而空心的辐条。
车轮与之交互的组件(例如轮胎和车轴)发生了变化,促使成千上万的车轮重新设计以与之配合使用。 使用该车轮的地形和机械也发生了巨大变化,从而引发了许多其他车轮发明。
确实,即使车轮的基本形状也不安全,从好的旧圆形车轮到方形的车轮都有变化。
设想数以百万计的车轮的重新发明及其所帮助实现的进展的最佳方法是思考如何在整个时间段内使用它。
车轮已经从略微减轻劳力的好奇心变成了我们赖以生存的重物,以安全地着重重达数千吨的飞行堡垒,并携带大规模毁灭性武器,如果这些车轮碰巧失效,它们可能意味着文明的终结。
车轮现在可以足够小,以至于无法被人类感知,并且具有足够的通用性,可以在任何类型的地形上运送坦克,
足够强大,足以支撑火车以每小时500公里的速度奔波,持续数小时,并且足够聪明,可以将机器人引向其他行星无法预测的地形。
对于发明第一个轮子的家伙的道具,考虑到当时的情况,他们做得很好。 但是,我很高兴当我的出租车到达时,不会在靠近这些轮子的地方使用任何东西。
让我们将其重新绑定到编程中
我希望对隐喻的解构能促使人们想到这种成语在软件方面是多么毫无根据。 有史以来创建的一些使用最广泛且必不可少的软件是对车轮的重新发明 。
Linux是Unix的翻版,MariaDB是MySQL的翻版,MySQL是PostgreSQL / OracleDb的翻版。
现代C ++是C ++的重塑,它是C的重塑(B是BBC的重塑)。 Rust是现代C ++和C的重塑。Clojure是LISP的重塑。 LISP是IPL和Lambda演算的重塑。 Haskell是System FC的革新,而System F是Lambda演算的革新。 DOT是OO的重塑,Kotlin是Java的重塑。
Vim是Vi的重塑。 Wayland是Xorg的重塑。 Systemd是大约500种不同软件的重制。 Ubuntu是Debian的重塑。 Arch是Gentoo的重塑,甚至OS X的核心也是BSD的不幸重塑。
我可以继续努力,尽我所能……
软件的许多进步并不是通过添加到现有的代码库来实现的,而是要在代码库上重申并提出更好的东西。 这就是为什么在GitHub上每个流行的存储库都有数百个fork的原因。 对于任何可以想象的用例,您都有数十种工具可供选择。
根据自己的需要发明自己的车轮,并且,也许知道,最终公众可能会认为这是一个更好的车轮。
尽管计算机科学中的大多数进步恰恰与重新发明轮子有关,而不是创造出全新的东西,但人们常常不愿“重新发明轮子”。
变更是渐进式的,我们会重复重申一个已经存在的概念,并对其进行缓慢的修改并使其变得更好,直到您甚至无法理解从最初的状态到现在的状态。 令人惊讶的是,这样做花了我们很多时间,这对编程来说是件好事,没有资源短缺,无论您的发明多么疯狂,您都可以创建它。
相反,我们应该关注的是,告诉人们如何以及何时重新发明轮子。 我已经允许自己整理一个快速清单。
当没有轮子适合您的购物车时重新设计轮子
也就是说,与其设计一个劣等的软件或产品来应对现有的库,不如创建所需的库或工具,其他人也很可能会需要它。
这种方法可能需要更长的时间,但它可能很有趣并且可以带来更好的产品。
显然,您必须有一定的灵活性并选择自己要打的仗,否则,您最终会成为坚持要求他们必须编写自己的列表和向量的C个“程序员”之一,或者是参与其中的JavaScript“开发者”之一每天有100,000次以上的is_odd库下载。
画线的地方是一个悬而未决的问题,没有一个答案。
一个很好的例子就是Julia ,它是一种编程语言,除了以下三个方面都与Python非常相似:
- 无需虚拟环境即可轻松部署。
- 向量运算要快得多
- 设计时考虑了大规模并行性。
它结合了虚拟环境, Cython ,C / C ++库的正确使用,一些编码准则和一点耐心,可以“理论上”完成工作。
但是茱莉亚(Julia)开箱即用地完成了这些事情,而且只是一种工作。 最终节省了大量时间,并使开发变得更加愉快。 它可能是21世纪最神奇的语言之一。
如果最近没有重新发明过,请重新发明轮子
重新发明轮子的另一个原因是,最近没有人尝试这样做。 这可能意味着当前的车轮非常好,不需要进行重大改进,但这通常意味着有很多人想要更好的车轮,而他们却没有时间或意愿制造。
由于我们当前的技术和思维框架无法找到更好的解决方案,因此常常会以一种不完善的方式“解决”问题,然后将其抛在一边。
纵观几年后的此类问题,人们通常会发现,该技术已达到高速发展,并且可以通过更好的方式解决它们。
图像识别就是一个很好的例子,图像识别被认为是“经典”分类器的工作。 这些分类器进行了大量的改进,到2010年,使用fisher内核之类的东西您取得了不错的结果。
从精确度,可训练的标签数量和训练时间的角度来看,您距离用来检测癌性肿瘤或驾驶汽车的东西还很远,它介于聪明的鹦鹉和大象之间。
直到有人想到让不那么流行的卷积神经网络轮转以使用现代GPU并改进最初在90年代开发的一些图像识别模型。
著名的AlexNet&Co于2012年问世,在短短几年内,它引领了当今令人惊叹的图像识别技术的发展。 如今,在中等规模的数据集上,我们实际上可以胜过人类。
如果车轮是专有的,则重新设计车轮
许多伟大的开源项目就是这种情况,例如Linux,GCC和git,它们只是对已有软件的重新发明。
但是,它们在某些方面更好,并且是开源的,这意味着更多的人使用它们并为它们做出了贡献。 从而使它们成倍地变得惊人,迅速成为各地的上乘选择。
如果您认为这很有趣,请重新发明轮子
重塑完美的车轮也没有错。 您可能会失败,但是您会更好地理解为什么选择当前设计,并且您可能会学到很多。
毕竟,已经解决了许多有趣的问题,但是再次解决它们可能非常令人愉快。 数以百万计的人竭力证明勾股定理或创建“新的LISP”,可以说,大多数人最终只是重新发明了更重的车轮或类似的车轮,但只要他们喜欢它,就没有害处。 。
如果您的方向盘更好一些,那么您刚刚做了一些可以通过做自己喜欢的事情来帮助人类的事情。
结论
出去那里,重新发明轮子。 因为它肯定可以做一些改进。
每当有人告诉您您所做的事情没有用时,请提醒他们您所做的事情是我们领域不断发展的基本过程之一。
每当您认为自己要解决的问题时,好男人已经以更好的方式解决了这个问题。 请记住,一个31岁的书呆子对天体物理学或数学知识不多,只有几千万美元,却以数十美元或数十亿美元的预算羞辱了NASA,CNSA,ESA,Roscomos,美俄军方和许多其他“享有声望”的组织。数以千计的PHD和数十万的工程师为之工作。
通过发明一种更便宜,功能更强大,更安全,更简单,更快速制造的火箭 ,它可以在一颗行星的精确度内降落几厘米。
因此,也许您在开发一个更直观,更漂亮的JavaScript绘图库,一个更快的Python JITC,一个更便宜的ALU生产,一个更好的shopify版本或一个更高效的查找表实现方面大胆尝试,不是吗?毕竟牵强。
如果您喜欢这篇文章,您可能还会喜欢:
From: https://hackernoon.com/please-reinvent-the-wheel-7690ccc454bf