1. 程式人生 > >很多優秀的軟件公司和開發者為什麽願意開源和共享?

很多優秀的軟件公司和開發者為什麽願意開源和共享?

例如 設計 實現 john 留下 jpg 這一 最好的 時間

首先,我給大家拋出兩個問題。在繼續閱讀後面的內容之前,建議大家花幾分鐘的時間認真思考自己對下面這兩個問題的答案:

  • 在當今世界上,你認為最優秀的軟件公司都有哪些?

  • 在當今世界上,你認為最優秀的軟件工程師都有哪些?

對 於上面這兩個問題,你是不是在心裏已經有了自己的答案?如果有的話,你的答案的名單列表裏分別有多少家軟件公司和多少個軟件工程師的名字呢?3 個?5 個?還是 10 個?盡管目前全世界有成千上萬的軟件公司和軟件工程師都在做一些非常出色的軟件開發工作,但當我讓你列舉出最優秀的軟件公司和軟件工程師的時候,我敢肯定 你的腦海裏只能浮現少數幾家軟件公司和幾位軟件工程師的名字。為什麽在如此多優秀的軟件公司和工程師裏,你的腦海裏只會浮現這些軟件公司或工程師的名字, 而不是其他的公司或工程師呢?

這是因為浮現在你腦海裏的這些公司和軟件開發者不僅做的工作非常出色,而且因為他們願意花時間去告訴你他們在 從事著非常出色的工作。我敢肯定,對於你名單上列的每一家公司和工程師,你一定讀過他們寫過的東西(如博客、論文或書籍)、聽過他們的演講(如訪談節目、 會議演講)或是使用過他們的代碼(如開源代碼)。

例如,如果你列的優秀軟件工程師的名單裏有 Linus Tor-valds 的話,很有可能是因為你對操作系統 Linux 或分布式版本控制系統 Git 比較熟悉,而 Linux 和 Git 都是 Tor-valds 開發出來並且供大家免費使用的開源項目。如果你列的名單裏有 Den-nis Ritchie 的話,這很有可能是因為他是 Unix 操作系統和 C 語言之父,而且是開源標準、開源文庫和相關書籍等締造者之一。如果你列的優秀軟件公司的名單裏有 Google 的話,這可能是因為 Google 經常公開發布自己的研究論文,並將 Google Talks 系列放到網上供所有人觀看,它同時還開源了包括 Android、Chrome、Angular 和 Go 在內的眾多項目。包括 Facebook、Twitter 和 LinkedIn 在內的一些其它主要的軟件公司,甚至包括微軟這種之前非常傳統封閉的軟件公司,現在都已經開始定期開源數百萬行的代碼供大家使用。現在有一些公司甚至將自 己的項目完全建立在開源的基礎上,將自己幾乎所有的代碼都共享開源出去,包括 Mozilla 和開源解決方案供應商 Red Hat 等。

說了這麽多,很多人要開始問了:為什麽?為什麽這麽多軟件公司和軟件開發者願意共享自己的工作成果?為什麽他們在一個項目上投入了大量時間和數百萬美元後會選擇將項目開源供大家免費使用,甚至讓競爭對手也免費使用呢?這只是單純的利他主義,因為他們願意幫助其他人嗎?

當 然,利他主義是其中的一個原因,不過這只是能夠解釋這個問題的原因之一。在下面的內容裏,我將深入分析優秀的軟件公司和開發者願意共享和開源自己的大部分 工作成果的其它五個關鍵原因,同時探討那部分不願意共享與開源的人通常會給出的原因,最後,我希望能夠說服你和你的公司在未來都能夠更多地共享和開源自己 的工作成果。

一、優秀的軟件公司和開發者願意共享和開源的五大原因

據統計,大概有三分之二的軟件公司都曾為開 源貢獻過自己的力量。僅僅在 GitHub 平臺上,就有超過 140 萬的開發者在超過 3500 萬個開源項目裏共享過自己的工作成果。這個數字已經讓人非常驚訝了,更重要的是,開源項目的規模正在呈指級增長,所以這個數字將會變得越來越大。

