如何優(yōu)雅的抄襲代碼?天下代碼一大抄山林,這才是正確的姿勢(shì)

你們知道程序員最熟悉,最熟練,最常用的兩個(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)信息模塊褂删,專門聲明使用了哪些開源庫。例如:

WechatIMG75副本

看到了嗎冲茸?支付寶這個(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)該正確使用想罕,而不是亂用悠栓。

image

你們知道哪種語言在 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ù)制粘貼到你的代碼庫里,不尊重作者埂息,感覺是你做的似的技潘。

特別聲明:未經(jīng)允許遥巴,禁止任何形式的轉(zhuǎn)載。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末享幽,一起剝皮案震驚了整個(gè)濱河市铲掐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌值桩,老刑警劉巖摆霉,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奔坟,居然都是意外死亡携栋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門咳秉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婉支,“玉大人,你說我怎么就攤上這事澜建∠蛲冢” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵炕舵,是天一觀的道長(zhǎng)何之。 經(jīng)常有香客問我,道長(zhǎng)咽筋,這世上最難降的妖魔是什么帝美? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮晤硕,結(jié)果婚禮上悼潭,老公的妹妹穿的比我還像新娘。我一直安慰自己舞箍,他們只是感情好舰褪,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疏橄,像睡著了一般占拍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捎迫,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天晃酒,我揣著相機(jī)與錄音,去河邊找鬼窄绒。 笑死贝次,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彰导。 我是一名探鬼主播蛔翅,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼敲茄,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了山析?” 一聲冷哼從身側(cè)響起堰燎,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笋轨,沒想到半個(gè)月后秆剪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爵政,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年鸟款,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茂卦。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖组哩,靈堂內(nèi)的尸體忽然破棺而出等龙,到底是詐尸還是另有隱情,我是刑警寧澤伶贰,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布蛛砰,位于F島的核電站,受9級(jí)特大地震影響黍衙,放射性物質(zhì)發(fā)生泄漏泥畅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一琅翻、第九天 我趴在偏房一處隱蔽的房頂上張望位仁。 院中可真熱鬧,春花似錦方椎、人聲如沸聂抢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琳疏。三九已至,卻和暖如春闸拿,著一層夾襖步出監(jiān)牢的瞬間空盼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工新荤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揽趾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓苛骨,卻偏偏與公主長(zhǎng)得像但骨,于是被迫代替她去往敵國(guó)和親励七。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,519評(píng)論 25 707
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議奔缠。它實(shí)...
    香橙柚子閱讀 23,728評(píng)論 8 183
  • 它是TCP/IP協(xié)議族的一個(gè)子協(xié)議掠抬,用于在IP主機(jī)、路由器之間傳遞控制消息校哎×讲ǎ控制消息是指網(wǎng)絡(luò)通不通、主機(jī)是否可達(dá)闷哆、...
    廖馬兒閱讀 930評(píng)論 0 0
  • 商人說:我是一名客商腰奋,需要一匹年輕能干的馬,長(zhǎng)途跋涉來為我運(yùn)送貨物抱怔,不知道你愿意跟我走嗎劣坊? 馬很不情愿的說:我可是...
    鐵臂阿童YAO_閱讀 211評(píng)論 0 10
  • 不知道你看這篇文章會(huì)是在什么時(shí)候,是晨起 午時(shí)還是半夜 都不重要了屈留,反正無論什么時(shí)候局冰,你都無法逃離你那該死的朋友圈...
    左手老師閱讀 297評(píng)論 0 0