你在学习和写代码的过程中一定听过这个说法:不要重复造轮子,使用现成的类库就好。

一般知名的类库都是大公司开发并维护的,正确性与性能都有保证。自己再重新开发一个相同功能的类库,消耗时间、消耗精力、大概率做的还不如别人做的好。

我平时写文章时,也经常会遇到好的专栏与书籍,感觉已经有这么多、这么好的资料,这些就是好的轮子,没必要自己再写一个专栏了。无奈,内心总希望记录点什么,所以隐隐约约挺纠结这事。

一直以来都觉得,不重复创造轮子这个观点没毛病,从我的「不重复造轮子」系列总结就能看出;但作为程序员,依然对创造出属于自己的轮子有着强烈的渴望,那种成就感是无与伦比的美。

在种种纠结中,想明白了这事:有能力,必须创造自己的轮子

为什么这么说呢?

首先,不亲自去造个轮子,就没法进步

不自己去着手试试造个轮子,写个类库,怎么知道为什么自己写不出来?怎么知道与"优秀"相差多远?自己先来一个,哪怕第一版都搞不出来,但往往是硬着头皮做下去,渐渐会发现可以看懂优秀的作品为什么优秀,曾经的遥不可及也不再是无法达到。

不建议你自己去造轮子,就是觉得你能力不够,而恰恰能力就是在一次次尝试和失败中锻炼出来的。停止尝试,也就停止了进步。

其次,如果没有自己的轮子,恐怕将会无路可走

美国禁止华为高端芯片的采购、HashiCorp 不允许中国境内安装和部署名下的开源软件(其中包括 consul-微服务注册发现配置中心)等事件足以说明,没有自己的轮子可能被会被掐死。

我们也可以反过来思考一下,那些看起来优秀的轮子就真的是最合适吗?

举个简单的例子,JDK 中的 ArrayList 经常使用,再熟悉不过了吧?如果业务场景使用 ArrayList 第一次只需要存储 3 个元素,第二次需要存入 10 万个元素,那 ArrayList 默认的扩容机制还合理吗?

有界队列 Disruptor 为什么比 ArrayBlockingQueue 性能高?它为什么不使用数组,而是创建了自己的轮子-RingBuffer。

追求极致性能的数据库连接池 HiKariCP,它为什么没用 ArrayList?而是创建了自己的轮子-FastList。

世上就没有一样的轮子,最合适自己的,一定是出自自己的手笔,除非愿意将就。


【Java面试题与答案】整理推荐

  • 基础与语法
  • 集合
  • 网络编程
  • 并发编程
  • Web
  • 安全
  • 设计模式
  • 框架
  • 算法与数据结构
  • 异常
  • 文件解析与生成
  • Linux
  • MySQL
  • Oracle
  • Redis
  • Dubbo

该不该造自己的轮子?相关推荐

  1. 一些造好的轮子-视频下载工具

    一些造好的轮子 视频下载工具 -- 科技改变生活 几个很好用的工具推荐及一些基本的使用方法: YOU-GET You-Get是一个基于Python3的下载工具.使用You-Get可以很轻松的下载网上的 ...

  2. 使用vue造个小轮子vue-asign,canvas生成电子签名,满足需求

    优化需求,内容是生成电子签名,发现好多个项目都重复写,于是打算自己造个小轮子,名字就叫vue-asign,说明文档如下: vue-asign Canvas 生成电子签名 支持vue2.vue3 演示d ...

  3. swift开源项目精选(已经造好的轮子)

    Swift 开源项目精选 站在个人的角度,并基于<Swift 语言指南>,针对开源项目做了一个甄别.筛选.当然,由于个人能力及涉足范围所限,还远远不够,其中肯定有偏颇及不足,还望同学们多多 ...

  4. 徒手造了个轮子 — 实现epoll

    Epoll是Linux IO多路复用的管理机制.作为现在Linux平台高性能网络IO必要的组件.内核的实现可以参照:fs/eventpoll.c . 为什么需要自己实现epoll呢?现在自己打算做一个 ...

  5. tkinter 利器--------pmw模块,里面有很多造好的轮子,有详细的demo

    2019独角兽企业重金招聘Python工程师标准>>> tkinter 利器--------pmw模块,用pip就能下载最新版本 转载于:https://my.oschina.net ...

  6. 经常造轮子的 AI 工程师水平通常不会太差

    题图 | 邵姺画 引子 | 造轮子还是不造轮子,这是一个问题 理查德·费曼教授去世后,人们在他的黑板上发现了 What I cannot create, I do not understand 这句话 ...

  7. 你们应该听说过”w8ay“这个ID吧!一个喜欢造轮子的小子

    他是w8scan.w9scan.w11scan.airbug的作者.他也是hack-requests的开发者.他在2018 Kcon以学生的身份展示了"自动化扫描工具".他也在Fr ...

  8. 造轮子是什么意思_程序员为什么热衷于造轮子,升职加薪吗?

    作者:小傅哥 博客: https://bugstack.cn- 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 哪个架构师没造过轮子? 你想过这样一件事吗? 是先具备能力在安排职位,还是先安排 ...

  9. 因为造轮子,我一个月就转正了 | 原力计划

    作者 | Baldwin_KeepMind 责编 | 伍杏玲 出品 | CSDN博客 2019年6月,我通过社招入职现在所工作的公司,理论上应该有三个月时间的试用期,只有试用期表现良好我才有机会转正, ...

最新文章

  1. Winform开发框架中工作流模块的业务表单开发
  2. vivado与modelsim的联合仿真(二)
  3. 简单JS实现走马灯效果的文字(无需jQuery)
  4. 数字图像处理:第二十章 视频编码与压缩
  5. go与JAVA差异_20190312_浅谈gojava差异(二)
  6. Mac系统下安装PIL
  7. 每日两SQL(7),欢迎交流~
  8. 前端学习(3124):react-hello-react之对props进行限制
  9. Linux安装samba的过程,Samba安装全过程
  10. 比较三个数大小PHP代码,php 写程序求三个数的最大值
  11. Atamai 手术导航软件开发包
  12. Simulink与Flightgear联合仿真详细教程
  13. Linux NVMe Driver学习笔记之6:Admin Queue与Blk-mq初始化
  14. 向量叉乘的线性性质 几何解释
  15. 杂志订阅系统c语言,杂志订阅管理系统
  16. KTL 一个支持C++14编辑公式的K线技术工具平台 - 第五版,支持sqlite3,全新sqlite3zz语法超简单使用sqlite3; 添加方差等统计函数。
  17. 新型工业路由器,为进入智能工业时代加快步伐
  18. 计算机论文致谢词范文500字,论文致谢词范文500字(精选6篇)
  19. Markdown写接口文档,自动添加TOC
  20. 关于Redis出现“java.io.IOException: 远程主机强迫关闭了一个现有的连接”的一次排查

热门文章

  1. RESTFul:RESTful简介、RESTful的实现、RESTFul案例
  2. RESTFul与RESTFul案例
  3. 【C语言进阶】常见数据格式转换处理的代码实现
  4. pandas之用loc、iloc、ix进行索引以及切片
  5. 织梦(dede)更改默认管理员名称admin技巧
  6. 防范返贫监测预警系统开发设计
  7. 软件工程计算机导论试题及答案,2010级计算机学院计算机导论试题A卷.doc
  8. 关于Windows PowerShell
  9. 北京时间与UTC时间转换
  10. win7 wifi共享设置