進行開源項目共享、博客分享、演講分享的人並不僅僅是想做慈善。當然了,確實有很多開發者是真心地想回饋開發社區,但這本身並不能解釋為什麽軟件行業的共享開源會如此普遍。很多優秀的軟件公司和工程師之所以願意共享和開源自己的工作成果,主要有以下五個方面的原因。

原因一:共享和開源有助於自己更嫻熟地掌握相關知識

學習一樣東西的最好方式就是去將它教授給其他人。這是因為要想將一種知識教授給其他人,需要你自己對這種知識有更加深刻的理解和認識。每當我準備完一場演講、寫完一篇博客或是為一個開源項目貢獻了新的成果之後,我便會對相關的知識有更加深刻的理解。

對 於一家軟件公司而言,鼓勵你的員工通過寫作、演講或開源項目的方式去分享他們的工作成果是你給他們提供的最廉價但最高效的培訓項目。對於個人而言,花一定 的時間去分享自己的知識是提升自我的最容易、最有效的方式之一。事實上,一位工程師之所以能被大家尊稱為資深工程師就是因為他們能夠幫助身邊的每一個人變 得更加優秀,而讓周圍的人變得更優秀的唯一的方法就是去給大家教授知識。

原因二:共享和開源共享有助於提高自己的項目質量

你 家裏一般在什麽時候是最幹凈整潔的?我猜應該是每次家裏來客人之前你精心打掃之後的家最幹凈整潔的。畢竟家裏來客人時,你想將最幹凈整潔的家展示給客人, 就好比是你將自己的家和客人分享。其實不管你和別人分享什麽,同樣的道理都是適用的。將自己的代碼開源的一個最意想不到的益處之一在於,在準備代碼開源的 時候,你會確保即將開源的代碼是高質量的,因為你知道一旦開源,就會有 “客人” 看,這和家裏來客人之前你都精心打掃一番是一個道理。在開源之前,你會花更多的時間去清理代碼、增加測試項目、編寫所需要的文檔,爭取讓準備開源的項目以 最好的面貌展示在大家面前。如果你準備寫一篇博客或是準備就自己的工作給大家做分享,上面這個道理同樣適用。開源一個項目有助於讓項目的質量變得更高。

除 了上面所說的之外,共享你的工作和項目還能從另一個方面提高你的工作和項目的質量:反饋。你分享的東西獲得的所有評價反饋,不管是正面評價還是負面評價, 都是你進一步學習和提高的一個難得的機會。有時你會發現自己在交流分享一些內容的時候沒有表現得很好,或是你遺漏了所分享主題的一個非常重要的部分、或是 針對一個問題的一個完全不同的視角你沒有考慮到。在開源代碼方面,反饋所發揮的作用就更加強大,因為它本身就是一種獲取同行審查的方式。正是基於這個原 因,開源已經成為開發復雜和關鍵的軟件系統的一個標準,例如安全穩定、操作系統和編程語言的開源。有數據表明,通常情況下,開源的項目要比那些封閉的項目 質量更高。

著名的計算機程序員、開源軟件運動的旗手 Eric S. Ray-mond 曾這樣說過:

“只要經過足夠多雙眼睛的審查,所有的 bug 都將失去藏身之地。這就是 Linus 定律。”

原因三:開源和共享能夠讓你免費利用大家的智慧與勞動

每 當有人使用了你的開源代碼並報告了一個 bug 之後,就等於他們為你免費做了一次 QA。每當有人在你的開源項目裏提交了一個補丁之後,就等於他們在為你免費開發軟件。每當有人寫一篇有關你的開源項目的博客的時候,就等於他們免費為你寫 了一篇文檔。如果他寫的是一篇負面評論的博客,即使這樣,這也等於他為你免費做了一次設計評估。

