开源项目之坑

开源项目的祖师是 Eric (? TODO详细) 他最先发起了开源项目。 所谓的开源,就是开放源代码(open-source) 的项目。

世界上的开源项目有很多,细分的话分成两类:

  1. 工具类, 例如: 各种框架,组件等等。
  2. 现成的产品。 例如:各种论坛,博客,CMS,商城。

很多人在创立公司时,会考虑到成本问题,优先采用开源的“现成的产品”, 我听到的 最多的话是:

“我们要做个商城功能很普通,我们就用网上开源的XX商城,随便改一下不就完了么?”

一般说出这个话的人,身边肯定没有经验丰富的老鸟。他很可能是随便找一个经验不太丰富 的程序员,来修改。

于是,花上很短的时间(例如2,3天),这个开源的XX商城就搭建起来了。负责人很满意。 于是提出的问题就是:

“很好!我们的这个产品不错!,已经出现了雏形!” “但是,这个背景色要调整,这里的搜索功能不应该是这样的,应该多加几个品类; 这里的用户在查看某个商品的同时,我们也要多给他推荐几个产品” “现有的功能是B2C,只能支持一个商家。这样不行,我们要支持多个商家。” ...

于是,他会发现,修改外观很简单(只涉及到CSS,HTML),但是一旦涉及到修改核心功能, 现有的技术人员就会束手无策了。因为底层架构是不那么好改的:

  • 需要先读懂人家开源项目的代码
  • 理解人家的代码
  • 尝试修改 , 出错, 再修改

一般开源项目的代码,都是由行业中的高手写的。新手会看不懂。比如,很多高级 的语言特性,不常见的设计模式,以及各种抽象,新手看到完全就懵了。

于是,这个公司的技术负责人就会发现一个奇怪的现象:项目直接停滞了。什么时候问道 进度,都是没有进展。

到最后的结果往往是:

  1. 放弃现有的改动了一半的开源项目,推倒重做。
  2. 现有的技术人员离职。

开源项目的特点

  1. 高手写的。 会用到很多高深的技巧。例如,ruby中的元编程,老牌语言(java/c)中的 设计模式。

  2. 有些开源项目经历的时间比较久,例如Sugar CRM.(成立于2006年), 里面用的技术 有老的掉渣的组件,也有特别崭新的组件。负责开发的也不是一个人。你会发现一个奇妙 的现象:一个简单的“展示菜单”的功能,有的地方代码写在了数据库,有的代码写在了.js文件中, 有的代码写在了.php文件中。 特别混乱。

  3. 要修改开源项目,特别花费时间。 因为你需要先读懂别人的代码,还要了解别人用到 的所有的技术和组件。

所以,如果只是为了演示,可以用开源。 如果该项目后期会有很大的想法,那么赶紧自己开发。