小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

如何開始做一個(gè)開源項(xiàng)目?他的親身經(jīng)歷值得參考

 taotao_2016 2018-02-08


英文:Vincent Voyer,翻譯:Linux愛好者 - nEoYe


【導(dǎo)讀】:作者 Vincent Voyer 用親身經(jīng)歷鼓勵(lì)大家從事開源活動(dòng):他在 Nodejs 源碼里改了兩個(gè)字符,解決了內(nèi)存泄漏,信心大增;沒找到合適的圖片 lazy load 的庫,自己動(dòng)手做,竟被印度電商巨頭的網(wǎng)站用上了,信心倍增。



今年我做了一次演講,內(nèi)容是如何讓我們的開源項(xiàng)目獲得其他人的貢獻(xiàn),比如提問、寫文檔或者更新代碼,從而打造一個(gè)成功的開源項(xiàng)目。在這次演講結(jié)束后,我得到了這樣的反饋:“你展示了如何開發(fā)一個(gè)成功的開源項(xiàng)目,但是我應(yīng)該怎樣開始一個(gè)開源項(xiàng)目呢?”。本文便是來回答這個(gè)問題的。文章闡述了如何開始貢獻(xiàn)開源代碼以及如何創(chuàng)建自己的開源項(xiàng)目。


本文分享的知識(shí)是基于我們的工作經(jīng)驗(yàn):在 Algolia 工作時(shí),我們發(fā)布和維護(hù)了許多成功的開源項(xiàng)目,它們都經(jīng)過了長時(shí)間的檢驗(yàn)。同時(shí),我也花了很多時(shí)間來練習(xí)和創(chuàng)建自己的開源項(xiàng)目。


開始我們的開源項(xiàng)目之旅吧



我職業(yè)生涯的關(guān)鍵時(shí)刻是六年前我在 Fasterize(一家做網(wǎng)站應(yīng)用加速的公司)工作的時(shí)候。在 Node.js 工作進(jìn)程中,我們遇到了一個(gè)很嚴(yán)重的內(nèi)存泄漏問題。除了 Node.js 源碼庫,我們找遍了所有可能引發(fā)這個(gè)問題的地方,結(jié)果一無所獲。我們的臨時(shí)解決辦法是每天重啟這些工作進(jìn)程(這會(huì)使內(nèi)存使用量歸零),但是我們知道這不是一個(gè)優(yōu)雅的解決辦法,所以我想從整體考慮問題。


當(dāng)我的聯(lián)合創(chuàng)始人 Stéphane 建議我檢查一下 Node.js 的源碼時(shí),我?guī)缀跣α顺鰜?。我想:“如果?bug,很可能來自我們自己的代碼,而不是來自于創(chuàng)造革命性服務(wù)器端框架的開發(fā)人員代碼。但是,我還是會(huì)看一下的”。兩天之后,我提交的 2 個(gè)字符的改動(dòng)被合并到了 Node.js 的源碼中,修復(fù)了 http 層的 bug,解決了內(nèi)存泄漏問題。

這次的舉動(dòng)給予了我足夠大的信心。http.js 文件的其他 30 個(gè)代碼貢獻(xiàn)者都是我崇拜的人,比如 isaacs(npm 的創(chuàng)造者)—— 這使我明白了不管是誰寫的代碼,都可能會(huì)有瑕疵。


在使用開源項(xiàng)目的時(shí)候,你是否遇到了 bug?嘗試查閱源碼,不要停留在本地的代碼上。你的答案會(huì)使其他人收益,引導(dǎo)著你去給更多的開源項(xiàng)目做貢獻(xiàn)。閱讀其他人的代碼,也許不能馬上解決你的問題,而且需要花費(fèi)很長時(shí)間才能理解源碼,但是你會(huì)學(xué)到新的模塊,新的語法以及編碼的不同技巧,這些都會(huì)促使你成為一名出色的開發(fā)者。


抓住貢獻(xiàn)開源項(xiàng)目的機(jī)會(huì)


Node.js 源碼倉庫的第一個(gè)貢獻(xiàn)標(biāo)簽


“我沒有好想法”,這是那些想為開源做貢獻(xiàn),但又自認(rèn)為沒有好的點(diǎn)子或項(xiàng)目來分享的開發(fā)者通常會(huì)抱怨的一點(diǎn)。那么,我會(huì)說:沒關(guān)系。為開源做貢獻(xiàn)的機(jī)會(huì)有很多。許多項(xiàng)目已經(jīng)開始通過分類或標(biāo)簽列出那些優(yōu)秀的首次貢獻(xiàn)者。