將你的項目開源就等於允許讓整個開發社區都 在這個項目上貢獻,相比你自己單兵作戰而言,尤其是當你在一家小的創業公司工作的時候,項目開源可能會幫助你將項目變得更大、質量變得更高。即使你在一家 大公司上班,你也會發現有很多優秀的開發者你是無法招聘到的——可能是因為你的招聘經費不夠,可能是因為那些開發者非常滿意自己當前的工作,也可能是因為 他們生活在地球的另一端。但是如果你開發了一個非常優秀的開源項目,那些優秀的開發者可能就會免費幫你在這個項目裏貢獻他們的力量。舉個例子,目前已經有 超過 3000 名開發者為開源的 web 框架 Ruby on Rails 貢獻過自己的代碼,更不用說還有上萬的開發者使用過這個框架、報告過 bug、寫過有關它的博客文章以及寫過插件。如果你的公司想寫一個自己專有的 web 框架,你認為你能夠投入多少人在這個項目上呢?

原因四:開源與共享是推銷自己的最好方式

如 果你是一位軟件開發者,讓自己在一家公司面前看起來非常優秀的最好辦法就是共享你的工作。你不妨將其視為一種讓公司主動找上門的推銷自我的策略。在找工作 的時候,你不用通過盲目地滿世界投遞簡歷的方式讓招聘公司註意到你,你通過共享很多公司認為有價值的內容的方式來吸引那些潛在的招聘公司的註意。如果你通 過共享讓其他公司的工程師曾讀過你寫的博客、看過你演講訪談視頻亦或是使用過你開源的項目,他們便會將你視為專家,也就會更想去招聘你。你共享過的內容將 成為你的簡歷的一個永久的組成部分。事實上,共享對找工作的作用可能超出你的想象,正如 jQuery 的創始人 John Resig 曾說過的那樣:“不管在任何時候,只要涉及到招聘,相比普通的簡歷而言我更看重的是應聘者在 GitHub 上開源共享的東西。”

如 果你是一家正在招人的公司,上面的道理反過來同樣適用。給那些優秀的開發者留下一個好印象的最好的方法就是共享你的工作。如果一位開發者在過去幾年裏一直 在使用你們公司的開源代碼,那麽他們想要加入你的公司並繼續使用你的開源代碼的可能性也就更高。開源項目是吸引優秀的開發者加入公司的最有效的方法之一, 這種方法比傳統的發招聘簡章的方法不知要好多少倍。

原因五:開源和共享能夠讓你獲得對項目的擁有權

作 為一位開發者,如果你已經投入了上千個小時的時間在一個項目上,那麽你就會變得非常依賴這個項目。它就像你的孩子一樣。如果這個項目是公司專有的項目,這 時如果你從這家公司離職,這就好像你經歷了一次離婚一樣,你失去了對這個孩子的監護權,這是非常痛苦的一件事。如果你經歷了多次這樣的事情,這就會讓你很 難再有足夠的激情在一個不真正屬於你自己的項目上投入太多精力。

然而,如果你更多的和大家分享你的工作,發布有關自己工作成果的博客或論 文,最好是開源你的項目,這樣的話這個項目將一輩子都屬於你。這個開源項目將成為你工具箱裏的一個永久的組成部分,不管你去哪裏,你都可以隨身帶著它,你 可以和更多的人分享它,你也會為在這個開源項目上工作感到自豪的。

換句話說,開源項目能讓工作變得更加有趣,更有滿足感。在這個大家甚至會為爭搶優秀的開發者打爛頭的年代,讓工作變得更有趣可以成為你招聘的一個巨大優勢。正如著名的計算機程序員、開源軟件運動的旗手 Eric S. Ray-mond 曾這樣說過:

事實證明,開源帶給我們的寶貴財富之一是它教會了我們這樣一個道理:玩的心態是最經濟也高效的創意工作模式。

技術分享圖片

二、一些人不願意共享和開源的三大最常見的理由

雖然我在上面舉出了很多開源和共享所帶來的益處,我知道依然還有很多人不願意共享和開源,下面我列出了一些人不願意開源共享的三個主要原因。

  • 我太忙了,根本沒時間去共享和開源。

  • 沒人會看我共享的東西的。

  • 擔心有人會剽竊我的工作成果。

下面我們就一條一條來看上面列出的不願意開源共享的三個常見原因:

原因一:我太忙了,根本沒時間去共享和開源

