被低估的開源編程:忽視開源會影響你的職業生涯……
本文轉載自公眾號“讀芯術”(ID:AI_Discovery)
時至今日,很多人對于開源編程依然存在著誤解和低估,這無疑令人震驚。資深開發人員通常十分尊重和贊賞開源編程,但大多數初學者往往并不知道開源編程潛在的機遇。在網上尋找實習機會從而獲得報酬更具有吸引力,忽視開源的重要性似乎是可以被理解的。
雖然實習確實非常重要,我完全支持去實習,我自己也參加過一些實習,但忽視開源可能會對你的職業生涯造成影響。
自從幾個月前接觸了開源世界后,筆者就一直在研究它。如此簡短的一篇文章,或許無法把我從中學到的東西完全用文字表達出來,但我會盡力而為。首先,筆者會簡單介紹一下開源軟件到底是什么。
什么是開源
開源軟件與大多數人每天使用的軟件并沒有太大差異。事實上,如果你現在上網并嘗試找到所有流行開源軟件的列表,你會感到十分驚訝。例如,Mozilla Firefox、Ubuntu、WordPress、VLC媒體播放器等等。而它們與其他軟件的區別到底是什么?是因為它們符合“開源”的條件,而其他流行的軟件不符合嗎?
很簡單,在于它們有一些預定義的特征,這些特征定義了我們一直討論的術語。
- 免費性:這可能是開源軟件最明顯的特征。開源軟件對所有人都是免費的,無論是開發者、用戶還是所有者。它不會收取任何服務費用,如果它收費了,它便無法自稱開源。
- 透明性:這意味著所有使軟件運行的代碼都可以在互聯網上免費瀏覽。你可以看到它,使用它,用它做你想做的任何事情。最重要的是,你可以參與其中,添加你自己的代碼,然后把代碼插入其中,從而改進軟件。
- 公平性:對許多人來說,這似乎是一個非常普遍的觀點,但實際上這是開源一個非常重要的方面。即將發布的軟件將對所有人開放,不考慮他們的種姓、宗教、領土、性別或任何其他可能區分人與人的因素。軟件開放,人人平等。
- 免費進一步使用性:似乎與第二點的重復了?不同之處在于,這是從程序員的角度出發,任何程序員/開發人員都可以自由地使用開源軟件中編寫的代碼,用于自己的個人用途或項目。任何功能、任何特性都可以按原樣使用,沒有任何法律問題。
這就是開源實際意義的基本概述。了解這一切后,很明顯,最終用戶不會注意到開源軟件和非開源軟件之間的任何區別,除了前者更有可能是免費的。
參與開源的人員以及原因
很多人此刻都會想到這個問題。我們知道了這些軟件是完全免費的,最初做這個項目的開發者似乎并沒有得到任何報酬。那么為什么會有人愿意把寶貴的時間投入到這件事上呢?還有,我在這篇文章開頭提到的機遇有哪些呢?
首先開源“付費”,而且報酬很高。人們通過開源賺錢的方式有很多種,但在我進一步談論金錢之前,我想指出一些其他的益處,這些益處比金錢更為重要:
- 知識、經驗:當然,能夠不斷從工作中獲取新的知識總是有幫助的,但遠不止如此。在我個人看來,對于一個初學者,獲得經驗比較好的方式便是參與開源。人們會尋找實習機會,或者僅僅是簡單的付費項目,而這些項目大部分都在公司名下,他們希望從你身上獲得價值。
以筆者自身為例,雖然我參加過的每一次實習都有非常支持我的經理和學長,但參與其中一個依舊不是一件容易的事情。你會與大量的求職者競爭,競爭對手中很有可能出現有幾個月甚至幾年工作經驗的“老手”。
真正參與一個現實世界的項目變得很困難,而開源為此提供了優秀的平臺。在這個平臺上,無論你投入多少工作,你始終是有價值的。壓力會比實習要小得多,而且學習經驗會好得多。正因為如此,這是獲得更多的經驗并參與更多的真實世界項目的最有效的方法。
- 價值:在這個領域工作最重要的因素之一,你得到的價值將是驚人的。這些價值可以來自公司、個人、這些項目的所有者以及各種編程社區,擁有一個好的開源檔案終歸是一個很大的優勢。
- 專業網絡:對于這件事情我經驗頗豐。在網上做項目時,你會和很多人合作,合作包括大量的交流。交流過程中,我們形成了很多專業的聯系。在我活躍的LinkedIn聯系人中,有來自倫敦和阿姆斯特丹的人,你永遠無法設想什么時候你的專業網絡會給你帶來怎樣的幫助。
- 機會:這一點與第二點密切相關。具體來說,是來自公司的價值。包括谷歌這樣的行業領袖在內,很多公司都非常關注開源,他們最負盛名的項目之一GSoC(Google Summer of Code)就完全基于開源。只有擁有一個好的開源檔案,并且參與的項目也是開源的,這樣才能夠進入公司,而這說明了目前這個領域在行業中的重要性。
GSoC并不是唯一,還有數百個有聲望的實習崗位在招收具有良好開源技能的人。Outreachy、MLH、Linux Foundation只是一些例子,窺一斑而知全豹,這些公司對開源的依賴直接反映了它的價值。
當然,你會得到報酬,認為開源無法帶來收入的想法是完全錯誤的。當你達到一定的水平,你就很有可能會從各種來源(實習,贊助商,公司付費)中獲得大量的收入。許多人都十分努力地建立系統,以確保人們不會因為系統無法提供資金而不愿參與開源。就連我剛才提到的實習,他們付給實習生的工資都非常高,例如,Outreachy 3個月的津貼為6000美元。
我該如何開始呢?
這也曾是我困惑的問題,并且一直懷疑我所遵循的方式,直到我參與了第一個項目。答案就是:你只需要遵循你能想到的最直截了當的方法。然而,我們是否應該在知道如何做之前,了解所需的技能什么?
不需要。直到現在,無論我說什么,都會讓人覺得你需要擅長編程才能參與項目。當然,這是因為軟件是由代碼組成的。但是問題在于,軟件不僅僅是由代碼組成的。一個單一的軟件投放到市場會有許多方面:設計、內容、使用文檔,甚至報告錯誤都是軟件的重要組成部分。這些都需要編碼嗎?不。你只需要做你已經擅長的事情,并積極參與到需要你的項目中。僅此而已。
不過,在這里忽略編程是非常不公平的。一般來說,你并不需要學習一些新的技能。但作為一個程序員,參與開源確實有一些要求。
- Git:Git是處理軟件的常規方式。它并不是一種軟件制作語言,只是一種檢查代碼的助力工具。利用Git的強大功能,人們可以在代碼中創建檢查點或創建分支,這意味著在保持先前版本完好無損的同時處理代碼,以確保在需要時可以恢復原狀。
本質上,Git是軟件的版本控制系統,它并不是針對開發軟件,而是對于在開發軟件過程中與其他人合作來說,是極其重要的。此外,由于在參與開源時協作是最重要的,Git也變得同樣重要。
- Github:Github是所有開源托管發生的網站,它不是唯一的網站,但無疑是行業領袖。這基本上是Git的用戶界面版本,當緊密集成時,它就成為了完全承載協作的資源。因此,它在工作流程中和Git一樣重要。
- 編程語言:參與一個軟件,到最后,所有的東西都只是代碼。因此,顯而易見,了解代碼所用的語言是至關重要的。
要求僅此而已。對于大多數程序員,他們已經知道一些編程語言,所以需要的新技能就是Git和Github。好消息是:學習它們非常容易,一兩天即可掌握天。在YouTube上找一個好的教程,就可以開始了。
整個過程中唯一困難的部分是找到一個可以參與的軟件。作為初學者,你可能需要一些時間來找到一個真正需要掌握的技能集(當然是在編程語言方面),而比較好的辦法就是不斷尋找。你可以手動完成,或者可以在Github上尋找與“good-first-issue”標簽有問題的代碼庫,那一定會帶你步入正途。
接下來呢?只需在系統上復制代碼,進行想要的更改,然后將代碼放回網站。如何做到呢?這就是Git和Github的用武之地。當你學會了它們,做這些步驟就輕而易舉了。恭喜你,你已經參與了第一次開源,現在是一個開源開發者了!
為什么每天有4000萬人在“免費”做2800萬個項目?希望本文幫你找到了答案,也希望你會成為其中一員。