• 为什么要鼓励重复造轮子


    作者:丁仪

    来源:https://chengxuzhixin.com/blog/post/wei_shi_me_yao_gu_li_zhong_fu_zao_lun_zi.html

    “不要重复造轮子”恐怕是仅次于“php是最好的语言”之后最流行的话了。各种论坛,各种文章,都在说不要重复造轮子,那我们到底造不造呢?回想这几年的工作经历,个人或团队重复造的轮子也有几个,整体上还是比较认可这种工作方式的。在适当的时机造轮子有时候也是最佳选择。

    不重复造轮子的理由,主要就是通过复用减少工作量,而且开源社区的很多项目质量也比较可靠。比如 Spring 框架,在很多大公司的重要项目中都有使用,事实也证明了可靠性,恐怕没有几个团队会自己实现一套 IOC 框架并用于生产环境。开源项目集聚了很多优秀程序员的心血和付出,经过大规模的使用和小心谨慎的问题修复,无论是架构设计还是项目质量,大部分还是有保证的。自己造轮子所面对的工作量、缺陷数、安全性是比较大的阻碍,投入产出比不高。

    但是,我们也发现,有很多人长期处在仅仅使用开源框架的层面,没有进一步深入。虽然工作了挺长时间,但是技术深度还浮于表面。其实道理很简单,只有真正理解框架的原理,才能更好地使用框架。对于能够复用的东西,优先考虑复用,少造轮子。但是造轮子也不一定是坏事,站在前人的肩膀上,也可以有更多突破。

    造轮子,能够极大提升技术水平。比如曾经做爬虫模拟用户登录的时候,最初仅是依靠 httpclient 访问 URL,然后写了很多业务代码做数据分析。但是过了 3 个月,发现有大量重复的代码,而且整个系统有一种确定的模式,于是造了一个爬虫模拟用户登录的框架,极大提升了开发效率,技术水平有了一次飞跃。

    造轮子,能提升个人影响力。比如曾经火了一把的 flv.js,作为 B 站在用的网页播放器让作者谦谦火了一把,让大家开始关注这个年轻的 95 后,并开始为其抱不平。谦谦是高中学历,在程序员群体中属于不太突出的,工资也只有 5000 左右。如果没有 flv.js 开源项目,可能一辈子也得不到大家的关注。现在工作能力得到了认可,想必会有不错的发展吧。

    造轮子,解决不能满足的需求。Spring 框架解决了 IOC 和 MVC 问题,Mybatis 解决了数据存储问题,dubbo 解决了分布式调用问题,然而业务实现还需要具体问题具体分析,case by case 进行设计。一个表单的数据采集,就有数不清的业务场景,针对性地设计了几个产品来满足不同的业务诉求。开源轮子也无法完全满足所有场景,所以有 RocketMQ、Tair、diamond 等内部实现。

    造轮子,能推动公司技术进步和沉淀。这可能是所有互联网公司的“通病”,对技术创新比较看重,晋升、加薪都有倾斜,同时对一般的日常维护比较淡漠。所以同一家公司往往有多个框架或产品,在解决同一类问题,同时在各自重点突破的领域内也建立了一定的技术壁垒。不过最终往往会走向统一,由其中较为突出的一个逐渐取代其他框架或产品,从而完成了公司的技术突破。

    要不要造轮子呢?可能还得具体问题具体分析,综合考量。无论是个人还是组织,最好是鼓励高水平创新,防止低水平重复。重复造轮子不可怕,没有思考和创新,仅仅是 copy 了一份,一定是没有价值的重复工作。在充分调研和思考后,出于谨慎的权衡考量,造出一个有特点、有突破的新轮子也是大功一件。

    微.信.搜.一.搜.程序之心,每周一三五原创更新。

    推荐阅读:

    mysql 重要日志文件总结

    程序员是青春饭吗?30岁后的发展方向和突破

    被黑客攻击了,登录流程要怎么做才安全

  • 相关阅读:
    egret 示例实战六:利用Timer定时器,实现钟表秒针行走效果
    egret 示例实战六:延迟操作,实现打字效果
    egret:什么是脏矩形
    egret 示例实战五:随机画圆
    egret 示例实战四:圆弧遮罩
    egret 示例实战三:点击不同对象提升至最上层
    egret 示例实战二:实现爱心缩放和旋转动画
    egret 示例实战一:轻触屏幕调整显示对象位置
    egret:tabBar怎么取消默认选中呢?
    egret:ViewStack 中的scroller滚动条的隐藏
  • 原文地址:https://www.cnblogs.com/chengxuzhixin/p/14034023.html
Copyright © 2020-2023  润新知