很多人之所以不願意花時間去寫博客、做分享演講或是開源代碼的一個最常見的原因就是:“我太忙了,根本沒時間去共享和開源。” 每當這個想法將要蹦出來的時候,希望你都能記住這一點:忙與不忙其實是你自己的決定。 什麽意思呢?你不是找時間去做很多事情的,你通常是擠時間做很多事情的,就好比你為了在項目截止日期前完成一項工作,你晚上就算是熬到很晚也會擠時間將工 作完成,就好比你不管怎樣也會擠時間去看預約的醫生,就好比你不管怎樣也會擠時間去看《權利的遊戲》,以及很多其它你認為重要的事情。而事實證明,如果你 想擁有一個非常成功的職業生涯,學會共享也是至關重要的。

在職業體育裏,繁重的鍛煉和強化的訓練是必不可少的一部分。同樣的道理,職業音樂 家、舞蹈家和棋手每天都會花很長時間去訓練、去磨練自己的技藝。在大部分公司的工作裏,一旦你大學畢業並完成了在新公司的入職提升培訓項目之後,你就再也 沒有專門的時間去專門進行學習與培訓了。其實你可以完全不用這樣的。就以我為例,每天晚上 11 點,我都會花 20-40 分鐘的時間去創作、學習和分享。根據我當時的心情,我可能會看視頻學習、讀書、寫博客(比如你正在讀的這篇文章)或是投身到一個開源項目裏。我發現,我每 天都會抽一定的時間去學習並分享自己的學習心得的這個習慣已經徹底改變了我的職業生涯。

讓學習和分享變成你每天的時間安排裏必不可少的一部 分。找到適合你的時間段——可能是每天早上工作前,可能是午飯時間,也可能像我一樣在每天晚上睡覺前——每天花 20-40 分鐘的時間去學習和分享。每天 20-40 分鐘,看起來時間並不長,想想一旦長時間堅持下來它可能會帶給你的復利:你現在每天投入的很短的時間在未來產生的集聚效果可能會超出你的想象。

原因二:沒人會看我共享的東西的

即使沒人看你寫的博客或是使用你的開源項目,那也沒關系。寫作、演講和開源項目最重要的作用是,它們可以作為你學習的工具。正如著名作家 William Zinsser 在他的書《On Writ-ing Well》裏所寫的那樣:寫作其實就是一種在筆尖上的思考。寫博客的主要的目的就是為了提升你的思考能力,所以即使你寫的東西沒人看,寫作也是非常值得做的一件事。同樣的道理,準備一場演講,將你的想法分享給大家聽也是可以幫助你理清思路的。此外,正如我之前說過的那樣,你為開源代碼所做的準備是可以提高你的代碼的質量的。

如 果你經常鍛煉你的寫作、演講和編碼的技巧的話,你的粉絲、讀者和觀眾可能會慢慢變多。最開始可能是身邊的朋友和同事,但慢慢的,尤其當你將你的作品在 Twitter、Facebook、LinkedIn、Reddit 和 Hacker News 等平臺上分享的時候,很多原來陌生的人也會看到你分享的東西,並且會主動分享它並提供反饋。此外,在互聯網上,是沒人能看到你的真面目的,你的身份其實就 是你寫的東西、演講內容和開源的項目的集合體。換句話說,在如今的世界上,人們可以將你等同於你分享的東西。

如果你擔心沒人對你所要分享的東西感興趣,你只要記住:每個人其實都在學習的不同階段。正如一位非常知名的程序員 Steve Yegge 在他的一篇文章《你應該寫博客》裏所寫的那樣:

你 會驚訝於太多看起來就像是 “常識” 的知識實際上對很多同樣聰明的人來說都是全新的知識。其實只不過是因為這個世界上有太多東西需要我們去了解,我們都在不斷的學習罷了。有時候我也會被潑冷 水,因為看起來好像我討論的東西早就已經有人和大家討論過了。我需要記住的是總有一個 “恰好的時間” 去學習某些恰好的東西,這個 “恰好的時間” 對每一個人來說是不同的。
無論你處在教育生涯的哪個階段,有些人會喜歡了解你的奮鬥過程。當你在寫博客的時候,你應該把這句話放在心裏。你的讀者 當中每一個人都有一個屬於他們自己的不同的時鐘,他們都是在某方面比你強,但又在某方面比你弱。寫博客的意義在於我們都樂意去分享自己目前的狀態,並且不 會去嘲笑那些在這方面沒我們懂的多的人,因為很有可能他們在其它某個領域的造詣可能是我們自己未來很多年都無法企及的。