你可以通過瀏覽這些網(wǎng)站獲得一些開源靈感:Open Source Friday,First Timers OnlyYour First PR, CodeTriage,24 Pull Requests,Up For Grabs, Contributor-ninja 和 First Contributions。


創(chuàng)建一些工具


創(chuàng)建工具是幫助他人的一種很好的方式,而且不用考慮太多復(fù)雜的問題或 API 設(shè)計(jì)。你可以開發(fā)一個(gè)你最喜歡的框架或平臺(tái)的模板。你可以將從許多博客上學(xué)到的知識(shí)和工具集中到一個(gè)項(xiàng)目中進(jìn)行很好的詮釋,并做好隨時(shí)更新和發(fā)布新特性的準(zhǔn)備。create-react-app 是這種開源工具的一個(gè)優(yōu)秀案例.



在 GitHub 上有 5 萬 8 千多個(gè)開源模板倉庫,開發(fā)一個(gè)這樣的項(xiàng)目比較容易而且受歡迎。


今天,你也可以開發(fā) Atom 和 Visual Studio Code 的純 JavaScript 插件,比如我們開發(fā)了 Atom 自動(dòng)補(bǔ)全模塊導(dǎo)入的插件。那些 Atom 或 Sublime Text 中的優(yōu)秀插件是不是還沒有出現(xiàn)在你喜歡的編輯器中?趕快去開發(fā)一個(gè)吧。


最后,你也可以為 webpack 或 babel 開發(fā)插件,用于解決 JavaScript 技術(shù)棧的特殊用例。


好消息是,很多平臺(tái)都會(huì)告訴你如何去創(chuàng)建和發(fā)布插件,所以你不用花費(fèi)太多的時(shí)間去思考怎么下手。


成為新的維護(hù)者


當(dāng)你在 GitHub 上瀏覽項(xiàng)目時(shí),你也許會(huì)發(fā)現(xiàn)和使用那些創(chuàng)建者不再維護(hù)的項(xiàng)目。雖然它們有價(jià)值,但還有很多創(chuàng)建者沒有回答的 issues 和 pull requests 。這時(shí)你會(huì)怎么做?


  • fork 一份并用一個(gè)新名字發(fā)布

  • 成為新的維護(hù)者


我建議你兩者都做。前者有助于推進(jìn)你自己的項(xiàng)目,而后者對(duì)你自己和社區(qū)都有好處。


你會(huì)問,那么如何成為一個(gè)新的維護(hù)者呢?向創(chuàng)建者發(fā)一封郵件或推特,說:“你好,我想繼續(xù)維護(hù)這個(gè)項(xiàng)目,你覺得可以嗎?”這種方式通常效果不錯(cuò)。這是開始你自己的開源項(xiàng)目的好辦法,因?yàn)檫@個(gè)項(xiàng)目已有很多人知曉和受益。


成為新維護(hù)者的推特消息示例


創(chuàng)建你自己的開源項(xiàng)目


創(chuàng)建自己的開源項(xiàng)目最好的方式是尋找那些至今還沒有很好的解決方案的問題。如果你發(fā)現(xiàn)你在網(wǎng)上沒有找到能解決你問題的特定的庫,那么這正是去開發(fā)一個(gè)開源庫的好時(shí)機(jī)。


下面是我職業(yè)生涯中另一個(gè)關(guān)鍵點(diǎn)。在 Fasterize 工作時(shí),我們的網(wǎng)站性能加速器需要一個(gè)快速、輕量級(jí)的圖片延遲加載庫 —— 不是一個(gè) jQuery 插件,而是一個(gè)單獨(dú)的項(xiàng)目,它必須能嵌入所有瀏覽器的所有網(wǎng)站并正常工作。我花了數(shù)個(gè)小時(shí)在網(wǎng)上搜索已經(jīng)存在的優(yōu)秀的開源庫,可是最終沒有找到合適的。所以我說道:“完蛋了。我不能找到一個(gè)完美的開源庫,我們的工作沒法開展了?!?/span>


