之前有個小朋友,特別有好奇心,也喜歡動手搗騰。有一天,他作出來了一個圓圓的,會滾動的東西,感到特別興奮,處處去向別人展現本身的"新發明"。結果他發現別人一點都不稀奇,原來這個東西叫作「輪子」,早在幾千年前就有了,如今已經發展出了上百種的不一樣規格、材質、樣式,本身的這個相比之下太不完善了,根本不能算是什麼發明。這個小朋友,如今就藏在咱們的內心,尤爲是經驗不夠豐富的程序員身上。 程序員
幾年前我曾經作過一個項目,通過長時間的掙扎以後,項目依然失敗了。主要的緣由之一,就是咱們重複發明了太多的輪子。事情是這樣的,時任項目核心開發人員的 同事頗有鑽研精神,也至關自信,當時客戶提出的一些基本功能,譬如用戶管理、輸入驗證、內容管理等,雖然市面上隨處可見現成的模塊和控件,可他老是以爲那 些作得不夠好,說不如本身從新作一個方便,並且從新作更能符合客戶的特殊需求。我當時做爲PM,雖然對此略有質疑,但看他自信滿滿頗有激情,而項目時間也很寬鬆,就贊成了。後來僅僅輸入驗證這個功能就推翻重來了三次,最終仍是選用了一個現成的控件直接用,由於他作出來的太不具有通用性,十分難以維護;同時,用戶管理模塊也作得千瘡百孔,極不穩定,出現了不少Bug和 考慮不周全的地方,最後也不得不去找現有的成熟的組件替換。結果,這些「重複發明輪子」的開發工做,不但耗費了大量的時間、金錢和精力,並且也沒能發揮預 期的效用。事實證實,現成的控件「輪子」(開源的或收費的),經歷過期間的檢測和衆人的改進,總比本身從新搗騰出來的要更成熟、更穩定,同時也更加省事、 好用。咱們在這個項目中花費了這麼多時間、金錢、心血,終於證實了「不要重複發明輪子」這句話是頗有道理的,這個慘痛的教訓讓我迄今記憶猶新。spa
雖然此事已經時過境遷,但近些年來我發現有不少人都在「重複發明輪子」,尤爲是在咱們軟件開發這個圈子裏面,年輕的小夥伴們充滿了發明輪子的慾望和激情,就 好像那個可愛的小朋友同樣。由於他們以爲這樣作會讓本身學到不少東西,若是作出來了也會頗有成就感。確實,成長和成就的確是他們所須要的東西。可若是你是 客戶,你會願意爲此承擔更高的費用和風險麼?若是你是項目經理呢,在成員練手跟項目成功交付之間,哪一個更重要?blog
我以爲若是出於練兵的目的,從新搗騰一個輪子出來固然是個好方法,就好像比賽開始前反覆練習投籃同樣正常。可若是你已經上戰場了,已經開始比賽了,已經去幫客戶作項目了,這時候纔來練習是很是不合適的。由於你極可能會所以而輸掉比賽、丟掉客戶,並且由於你極其不專業的表現,會影響你的職業生涯。因此在公司裏面,應 該明確區分何時是練兵,何時是上陣,必定要杜絕上陣後才練兵的不專業表現。換句話說,工做中不要重複發明輪子,要練習投籃下場後本身慢慢練去,不 要輕易浪費在賽場上的出手機會,justbeprofessional.圖片