之前有个小朋友,特别有好奇心,也喜欢动手捣腾。有一天,他作出来了一个圆圆的,会滚动的东西,感到特别兴奋,处处去向别人展现本身的"新发明"。结果他发现别人一点都不稀奇,原来这个东西叫作“轮子”,早在几千年前就有了,如今已经发展出了上百种的不一样规格、材质、样式,本身的这个相比之下太不完善了,根本不能算是什么发明。这个小朋友,如今就藏在咱们的内心,尤为是经验不够丰富的程序员身上。程序员
几年前我曾经作过一个项目,通过长时间的挣扎以后,项目依然失败了。主要的缘由之一,就是咱们重复发明了太多的轮子。事情是这样的,时任项目核心开发人员的 同事颇有钻研精神,也至关自信,当时客户提出的一些基本功能,譬如用户管理、输入验证、内容管理等,虽然市面上随处可见现成的模块和控件,可他老是以为那 些作得不够好,说不如本身从新作一个方便,并且从新作更能符合客户的特殊需求。我当时做为PM,虽然对此略有质疑,但看他自信满满颇有激情,而项目时间也很宽松,就赞成了。后来仅仅输入验证这个功能就推翻重来了三次,最终仍是选用了一个现成的控件直接用,由于他作出来的太不具有通用性,十分难以维护;同时,用户管理模块也作得千疮百孔,极不稳定,出现了不少Bug和 考虑不周全的地方,最后也不得不去找现有的成熟的组件替换。结果,这些“重复发明轮子”的开发工做,不但耗费了大量的时间、金钱和精力,并且也没能发挥预 期的效用。事实证实,现成的控件“轮子”(开源的或收费的),经历过期间的检测和众人的改进,总比本身从新捣腾出来的要更成熟、更稳定,同时也更加省事、 好用。咱们在这个项目中花费了这么多时间、金钱、心血,终于证实了“不要重复发明轮子”这句话是颇有道理的,这个惨痛的教训让我迄今记忆犹新。blog
虽 然此事已经时过境迁,但近些年来我发现有不少人都在“重复发明轮子”,尤为是在咱们软件开发这个圈子里面,年轻的小伙伴们充满了发明轮子的欲望和激情,就 好像那个可爱的小朋友同样。由于他们以为这样作会让本身学到不少东西,若是作出来了也会颇有成就感。确实,成长和成就的确是他们所须要的东西。可若是你是 客户,你会愿意为此承担更高的费用和风险么?若是你是项目经理呢,在成员练手跟项目成功交付之间,哪一个更重要?图片
我以为如 果出于练兵的目的,从新捣腾一个轮子出来固然是个好方法,就好像比赛开始前反复练习投篮同样正常。可若是你已经上战场了,已经开始比赛了,已经去帮客户作 项目了,这时候才来练习是很是不合适的。由于你极可能会所以而输掉比赛、丢掉客户,并且由于你极其不专业的表现,会影响你的职业生涯。因此在公司里面,应 该明确区分何时是练兵,何时是上阵,必定要杜绝上阵后才练兵的不专业表现。换句话说,工做中不要重复发明轮子,要练习投篮下场后本身慢慢练去,不 要轻易浪费在赛场上的出手机会,just 开发