對(duì)于這種情況,Stéphane 回復(fù)說:“那么,我們自己來創(chuàng)造一個(gè)吧”。嗯..好吧!我將 StackOverflow 上的一段答案復(fù)制粘貼到了我的 JS 文件中,就這樣開始了我自己的開源項(xiàng)目之旅。最終,我創(chuàng)建了一個(gè)圖片延遲加載的庫,它被像 Flipkart.com(每月大約 2 億的訪問量,在印度排名第 9)這樣的網(wǎng)站使用著。有了這次成功經(jīng)歷之后,我便無時(shí)不刻關(guān)注著開源項(xiàng)目。我突然意識(shí)到,開源項(xiàng)目可以成為我程序員職業(yè)生涯的另一部分,而不是僅有傳奇人物和能力超群的程序員才能做開源項(xiàng)目。



一個(gè)沒有好的解決方案的問題:可以嘗試以重用的方式解決它!


時(shí)間點(diǎn)很重要。如果你不打算創(chuàng)造一個(gè)可重用的庫,而是在自己的項(xiàng)目中寫一些只適用于你系統(tǒng)的代碼,那么你便錯(cuò)失了一次機(jī)會(huì)。在某個(gè)時(shí)刻,其他人會(huì)開發(fā)出你之前可能有機(jī)會(huì)做出的項(xiàng)目。所以與其被他人搶先一步,你應(yīng)該盡快從你的項(xiàng)目中抽離和發(fā)布可重用的模塊。


發(fā)布,宣傳和分享


為了確保任何想使用你的模塊的開發(fā)者能確切地找到你的開源項(xiàng)目,你需要做到以下幾點(diǎn):


  • 你的 README 文檔上需要有徽章和虛榮指標(biāo)

  • 開發(fā)一個(gè)有著漂亮的設(shè)計(jì)和在線演示的網(wǎng)站來專門介紹說明你的項(xiàng)目。需要一些靈感么?看一下 Prettier 吧。

  • 在 StackOverflow 和 GitHub 上回答一些相關(guān)的問題,并在答案中寫上你的開源項(xiàng)目

  • 將你的項(xiàng)目發(fā)布到 HackerNewsreddit、ProductHuntHashnode 和任何其他技術(shù)社區(qū)網(wǎng)站

  • 將你的新項(xiàng)目推薦到相關(guān)技術(shù)平臺(tái)的新聞媒體

  • 和別人交流你的項(xiàng)目,或做一次演講


向大家展示你的新項(xiàng)目


不要害怕向網(wǎng)站投稿;只要你真的相信自己的項(xiàng)目是有價(jià)值的,那些網(wǎng)站從來不嫌文章太多。通常,技術(shù)社區(qū)都是十分歡迎大家投稿分享的!


要有耐心,不要怕迭代


在“虛榮指標(biāo)”(stars 數(shù)和下載數(shù)量)方面,有些項(xiàng)目在第一天會(huì)迅速飆升,但是很快會(huì)停止增長。而其他人,在他們準(zhǔn)備好登上 Hacker News 首頁之前,也許需要等上一年。你要相信,你的項(xiàng)目在某一時(shí)刻會(huì)被他人所注意到,如果沒有,那么你也學(xué)到了一件事情:這個(gè)項(xiàng)目可能只對(duì)你有價(jià)值 —— 這為你下一個(gè)項(xiàng)目的成功做了鋪墊。

我有許多 0 個(gè) stars 的項(xiàng)目(比如 mocha-browse),但是我從來不沮喪,因?yàn)槲覜]有很高的期待。在開始做一個(gè)項(xiàng)目時(shí),我總是這么想:我發(fā)現(xiàn)了一個(gè)問題,我用我自認(rèn)為最好的方式解決了它,也許有的人會(huì)使用我的方法,也許沒有。這不是什么大不了的事情。


一個(gè)解決方案,兩個(gè)項(xiàng)目


這是我做開源項(xiàng)目最喜歡的部分之一。2015 年,在 Algolia 工作時(shí),我們嘗試尋找單元測試的解決方案,暫停了為 React UI 庫 InstantSearch.js 編寫 React 組件時(shí)用 JSX 輸出 html 。


