程序員為什么熱衷造輪子

搜索一下“造輪子”或者“程序員為什么喜歡造輪子”罪裹,會(huì)看到很多相關(guān)的討論,這是個(gè)老生常談的話題孝常,很多人談過了,談了很多年蚓哩。不過還是有再談的必要构灸。

造輪子”的含義:

明知道你做的不可能比前輩做得更好,卻仍然堅(jiān)持要做岸梨。

就軟件開發(fā)而言喜颁,“造輪子”是指,“業(yè)界已經(jīng)有公認(rèn)的軟件或者庫(kù)了曹阔,卻還堅(jiān)持要自己做”半开。

在軟件開發(fā)過程中,有時(shí)你想造輪子老板卻極力反對(duì)赃份,有時(shí)你不想造輪子老板卻堅(jiān)持要造一個(gè)出來寂拆,為什么會(huì)有這種兩極狀況?

這篇文章就來討論“造輪子”這件事抓韩,包括下列主題:

  • 程序員為什么會(huì)重復(fù)造輪子
  • 為什么有人不讓“造輪子”
  • 什么時(shí)候可以造輪子

為什么會(huì)重復(fù)造輪子纠永?

每個(gè)造輪子的程序員都有自己“不得不造”的理由。比如:

  • 以為自己的需求獨(dú)一無二谒拴,現(xiàn)有的庫(kù)就是在某個(gè)點(diǎn)上滿足不了
  • 老輪子沒有規(guī)格說明書尝江,或者接口太復(fù)雜,不知道怎么用彪薛,搞明白太難
  • 需要在老輪子上添加新功能茂装,然而老輪子代碼難讀無人可問,不知道何時(shí)能弄明白善延,看不到結(jié)果少态,容易放棄
  • 眼界有限,不知道已有這樣的輪子
  • 版權(quán)原因無法使用第三方庫(kù)易遣,比如Google Android實(shí)現(xiàn)JVM(Google曾因?yàn)橐恍写a而和Oracle打官司)彼妻,比如阿里YunOS自己實(shí)現(xiàn)JVM
  • 就想鍛煉自己,因?yàn)樵燧喿訉?duì)自己的設(shè)計(jì)豆茫、編碼能力有很大好處侨歉,對(duì)理解業(yè)務(wù)也有很大好處
  • 自己造輪子,有“控制感”揩魂,看得見摸的著幽邓,可以一步一步來,一個(gè)一個(gè)小目標(biāo)迭代出大目標(biāo)火脉,不斷成功的小激勵(lì)牵舵,會(huì)帶給自己前行的動(dòng)力
  • 創(chuàng)新成分多(對(duì)自己而言)柒啤,有成就感
  • 不相信老輪子,譬如老輪子可能有后門畸颅、漏洞(想想OpenSSL的心臟出血漏洞)担巩、后期萬一要修改沒把握等,反正是覺得自己造輪子心里更踏實(shí)
  • 不想讓自己產(chǎn)品的關(guān)鍵技術(shù)掌握在別人手里没炒,也不想讓自己的核心用戶數(shù)據(jù)流經(jīng)別人的系統(tǒng)
  • 別人的輪子不開放涛癌,我就是要趕緊造(山寨)一個(gè)出來以便獲得話語權(quán)或商業(yè)利益

為什么有人不讓“造輪子”

遵循慣例

有堅(jiān)持要造輪子的,也有高呼“不要重復(fù)造輪子”的送火。那為什么有人不讓造輪子呢拳话?

  • 項(xiàng)目(產(chǎn)品)時(shí)間緊張,用第三方庫(kù)搭積木快漾脂,能節(jié)約時(shí)間
  • 領(lǐng)導(dǎo)上(或隊(duì)友)認(rèn)為想造輪子的程序員水平就那樣假颇,不可能造出比現(xiàn)有庫(kù)(軟件)更好的輪子,顯然會(huì)漏洞百出推高維護(hù)成本
  • 造輪子是個(gè)看上去很美做起來很操蛋的事兒骨稿。復(fù)雜一點(diǎn)的輪子笨鸡,造出來很費(fèi)勁,道阻且長(zhǎng)坦冠,很可能騎虎難下或半途而廢形耗,導(dǎo)致精力和時(shí)間的浪費(fèi)
  • 待造的輪子不是產(chǎn)品的關(guān)鍵(比如一個(gè)字符串類、一個(gè)XML解析類)辙浑,不屬于核心競(jìng)爭(zhēng)力激涤,不值得花費(fèi)人力,要把精力放在最重要的事情上

結(jié)合為什么要造輪子以及為什么不讓造輪子判呕,就可以理解本文一開始提到的那種反差極大的狀況倦踢。

什么樣的輪子可以重新造?

看現(xiàn)在的軟件發(fā)展趨勢(shì)侠草,越來越多的基礎(chǔ)服務(wù)能夠“開箱即用”辱挥、“拿來用就好”,越來越多的新軟件可以通過組合已有類庫(kù)边涕、服務(wù)以搭積木的方式完成晤碘。這是趨勢(shì),將來不懂開發(fā)語言的人都可以通過利用現(xiàn)有軟件組件快速構(gòu)建出能解決實(shí)際問題的軟件產(chǎn)品功蜓。

在這種趨勢(shì)下园爷,軟件(服務(wù))就慢慢演化為兩極:

  • 滿足終端用戶的應(yīng)用類產(chǎn)品
  • 解決軟件產(chǎn)品通用問題的基礎(chǔ)服務(wù)(組件)

比如你在自己的App中需要即時(shí)通信功能,完全可以使用融云式撼、環(huán)信童社、網(wǎng)易云信等服務(wù)快速集成。

