什麼是開源精神
在技術嘉年華的「夜聊」中,談到開源。當時我的表達不夠清晰具體,重新梳理如下。
一、開源精神裡最重要的,是拿來主義。
這和大部分人的想法不一樣。開源需要貢獻、需要付出,但在貢獻和付出之前,首要的是去了解、去使用已經存在的。
比如前端工程師,會經常使用模板,天天用著,會有不爽,就會想著自己去寫一個模板引擎。直接去寫一個沒什麼不對,但更好的方式是,先去開源社群搜尋下同類產品。看自己的想法,是否已經有人實現了,看自己的想法中,哪些是靠譜的,哪些是不太靠譜的。
注意不要去做「純調研」,除非你已經是這方面的專家,有過體系化的研究和深入。「純調研」是指,找到類似的產品,淺嘗輒止地跑跑 demo,就開始出表格,橫向比較優劣。更笨但更有效地做法是,直接去用,比如我們選擇了 Handlebars ,在專案真正使用過程中,才能深觸地感受到 Handlebars 的優點及其缺點。有過這麼一段深入使用經驗後,類似的前端模板引擎,比如 Mustache、Hogan 等,也有大概清楚個七七八八了。
拿來主義不光能省去開發成本,還能讓你擴充見識和想法,而不會成為井底之蛙還茫然自得。
二、在開源世界裡,參與比主導更重要。
遵循拿來主義,可以讓你更懂得他人。在這過程中,會有欣賞、感謝,也會有抱怨、想法。
前端 DOM 操作類庫中,很多公司包括支付寶都選擇了 jQuery。使用過程中,jQuery 的一些 API 的設計非常贊,一些內部實現也非常漂亮。遇到這些讓人欣賞的點時,別忘了將自己的感想寫下來。那怕是一篇微博,或是跟朋友閒聊時的隻言片語,所有這些,都是參與,都是正能量的傳播。社群的讚譽,可以給 jQuery 開發團隊最大的鼓勵。很多堅持,是因為有肯定。
當然,jQuery 只要存在一天,就一定存在不足。比如 data 的 API 變化,比如動畫不支援純 CSS3 方式,還有 Sizzle 也並非那麼完美。所有這些「缺點」,你遇到的 bug,你踩過的坑,當你有好的想法或解決方案時,不要忘記反饋給社群。jQuery 有詳細的反饋渠道,一般成熟的開源社群都會有。比如託管在 GitHub 上的專案,一般都可以通過 Issues 給社群提交你的想法,甚至可以通過 Pull Request 直接提交你修改過的程式碼。
參與進去,可以讓你更懂得美,懂得感恩之心,懂得回饋之情。這在過程中,你的功力,往往也會大增。不光是技術上的進步,還包括英語讀寫能力。在人性溝通上,你也會收穫很多,這是無價的財富。
拿來主義是開源的第一步,參與則是開源中最漫長的一步。開發自己主導的專案不是必須的,除非你真的有很好的想法,同時剛好有旺盛的精力,否則不要輕易開始,那不代表什麼,往往什麼也不是。比如 Sea.js,如果 RequireJS 當初能接受我的建議,或者 FlyScript 的作者不退隱江湖,那麼就不會有 Sea.js。讓一些事情自然地發生,讓豆瓣從土壤中發芽。更多地去享受參與,保持簡單與自然。
三、開源的是社群,程式碼僅是很小的一部分。
雖然程式碼很重要,但在開源專案裡,原始碼只是重要的因素之一。
除了程式碼,還有文件、測試用例、Issues 管理、版本釋出、升級策略、書籍、視訊等等。jQuery、Backbone、AngularJS 等成熟專案,成熟的是社群,而不是原始碼。好的社群,是在 Google 中一搜尋,就能找到不少資料。好的社群,是你踩過的坑,經常已經有人也踩過並整理分享出來了。
社群的形成很難,需要核心團隊澎湃持久的激情,還需要天時、地利、人和。jQuery 已經形成龐大的社群,但其兄弟 YUI3 的社群,一直不是很成氣候。兩三年前,我想找 YUI3 的總體設計文件,以及部分元件的設計文件,搜尋了很多很多地方,最後給原作者發信,依舊都未能找到我想要的資料。但 jQuery,基本每個細節,都能比較輕鬆地就找到相關資料和討論。
沒有社群的開源專案,其原始碼會一直停留在「孤芳自賞」階段。幾年前的 KISSY,還有百度的 Tangram,個人覺得都停留在初始階段,發展很難。有社群的開源專案,其原始碼會活起來,會自我不斷進化昇華。我參與過的一個典型專案是 Backbone,倘若你現在再回過頭去看 Backbone 最初提交的程式碼,與現在的相比,真心會覺得有點挫了。最讓人不可思議的是,Backbone 最初很挫的程式碼,在社群的參與下,在不斷的討論和 Pull Request 中,現在已經演化成非常高質量的程式碼,甚至每一小段程式碼裡,都能說出一個故事來。我現在依舊非常關注 Backbone 的每一次程式碼變化,特別是自己修改過的部分。從其他人的修改中,能收穫很多很多。
Backbone 的例子,也展示了一個更好的開源方式:有了好的想法,就分享出來,最初的程式碼展現基本的思路就好,然後通過社群的參與,不斷往前演化,讓大家都成為開發者,群體的力量遠大於個體。個人英雄式的開源方式,已經過時了,就像 sourceforge.net 一樣。
最後,知易行難。上面的道理或許大家都懂,真要做到,則是一場修行。Sea.js 和 Arale 也才剛剛上路,旅途中,有西湖愜意的微風,也有沙漠般的烈日當頭。好在,選擇了,就不怕遠。
相關文章
- 什麼是開源?
- 開源是雲端計算的精神
- 開源精神
- “開源”是什麼,能吃嗎?
- 開源堡壘機是什麼?開源堡壘機的優缺點是什麼?
- 開源需要有點精神的人
- 5W1H聊開源之What——開源是什麼?
- 開源是什麼意思?開源軟體優缺點有哪些?
- 轉帖:什麼是linux的精神?----與王垠商榷(轉)Linux
- 開源+SEO=什麼?
- 為什麼GPL是更好的開源許可證?
- 在Linux中,開源的優勢是什麼?Linux
- 國內“開源軟體”許可方式有違開源精神
- 開源+SEO=什麼?薦
- 系列:開源是一種開發模式、商業模式還是其他什麼?(一)模式
- 開源精神就意味著免費嗎?
- FastDFS作者餘慶談真正的開源精神AST
- "開源"是什麼?為啥這麼火?一定免費嗎?
- 跨域資源共享(CORS)是什麼?跨域CORS
- 開源:具有永遠奉獻精神的禮物
- 【開源訪談】厲華:寫一個開源容器引擎會是什麼樣的體驗?
- 什麼是敏捷開發?它有什麼特點敏捷
- 開源一年,openGauss詮釋什麼是快速成長
- 維護一個開源專案25年是什麼體驗?
- 為什麼OilStates案對於開源界是個好訊息
- 為什麼說六西格瑪就是團隊精神?
- 什麼是前端開發?為什麼要學前端開發?前端
- Google 開源主管解釋為什麼開源“殘酷”Go
- 為什麼要貢獻開源
- 什麼情況!華為開源JDK!JDK
- 我能為開源做些什麼?
- 什麼是快速開發框架框架
- 什麼是公鏈開發?
- 什麼是後端開發?後端
- 我是怎麼做開源的
- 什麼是cookie,什麼是sessionCookieSession
- 什麼是DNS,什麼是HostsDNS
- 什麼是模式? 什麼是框架?模式框架