由于 JSX 會(huì)被轉(zhuǎn)換成函數(shù)調(diào)用,當(dāng)時(shí)我們的解決方案是寫成這樣expect().toDeepEqual(


為了解決這個(gè)問題,我們創(chuàng)造了 algolia/expect-jsx,它可以在單元測試中輸出對(duì)比 JSX 字符串,而不是輸出無法閱讀的對(duì)象。輸入輸出的測試會(huì)使用相同的語義。我們并沒有就此停止。我們從代碼中又提煉開發(fā)出了另一個(gè)庫,并最終發(fā)布了兩個(gè)開源庫,而不是一個(gè):


  • algolia/react-element-to-jsx-string 將 JSX 的函數(shù)調(diào)用轉(zhuǎn)換成 JSX 字符串的庫

  • algolia/expect-jsx 將斷言庫 mjackson/expect 和上方的 react-element-to-jsx-string 庫結(jié)合了起來

  • 通過發(fā)布兩個(gè)模塊來共同解決一個(gè)問題,社區(qū)的開發(fā)者可以將你的低級(jí)方案在不同的項(xiàng)目中重用。甚至,他們會(huì)以一種你從未想到過的方式來使用你的模塊庫。
    比如,react-element-to-jsx-string 已經(jīng)被使用到了許多其他的
    測試斷言框架中,同時(shí)也被用到了像 storybooks/addon-jsx 這樣的文檔插件中?,F(xiàn)在,一般都使用 Jest and snapshots testing 來測試你的 React 組件的輸出,在這些場景下已經(jīng)用不上 expect-jsx 了。


反饋和貢獻(xiàn)



圖中有許多 issues。其實(shí)這只是為了好看而使用的假數(shù)字??


一旦你開始收到反饋和貢獻(xiàn)代碼,你要以一種開放和樂觀的心態(tài)去面對(duì)它們。你會(huì)得到熱情的反饋,但也會(huì)有負(fù)面的評(píng)論。記住,與用戶的任何互動(dòng)都是可以看作一種對(duì)于項(xiàng)目的貢獻(xiàn),即使有些看起來像是在抱怨。


首先,用文字來表達(dá)意圖和語氣不是那么的容易。“這很奇怪…”也許會(huì)被你解讀成:這很棒/這實(shí)在是很糟糕/我不理解/我很開心/我很沮喪。詢問更多的細(xì)節(jié),嘗試重新解讀這個(gè)問題,來更好地理解問題的根源。


避免抱怨的一些建議:


  • 為了更好地引導(dǎo)用戶提出反饋,可以提供一個(gè)問題反饋模板,讓他們在提問時(shí)可以參考。

  • 盡量對(duì)新貢獻(xiàn)者的嚴(yán)苛程度降到最低。請記住,他們可能還沒有測試,并很樂意向你學(xué)習(xí)。不要由于少個(gè)分號(hào)而對(duì)于新的貢獻(xiàn)者的 Pull Requests 置之不理。讓他們感受到溫暖。你可以禮貌地要求他們把分號(hào)加上。如果,這樣不行,你也可以就這樣將 Pull Request 合并,然后自己完成測試和文檔工作。

  • 提供一個(gè)良好的開發(fā)環(huán)境,包括自動(dòng)化測試、錯(cuò)誤檢查和代碼格式化或自動(dòng)刷新示例。


總結(jié)


感謝閱讀,我希望你們能夠喜歡這篇文章,并幫助你們創(chuàng)建開源項(xiàng)目。貢獻(xiàn)開源代碼是拓展技能的好辦法,并不是每個(gè)開發(fā)者都需要有這種經(jīng)歷,但是這是一個(gè)讓你快速進(jìn)步的好機(jī)會(huì)。


我很期待你的第一個(gè)或下一個(gè)開源項(xiàng)目。記得在推特上 @vvoyer,我會(huì)很樂意給你的項(xiàng)目提出建議。


如果你喜歡開源項(xiàng)目,同時(shí)想在工作中去貢獻(xiàn)開源代碼而不是在你的空閑時(shí)間,Algolia 有相應(yīng)的 JavaScript 開源項(xiàng)目研發(fā)的職位


你可能會(huì)喜歡的其他資源:

(資源無法添加外鏈)


  • opensource.guide,學(xué)習(xí)如何創(chuàng)建和提升你的項(xiàng)目。

  • Octobox,將 GitHub 的通知以郵件的形式發(fā)送給你。一個(gè)很棒的方式讓你避免由于 issues 太多,而忽視了其中重要的問題。

  • Probot,一個(gè)GitHub 的 App,幫助提升你的工作流程,使其更自動(dòng)化,比如關(guān)閉時(shí)間久遠(yuǎn)的 issues。

  • Refined GitHub 為 GitHub 界面在許多層面提供了更好的體驗(yàn)和特性。

  • OctoLinker 給你更好的體驗(yàn)來查看他人的 GitHub 代碼。
    感謝 
    Ivana,TiphaineAdrien,JoshPeter 和 Raymond 對(duì)于這篇文章的幫助、建議和貢獻(xiàn)。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多