写点什么

请继续重复发明轮子

  • 2018-04-18
  • 本文字数:2629 字

    阅读完需:约 9 分钟

“重复发明轮子”这句话原本用于比喻无谓的重复劳动,但这个比喻似乎也不那么恰当,因为在人类的历史长河中,轮子已经被重复发明了无数次。

制作轮子的材料在变化,从石头、木头到金属合金、碳纤维。轮子的组成和比例在变化,从厚实饱满、粗糙到精细镂空、带有数百个轮辐。轮胎和轮轴在变化,所以轮子也得重新设计。轮子滚动的路面和使用轮子的机械装置在变化,所以轮子也跟着变。即使是轮子的形状也难逃改变的命运,甚至出现了方形的轮子。

人们之所以如此不厌其烦地重复发明轮子,是因为轮子的用途一直在变。轮子的作用从最开始的节省劳动力到让飞机安全着陆,再到运载具有超级杀伤力的武器。现如今,轮子既可以小到人类感觉不到它们的存在,也可以大到载着巨型坦克在任意路面上行驶,既可以坚固到载着时速 500 公里的高速列车飞驰,也可以智能到让机器人在外星球上行走探险。

重复发明轮子与编程

如果把“重复发明轮子”这个比喻放到计算机领域,也不见得太恰当,因为有很多广泛流传的软件本身就是被重复发明的“轮子”,不能说它们是无谓的重复劳动。Linux 是对 Unix 的重新发明,MariaDB 是对 MySQL(MySQL 是对 PostgreSQL 和 Oracle 的重新发明,而 PostgreSQL 是对 Oracle 的重新发明)的重新发明,现代 C++ 是对老版 C++ 的重新发明,C++ 是对 C 语言(C 语言是对 B 语言的重新发明,而 B 语言是对 BCPL 的重新发明)的重新发明,Rust 是对 C++ 和 C 语言的重新发明,Clojure 是对 LISP 的重新发明,LISP 是对 IPL 和 Lambda Calculus 的重新发明,Haskell 是对 System FC 的重新发明,System FC 是对 System F 的重新发明,System F 是对 Labmda Calculus 的重新发明,DOT 是对 OO 的重新发明,Kotlin 是对 Java 的重新发明……我可以举无数个这样的例子。Vim 是对 Vi 的重新发明,Wayland 是对 Xorg 的重新发明,Ubuntu 是对 Debian 的重新发明。

很多优秀的软件并不只是简单地往已有代码库中添加新特性而已,而是通过不断迭代,创造出比以往更好的东西。GitHub 上很多流行的代码库都有数百个分支,而对于每一类软件工具,我们又有很多不同的选择。

人们经常说“不要重复发明轮子”,但他们忽略了这样的一个事实:大部分优秀的计算机软件实际上就是被重复发明的轮子,而并非是全新的东西。这些变化是循序渐进的,我们基于已有的概念逐步迭代,慢慢修改它们,让它们变得更好。这是个无穷尽的过程,甚至我们忘记了自己是从哪里出发的,也不知道终点在哪里。我们唯一要付出的是时间,也许这就是计算机编程的神奇之处。在这里,没有所谓的资源短缺,也不管我们如何疯狂,我们总能创造出一些东西。

重复发明轮子不是罪,只是我们要知道在何时以及如何重复发明轮子。

当没有合适的轮子可用时