原因三:擔心有人會剽竊自己的工作成果

大部分人其實都沒有興趣、時間、精力、知識或技能去剽竊你的工作成果的。正如計算機先驅 Howard H. Aiken 所說的那樣:“不要擔心別人偷取你的想法。如果你的想法足夠好,你還得努力把它塞到別人喉嚨裏呢。” 此外,即使有人想從你寫的東西或是通過使用你的開源項目去剽竊你的想法,這在大多時候其實都是一件好事,因為與你自己單兵作戰相比,他們的反饋和貢獻能夠讓你的工作成果變得更好。

不 過也存在如果有人剽竊你的成果會對你造成危害的情況,那就是當剽竊你的工作成果會讓你的競爭對手超過你的時候。當然,只有當你將自己最核心的技術成果共享 出去才會出現這樣的情況。例如,對於 Google 這家公司而言,它的核心技術成果就是它的搜索架構,即它的搜索算法和大規模分布式系統,這是 Google 的秘密武器。Google 是不會將自己的秘密武器也共享出去的。

但對於很多其它東西來說,將它們開源共享比保密能讓 Google 從中獲益更多,這也是 Google 將自己和搜索不直接相關的超過 900 個項目的 2000 萬多行代碼都共享出去的原因。此外,Google 還發布了一些有關搜索價格的論文(包括 PageRank、MapReduce 和 Gogle File System 等)。畢竟光聽到一個想法是不足以去剽竊的。事實上,如果你的想法足夠簡單,導致其他人僅僅通過閱讀你的博客或聽了一場你的演講就能輕易剽竊並打敗你的話,這只能說明你的想法可能還不夠好。對比一下這兩種說法:“我有一個有關社交網絡的想法” 和 “我已經開發出了一種能將物體運送到太空中的方法”。執行其實才是更加重要的。相比想法,執行力是更難剽竊的。

三、共享的文化

其 實在生活的方方面面,要想成功,光完成出色的工作是不夠的,你還需要確保其他人知道你完成了出色的工作。我發現,要想讓程序員明白這個道理尤其困難,因為 程序員通常比較內向,不善於推銷自己。但好消息是,分享自己的工作成果能夠實現一個良性的循環,它既能提升工作本身,也能提高你的能力。一旦你意識到分享 自己的工作成果其實並不需要你去多花費額外的精力,而是工作本身不可或缺的一部分的時候(就好比寫文檔和測試是寫代碼不可分割的一部分一樣),那麽你在生 活的各個方面取得成功的可能性就會更高,包括找工作、獲得升職加薪、獲取客戶和招聘員工等。

分享的文化是軟件行業和矽谷能夠取得如此大的成功的原因之一。相比華爾街的保密文化,科技行業相對是比較開放的。如果大家都能學會共享,大家便能共贏。在一個流行共享的文化裏,我們便能站在巨人的肩膀上看得更遠。

這也是我經常寫博客、演講和開源代碼的原因所在。在分享我知道的東西的過程中,我也能學習到新的東西,同時也能看得更遠。最後,我也非常希望能聽到你的想法。

本 文作者 Yevgeniy (Jim) Brikman 是《Hello,Startup》這本書的作者,同時也是 Gruntwork 的創始人。之前他曾在 LinkedIn、Cisco 和 TripAdvisor 等公司工作過。

    文章轉載自 開源中國社區 http://www.oschina.net
    本文標題:很多優秀的軟件公司和開發者為什麽願意開源和共享?
    本文地址:https://www.oschina.net/news/73880/company-open-source

很多優秀的軟件公司和開發者為什麽願意開源和共享?