比如你想在自己的App中添加支付功能著隆,完全可以使用Ping++或Pay++來解決諸多支付渠道的集成問題叠洗。

比如你想添加分享功能甘改,ShareSDK、友盟SDK可以節(jié)省你很多時(shí)間灭抑。

比如你想做跨平臺(tái)的游戲,使用Cocos2d-x遠(yuǎn)比自己在Android抵代、iOS上從底層從OpenGL ES干起要高效得多腾节。

比如你想讓你的網(wǎng)站支持更多用戶更多并發(fā),能夠快速部署荤牍、遷移案腺、規(guī)模復(fù)制,那完全可以借助阿里云康吵、AWS劈榨、Azure等而沒必要自己搞。

比如你想推送消息給用戶晦嵌,就可以用騰訊信鴿同辣、極光、個(gè)推惭载、百度云推送旱函、友盟等。

……

類似的場(chǎng)景很多很多描滔。這種趨勢(shì)使得一部分廠商集中精力開發(fā)基礎(chǔ)服務(wù)(組件)棒妨,一部分企業(yè)集中精力解決用戶需求。對(duì)基礎(chǔ)服務(wù)(組件)廠商來講含长,他通過解決更復(fù)雜的基礎(chǔ)問題為其他廠商帶來便利而盈利券腔。對(duì)終端軟件產(chǎn)品企業(yè)來講,他通過解決用戶問題給用戶創(chuàng)造價(jià)值而盈利拘泞,從理論上講纷纫,只要其產(chǎn)品從用戶端或第三方獲取的價(jià)值大于支出給基礎(chǔ)服務(wù)廠商的價(jià)值,生意就可以做下去田弥。

有了這樣的認(rèn)識(shí)涛酗,什么樣時(shí)候可以造輪子什么時(shí)候最好不重復(fù)造輪子就不再是問題了。

對(duì)于提供基礎(chǔ)服務(wù)的軟件廠商偷厦,很多輪子必須造商叹。因?yàn)樗峁┓?wù)給其他軟件廠商,你拿友商的組件換個(gè)包裝提供給其他軟件廠商只泼,沒有競(jìng)爭(zhēng)力剖笙。所以你看到在某個(gè)軟件服務(wù)市場(chǎng)上,會(huì)有多家企業(yè)各自在造輪子请唱,為的就是自己掌握核心科技有自己的競(jìng)爭(zhēng)力弥咪。比如提供云服務(wù)的过蹂,有阿里,七牛聚至,百度……比如提供即時(shí)通信服務(wù)的酷勺,有融云、環(huán)信扳躬、阿里云信……比如提供語音服務(wù)的脆诉,有科大訊飛、百度贷币、OKVoice击胜、Google、微軟……

對(duì)于開發(fā)滿足終端用戶的應(yīng)用類產(chǎn)品的公司役纹,很多輪子就沒必要造偶摔。比如你提供一個(gè)健身類的App,可能需要引入即時(shí)通信功能促脉,用第三就好了辰斋。

從公司的角度講是這個(gè)樣子,那對(duì)程序員來講呢嘲叔?

對(duì)程序員來講亡呵,在一開始的學(xué)習(xí)成長(zhǎng)階段,造輪子則具有特殊的學(xué)習(xí)意義硫戈,學(xué)習(xí)別人怎么造锰什,了解內(nèi)部機(jī)理,自己造造看丁逝,這是非常好的鍛煉汁胆。每次學(xué)習(xí)新技術(shù)都可以用這種方式來練習(xí)。

當(dāng)我們掌握了一門技術(shù)霜幼,可以用于實(shí)際產(chǎn)品開發(fā)中時(shí)嫩码,關(guān)于造輪子,就有了另外的劃分:

一些基礎(chǔ)的工具類庫(kù)罪既,比如String铸题,比如Xml,比如Json琢感,比如Http丢间,比如推送,比如流媒體協(xié)議驹针,重新造的必要性不大烘挫。而與業(yè)務(wù)相關(guān)的,可以嘗試重構(gòu)柬甥、再造饮六,對(duì)理解業(yè)務(wù)有好處其垄,也能更好適應(yīng)新需求。


相關(guān)閱讀:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卤橄,一起剝皮案震驚了整個(gè)濱河市绿满,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窟扑,老刑警劉巖棒口,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辜膝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)漾肮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門厂抖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人克懊,你說我怎么就攤上這事忱辅。” “怎么了谭溉?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵墙懂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我扮念,道長(zhǎng)损搬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任柜与,我火速辦了婚禮巧勤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弄匕。我一直安慰自己颅悉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布迁匠。 她就那樣靜靜地躺著剩瓶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪城丧。 梳的紋絲不亂的頭發(fā)上延曙,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音芙贫,去河邊找鬼搂鲫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛磺平,可吹牛的內(nèi)容都是我干的魂仍。 我是一名探鬼主播拐辽,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼擦酌!你這毒婦竟也來了俱诸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤赊舶,失蹤者是張志新(化名)和其女友劉穎睁搭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笼平,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡园骆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寓调。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锌唾。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖夺英,靈堂內(nèi)的尸體忽然破棺而出晌涕,到底是詐尸還是另有隱情,我是刑警寧澤痛悯,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布余黎,位于F島的核電站,受9級(jí)特大地震影響载萌,放射性物質(zhì)發(fā)生泄漏惧财。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一炒考、第九天 我趴在偏房一處隱蔽的房頂上張望可缚。 院中可真熱鬧,春花似錦斋枢、人聲如沸帘靡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)描姚。三九已至,卻和暖如春戈次,著一層夾襖步出監(jiān)牢的瞬間轩勘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工怯邪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绊寻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像澄步,于是被迫代替她去往敵國(guó)和親冰蘑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容