在找不到可用的工具时,就自己开发一个,而不是基于已有的库开发一个不那么好用的“次品”。或许其他人也有同样的需求,那么就可以把你开发的工具分享给他们。自己开发可能需要更长时间,但会更有趣,而且开发出来的工具可能更好用。当然,具体要怎么做,完全取决于你自己。你可以“勤快”得像某些 C 语言开发者一样,连 list 和 vector 都要自己实现,也可以“懒惰”得像某些 JavaScript 开发者一样,连最简单的判断奇数的函数都要从网上下载(比如日下载量超过十万的“is_odd”包,地址是 https://www.npmjs.com/package/is-odd )。

以 Julia 为例,Julia 是一门与 Python 非常像的编程语言,只是它更容易部署,不需要虚拟环境就可以运行,它运行更快,而且支持大规模的并发。Julia 就是一个被重复发明的轮子,因为从理论上说,它所能做的事情,Cython 也能做到,只要使用恰当的 C/C++ 库,修改一点代码,再加上一点耐心就可以。但 Julia 与生俱来就提供了便利性,为开发人员节省了大量时间,还让开发变得更有趣。或许,它会是 21 世纪最让人瞩目的编程语言之一。

当现有的轮子停滞不前时

当很久没有人重复发明轮子,就可以考虑重新发明一个。出现这种情况,可能是因为现在的轮子已经够好了,没必要做出大的改进,但更有可能是因为大多数人希望有更好的轮子,只是他们没有时间去做。比如,有些问题虽然暂时得到了解决,但并不完美,因为当前的技术或框架无法提供更好的解决方案。这就留有余地,等待更好的时机出现。数年之后,或许技术发展到可以更好地解决这些问题。

以图像识别为例,图像识别属于经典的分类器问题。人们在分类器问题上不断努力改进,直到 2010 年,通过使用 Fisher Kernel 这类算法才让分类器得到了非常精确的结果。当然,这些成果还不足以用于检测癌症肿瘤或汽车自动驾驶,从精确度和训练时间方面来看,它们的水平还只是处在鹦鹉和大象之间。直到有人重新发明了并不太流行的卷积神经网络,还使用了现代的 GPU 来训练那些早在 90 年代就开发出来的图像识别模型。2012 年出现了著名的 AlexNet&Co,而几年之后,图像识别技术发展到令人惊诧的地步,在中型数据集上训练出来的分类器甚至可以打败人类。

当轮子受到所有权限制时

比如 Linux、GCC 和 Git,它们都是对已有版权软件系统的重新发明。在某些方面,它们比版权软件更好,而且它们是开源的。这意味着有更多的人在使用,有更多的人参与开发,这让它们能够以惊人的速度发展演化。

当你觉得这样做很有趣时

对一个已经很完美的软件来一次重新发明,这样做也没什么错。你可能会失败,但你会从中学到很多。尽管别人已经解决了大部分问题,但你仍然能够从解决同样的问题中获得有趣的体验。数百万人想证明勾股定理或重新发明新的 LISP,虽说他们最终不过是在重复发明相似的轮子,但他们所做的并没有什么错,只要他们能够从中获得乐趣。而如果你重新发明的轮子哪怕只是比原先的好那么一点点,都算是在造福人类。

写在后面

尽管放手去做吧,重复发明轮子不是罪。如果有人说重复发明轮子是无用功,那就告诉他们,你所做的其实是领域发展的基石。还记得那位在 31 岁就成为硅谷亿万富豪的马斯克吗,他对天体物理学和数学也只是懂点皮毛,却凭着数千万美金就让多国的航天局“颜面扫地”。要知道,这些航天局动不动就有数千亿的资金预算,还有数不清的博士和工程师为他们工作。马斯克发明了一个更便宜、更强大、更安全、更简便、更快的“轮子”。或许,你也可以开发出一个更直观、更优雅的 JavaScript 库,或者一个更快的 Python 编译器,或者一个更便宜的计算单元,或者一个更好的 Spotify,或者一个更高效的查找表……谁知道呢,一切皆有可能!

英文原文: https://blog.cerebralab.com/#!/blog/11

感谢郭蕾对本文的审校。

2018-04-18 18:233063
用户头像

发布了 731 篇内容, 共 474.3 次阅读, 收获喜欢 2008 次。

关注

评论

发布
暂无评论
发现更多内容

从Oracle到TiDB,全链路数据迁移平台核心能力和杭州银行迁移实践

TiDB 社区干货传送门

分布式数据库系统环境的“无感”升级

TiDB 社区干货传送门

Titan 引擎:通过从 LSM-Tree 中分离大值,实现 6 倍的写入性能的提升

TiDB 社区干货传送门

Elasticsearch 8 RAG 技术分享

阿里云大数据AI技术

人工智能 elasticsearch 数据仓库 数据分析

KubeCon China 2024全球大会在香港举行,京东云受邀参加探讨云原生、开源及 AI

京东科技开发者

京东小程序折叠屏适配探索

京东科技开发者

一起单测引起的项目加载失败惨案

京东科技开发者

TiKV Raft 快照全流程丨TiKV 源码解读(二十二)

TiDB 社区干货传送门

RPA行业发展前景:2023-2026年5大预测

八爪鱼采集器︱RPA机器人

RPA 自动化 RPAxAI

Apache Paimon V0.9最新进展

Apache Flink

大数据 flink 实时计算 湖仓一体 paimon

TON链上的代币开发与小程序开发:模式与要求

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

金融企业区域集中库的设计构想和测试验证

TiDB 社区干货传送门

缩容 TiKV 原理及常见问题

TiDB 社区干货传送门

集群管理 扩/缩容 7.x 实践

Gate.io盘前交易:DOGS热潮下抢先交易的新策略

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

顶尖选择:5个RPA主流产品性能评测

八爪鱼采集器︱RPA机器人

RPA 自动化 RPAxAI

脉讯在线:核心TiDB 从 5.4 升级到 7.1 集群 CDC 性能翻倍

TiDB 社区干货传送门

实践案例 版本升级 性能测评

关于 TiDB 升级后结果不一致问题

TiDB 社区干货传送门

管理与运维 故障排查/诊断 新版本/特性解读 应用适配 6.x 实践

扩容过程中 PD 生成调度的原理及常见问题

TiDB 社区干货传送门

监控 故障排查/诊断 扩/缩容 7.x 实践

TiKV 副本搬迁原理及常见问题

TiDB 社区干货传送门

扩/缩容 7.x 实践

巧用商品详情数据,制定精准营销策略

Noah

敦煌智旅:Serverless 初探,运维提效 60%

阿里巴巴云原生

阿里云 Serverless 云原生

数业智能心大陆AI大模型,共情陪伴你的心理健康

心大陆多智能体

智能体 AI大模型 心理健康 数字心理

唐刘:当 SaaS 爱上 TiDB(一)- 行业挑战与 TiDB 的应对之道

TiDB 社区干货传送门

竞技世界 x TiDB丨注册用户超 5 亿,大规模数据及高并发场景下分布式数据库从 1 到 N 的演进

TiDB 社区干货传送门

基于资源管控+TiCDC实现多业务融合容灾测试

TiDB 社区干货传送门

实践案例 7.x 实践

“AI+Security”系列第2期(五):大模型自身安全

云起无垠

TiDB 扩缩容原理及常见问题

TiDB 社区干货传送门

管理与运维 故障排查/诊断 扩/缩容 TiKV 底层架构 7.x 实践

SHOPLINE x TiDB丨集群成本降低 50%!跨境电商 SHOPLINE 交易、商品管理等核心业务的数据库升级之路

TiDB 社区干货传送门

社区版 2024.8 | CloudQuery社区版取消可创建用户数限制!!

BinTools图尔兹

数据脱敏 数据库管控 数据库安全 CloudQuery

请继续重复发明轮子_语言 & 开发_CerebraLab_InfoQ精选文章