联系我们
      工作时间
  • 周一至周五:09:00-17:30
  • 周六至周日:10:00-16:00
我们为什么要重复造轮子?
2022-11-22 12:12:23 133
  • 收藏
  • 管理

    “不要重复造轮子 Stop Trying to Reinvent the Wheel”, 可能是每个程序员入行被告知的第一条准则。我自己也会对新人灌输这个概念,写程序其实是一个最能“偷懒”的工作。你现在费力实现的每一个功能,可能早已有解决方案贡献在开源社区,如果可以直接用,那节省下来的时间是不是可以用来偷懒呢?

    找轮子存在的问题

    虽然不要重复造轮子的准则被反复提到,但是以我个人的经验,这个准则实践起来其实很有难度,因为:

    1. “不要重复造轮子”意味着首先需要找到一个可用的轮子。而我们一般希望:最好的轮子才可以一劳永逸。这就对个人的信息检索能力有非常高的要求,找到了一个轮子,但这个轮子好不好用,需要时间来论证。能一眼判断一个项目的质量以及易用性,这其实需要大量项目经验的积累。

    2. 好轮子不是你想用就能用的。要想将一个开源项目整合到自己的项目中,需要对这个项目有比较深的了解。开源项目的文档质量参差不齐,当使用轮子时,只看文档往往是不够的,还需要阅读源代码甚至深度定制。更不要说大部分开源项目根本没有中文文档。

    所以现实情况往往是:新人不懂得检索方法,找不到轮子;好不容易找到一个轮子,学了半天不会用;好不容易能运行,很多地方与需求不一致,但是又不会改;一来二去,最后还是变成自己写轮子,同时还得出一个结论:别人的轮子都不好用,还是要坚持自己造轮子。

    找轮子本身其实是一件不容易的事情,而我对上面问题的解决方法是:找轮子的任务不要交给新人,而是要由经验丰富,信息检索能力强的编程人员负责,最好是项目的构架人员。团队成员找到的轮子最好也由构架人员拍板,用还是不用。对于团队新人,最重要的任务还是编程基本功、文档阅读能力以及如何用好已经拍板的轮子。

    怎样才算是好轮子

    个人认为好轮子应该具备以下的特征:

    1. 开源,并且License友好。有文档,代码规范,接口友好,最好有实际用例。

    2. 社区相对活跃。

    3. 松耦合,定制容易。

    至于同时找到好几个轮子需要选择时,可能要根据项目的实际情况进行取舍:有些轮子侧重于大而全,希望解决大部分问题,但是细节上处理不够细致;有些轮子小而精,专注解决一个问题,但是不具备好的通用性。但只要合适好用,都是一个好轮子。

    如何找到好轮子

    如何找到好轮子其实在上面问题中已经很清楚了,你应当具备:

    1.信息检索能力

    2.外文资料阅读能力

    3.代码阅读能力以及平时的积累

    对于第一条,个人的信息检索能力是无法一蹴而就的,不过如果是还在等待我对此说出一二三而不是去自己检索寻找方法的朋友,基本上已经没救了。这里唯一需要说的是,如果想用百度那货去找技术资料的还是省省吧。

    外文资料阅读能力也非一日之功,不过个人倒是有个小窍门,如果想要获得一些项目的HelloWorld入门教程或者服务器的配置,可以将检索语言限定为日语,因为日文用户的教程往往秉承了日本细致入微的精神,包括项目背景、需要的环境安装等等一些对初学者才有用的知识,在日文的技术资料中往往也会写的很清楚。

    至于平时的积累,可能程序员都知道Github、SourceForge、Google Code这些优秀的项目托管网站,但是积累的意思并不是说有时间上去看两眼或者随便收藏一下这么简单。比如我自己侧重PHP方面的项目,我的一个做法是找到Github下所有Follower大于300的PHP项目(其实一共不到200个其中很多还是php框架),然后一个一个像扫货一样,对其进行了解以及记录。

    我的另一个做法是查看知名PHP框架,看看他们用了哪些轮子,比如在Symfony Reference中,你就能淘到Assetic、monolog 这样的好货。

    最后一个办法是在Github上Follow一些活跃的作者,比如我的Following中就会显示我的Stars和Forks,里面自然也是我认为值得收藏关注的项目。


    上一页:MYSQL千万级数据量的优化方法积累 下一页:如何为网站启用HTTPS加密传输协议
    全部评论(0)