你們知道程序員最熟悉,最熟練,最常用的兩個(gè)快捷鍵是哪兩個(gè)嗎驼抹?沒錯(cuò)桑孩,估計(jì)你現(xiàn)在心中所想的就是:ctrl+c 和 ctrl+v ,俗名為:復(fù)制和粘貼框冀。對(duì)于大部分程序員來說:復(fù)制和粘貼就是他敲代碼流椒,寫程序創(chuàng)造偉大產(chǎn)品的左膀和右臂,而復(fù)制和粘貼更是形影不離的好兄弟明也。
所謂宣虾,天下代碼一大抄,亦不過在程序員心中就是復(fù)制和粘貼温数。更何況我們是身處在一個(gè)熱愛開源的世界绣硝,而程序員更是創(chuàng)造和開創(chuàng)開源世界的積極分子呢。目前撑刺,我們身處在共享經(jīng)濟(jì)當(dāng)中鹉胖,可是殊不知我們這是一個(gè)偽共享的時(shí)代。共享單車够傍,共享汽車甫菠,乃至共享充電寶都不是真正的共享,所謂共享就是把閑置和剩余資源利用起來冕屯,進(jìn)行分享寂诱,以達(dá)到資源利用,資源價(jià)值的最大化“财福現(xiàn)在的共享經(jīng)濟(jì)痰洒,都不是把閑置和剩余資源的重復(fù)再利用,而是花錢買好的搞挣,每天带迟,每月正在造成更大的資源浪費(fèi)。
但是囱桨,代碼的開源仓犬,技術(shù)的開源可以說是真正的共享,但是還不屬于經(jīng)濟(jì)舍肠,畢竟開源太多都是免費(fèi)的搀继,所以,我們技術(shù)開源才是真正的共享鼻祖翠语。有點(diǎn)扯遠(yuǎn)了叽躯,我盡量拉回來。之所以談這個(gè)話題是因?yàn)榻占又荽髮W(xué)歐文分校肌括、捷克技術(shù)大學(xué)点骑、微軟研究院和美國(guó)東北大學(xué)的研究人員組成的一個(gè)團(tuán)隊(duì)開展了一項(xiàng)調(diào)查,結(jié)果發(fā)現(xiàn),GitHub 上托管的大多數(shù)源代碼文件實(shí)際上是以前所創(chuàng)建的文件的復(fù)制版黑滴。
八名研究人員組成的這個(gè)國(guó)際團(tuán)隊(duì)起初倒不是想研究 GitHub 的重復(fù)現(xiàn)象憨募。最初的目標(biāo)是試圖定義代碼復(fù)制的 “精細(xì)度”(即不同的復(fù)制版之間多少文件發(fā)生了變化),但后來他們發(fā)現(xiàn)了 “高得驚人的文件重復(fù)率”袁辈,于是他們改變了研究方向菜谣。
研究人員查看了 450 萬個(gè)原創(chuàng)(非分支)的 GitHub 項(xiàng)目,這些項(xiàng)目共有 4.28 億個(gè)不同的文件晚缩。他們發(fā)現(xiàn)尾膊,只有 8500 萬個(gè)文件是獨(dú)特的,在所有分析的文件中約占 17.63%荞彼。
其實(shí) GitHub 的一個(gè)使命就是共享代碼冈敛,所以在 GitHub 平臺(tái)上發(fā)現(xiàn)代碼重復(fù)率高并不是一個(gè)令人吃驚的事情。但是有一點(diǎn)是非常讓你警醒的卿泽,那就是:
用來構(gòu)建 GitHub 的源代碼控制系統(tǒng) Git 鼓勵(lì)項(xiàng)目分支(forking)莺债。然而,GitHub 中出現(xiàn)了大量的代碼重復(fù)現(xiàn)象签夭,這些代碼并沒有經(jīng)歷過 fork 機(jī)制齐邦,而是通過復(fù)制粘貼文件、甚至復(fù)制粘貼整個(gè)庫進(jìn)入的第租。
很多研究人員也表示了疑問措拇,明明可以 fork 或者依賴使用的,現(xiàn)在大部分人都是復(fù)制粘貼文件慎宾、甚至復(fù)制粘貼整個(gè)庫到自己的項(xiàng)目丐吓,再共享出來,真的是讓人有點(diǎn)吃驚趟据。
開源庫的正確用法
由此券犁,我們應(yīng)該得感覺和意識(shí)到一些開源許可證的使用,應(yīng)該正確使用開源庫以及開源代碼才可以汹碱。不知道有多少開發(fā)者意識(shí)到了開源庫的正確使用方法粘衬?我相信現(xiàn)在幾乎每個(gè)程序員開發(fā)的項(xiàng)目中都使用了 GitHub 上的開源庫,但是你們尊重開源和版權(quán)了嗎咳促?一般在應(yīng)用中應(yīng)該聲明一下使用了哪些開源庫稚新,以開源許可證等信息。我發(fā)現(xiàn)支付寶在這方面做的就挺好的跪腹。比如人家就在應(yīng)用中有個(gè)版權(quán)信息模塊褂删,專門聲明使用了哪些開源庫。例如:
看到了嗎冲茸?支付寶這個(gè)應(yīng)用程序用到的開源庫是不是很多屯阀,大家也可以研究一下缅帘,支付寶用的這些開源庫應(yīng)該都是非常不錯(cuò),有保證的难衰,以后說不定你也能夠用到股毫,這就是學(xué)習(xí)。我相信大家都沒有正確使用和聲明開源庫這種做法和行為召衔。
總結(jié)
其實(shí)通過研究其實(shí)我們可以發(fā)現(xiàn):首先,GitHub 本身似乎可以大幅壓縮代碼庫祭陷,不至于現(xiàn)在這么龐大苍凛。其次,如今在使用從 GitHub 唾手可得的一大批開源項(xiàng)目兵志,開展越來越多的研究工作醇蝴。但是我們?cè)谘芯亢褪褂玫臅r(shí)候,應(yīng)該正確使用想罕,而不是亂用悠栓。
你們知道哪種語言在 GitHub 上代碼重復(fù)率最高嗎?JavaScript 項(xiàng)目含有的重復(fù)文件最多按价,研究團(tuán)隊(duì)只查看了用 C++惭适、Java、JavaScript 和 Python 編寫的源代碼項(xiàng)目楼镐。在這四種項(xiàng)目中癞志,JavaScript 項(xiàng)目所含的重復(fù)代碼最多,94% 的文件是與 GitHub 上托管的另一個(gè)文件百分之百相同的克隆版(基于文件哈希)框产。C++ 排名第二凄杯,所有文件中 73% 是其他文件的復(fù)制版,而 Python 的代碼重用率也有 71%秉宿, Java 只有 40%戒突。其實(shí)JavaScript 包含最多的重用代碼示例,原因很容易解釋描睦,那就是 NPM膊存,這是所有客戶端和服務(wù)器端 JavaScript 項(xiàng)目的事實(shí)上的軟件包管理器。
所謂天下代碼一大抄酌摇,但是抄也應(yīng)該正確的抄膝舅,也應(yīng)該正確的用,在規(guī)則和許可下玩才行窑多。不要在沒聲明的情況下仍稀,整體的復(fù)制粘貼到你的代碼庫里,不尊重作者埂息,感覺是你做的似的技潘。