如何成為一名開源程序員
首先,你得明白開源指的是開放軟體源代碼的意思。這個很好理解,但是「開源」這個詞最近一段時間經常出現在我們身邊,所以估計有時候大家都忘記了開源只是用來形容一種文化現象,而不是一家世界 500 強公司的名字。跟其它公司或組織不同的是,你不用去參加面試或填個申請表、註冊表的方式來成為一名開源程序員。你需要做的就是編程,然後把代碼共享出來,並且完全保證在任何情況下該代碼都保持開放狀態。
只需要這樣,你就已經成為一名開源程序員了!
現在你有了目標,那麼你為之奮鬥的基礎能力怎麼樣了?
技能樹
你玩過 RPG 遊戲嗎?在那些遊戲中就有關於線性「技能樹」的概念。當你玩遊戲時,你掌握了基本技能後,便會「升級」,並且獲得新的技能,然後你使用這些新的技能再次「升級」到一個更高的等級,你又會得到更多新的技能。通過這樣不斷的升級,獲取新技能,以讓你的遊戲角色變得更強大。
成為一個程序員有點像提升你的技能樹等級。你掌握了一些基礎的技術,在參與開源項目開發的過程中,你不斷實踐,直至自己的技術等級上升到一個新的層次,之後你又懂了一些新的技術,並在項目開發過程中不斷實踐,不斷提升技術等級,然後你再沿著這個技能樹不斷成長,不斷進步。
你會發現自己面臨的不只一棵技能樹。開源軟體涉及到的技術比較多,包括很多參與者自身的優勢、能力及興趣愛好等。然而,有一些非常重要的技能有助於你成為一名偉大的程序員,不斷的提高這些技能是成功參與到開源項目中的重要組成部分。
腳本編程
對於像 Linux 或 BSD 系統這樣的 POSIX 系統而言,最大的優勢之一就是在你每次使用電腦的過程中,你都有機會練習編程。如果你不知道如何開始編程,你可以從解決工作中的一些基本問題做起。想想你日常工作中有哪些重複性的工作,你可以通過編寫腳本的方式來讓它們自動執行。這一步非常簡單,比如說批量轉換文件格式或重置圖片的大小、檢查郵件,甚至是通過單擊運行你最常用的五個應用程序。無論是什麼任務,你可以花一些時間去編寫腳本以讓它們自動完成。
如果有些工作需要在控制終端下操作,那麼你就可以編寫腳本來完成。學習 bash 或 tsch 編程,把編寫系統腳本作為你寫代碼和理解系統的工作原理的第一步。
系統管理
從這一點來講,你也可以轉變成一個程序員,也可以整個跳到另外一個不同的技能樹上:那就是系統管理工作。跟程序員比起來,這兩個職業在技能上有一些相似(一個優秀的系統管理員應該有一些編程經驗,並能夠熟練使用 Python、Perl,或者其它類似的編程言語來解決一些獨特的問題),而程序員指的是那些一直編寫代碼的人。
程序員
開源是學習編程技巧最好的方式:你可以查看其他人寫的代碼,從中借鑒他們的想法和技術,從他們的錯誤中學習,並跟自己寫的代碼進行對比以發現兩者的優缺點;如果你是使用 Linux 或 BSD 操作系統,整個環境對你來說都是開放的,目之所及,隨心所欲。
這就像旅遊指南里所說的,隨意行去。事實上你不大會去深入到一個項目的源代碼中,但是如果這樣的話,可以讓你在某一時刻突然意識到自己會編程了。編程是一份很難的技術活,否則大家都可以從事編程工作了。
幸運的是,編程是有邏輯而結構化的,這些特性跟編程語言相關。你也許不會深入的去研究編程,但是你研究得越深,你懂的越多。
懂得如何控制以及讓電腦自動執行任務是一回事,但是知道如何編寫其它人想自動實現任務的代碼,才能說明你已經真正進入到編程領域了。
精通多種編程語言
所有的編程語言都旨在處理相同的任務:讓計算機能夠完成計算工作。選擇一種編程語言時你得考慮以下幾個因素,學編程的目的是什麼,你所做的工作最常用的編程語言是什麼,你最容易理解哪一種編程語言以及你的學習方式。
隨便查下相關資料,你就可以了解編程語言的複雜性了,然後再根據自己的能力水平來決定先學習哪種編程語言。
選擇編程語言的另一個方式是根據你的使用目的來決定,看看你身邊的同事使用哪種編程語言。如果你是為了開發桌面環境的工具,你應該學習 C 語言和 Vala 語言,或者 C++ 語言。
總之,不要在各種編程語言之間不知所措。編程語言之間都是相通的。當你學好一種編程語言並能用它來解決工作中的一些實際問題的時候,你會發現學習另外一種編程語言更容易。畢竟,編程語言只是一些語法和相關規則的集合;學會一種編程語言後,再使用同樣的方法去搞懂另外一種語言完全不是個事。
主要目的還是學會一種編程語言。選擇一個比較適合自己或者你感興趣的編程語言,或者是你的朋友在用的編程語言,或者是選擇文檔比較豐富,並且你理解起來也容易的編程語言,但是,最好是只關注並先學會其中的一種編程語言。
這是一個開源項目嗎?
無論你是編程新手還是一個老司機,在你進入到開源新世界之前,你需要搞明白做開源軟體的重要一點就是「開放源代碼」。
最近一些廠商慣用的市場營銷策略就是宣稱他們的軟體是開源的。然而,有些廠商只是發布了一個公共的 API 或者表示他們願意接受其它開源用戶提交的代碼而已。「開源」這個詞不是一個商標,並且也沒有任何組織來決定怎麼使用這個詞。但是, Debian Linux 創造人 Ian Murdock 聯合成立的 開放源代碼促進會 對開源這個詞進行了定義(授權「允許軟體被用戶自由地使用、隨意修改及分享」),並且被正式批准和授予許可證的軟體才屬於真正的開源軟體。
給你的軟體代碼應用一個開源許可證,你就成為一名開源程序員了。恭喜你!
開源社區
諮詢任何開源軟體愛好者,他們會告訴你開源軟體最關鍵的是人。沒有積極的開源貢獻者,軟體開發就會中止。計算機需要用戶、提交缺陷的人、設計師及程序員。
如果你想加入全球開源社區為開源軟體做貢獻,你同樣需要成為該社區的一個成員,即使你並不善於社交也不要緊。這通常包括訂閱郵件列表、加入 IRC 頻道,或者在論壇里表現活躍,從最低級別開始。任何成熟的開源社區都已經存在了足夠長的時間,見慣了來來往往的人們,所以,在你真正融入這個世界、在他們接納你之前,你需要證明出你並非流星一逝般的過客,如果你想要做成一件大事,那就得有長期投身於其中的打算。
如果你只是想給他們提供一些小的幫助,這也是可以接受的。我自己也提交一些小的補丁到一些項目中,有時候項目管理者會覺得這個更新比較好,有時候他們也會拒絕我提交的代碼補丁。但是,如果這個被拒絕的補丁對我很重要,我就會為我自己和客戶維護它,並一直維護下去。
這就是參與到開源項目。
但是這些社區在哪裡呢?這個跟開源項目有關。有些項目有專職的社區管理員,他們會把所有的社區參與者招集到一個打大家都能訪問的地方。有些項目則圍繞論壇運行,他們使用郵件列表,或者使用問題追蹤器與參與者聯繫。找到這些開源社區對你來說也不是個事兒。
還有個重要的事情就是研究他們的源代碼。「開源」就是開放「源代碼」,所以你可以把他們的代碼拿來瞅瞅。儘管要全面了解他們的項目可能超乎你的能力,但是你可以知道這個項目是如何管理的,他們最可能需要幫助的是什麼。關於代碼是如何組織的?這些代碼有注釋嗎?它們使用統一的程序風格嗎?這些問題你可以查閱相關文檔,尤其是 README、 LICENSE ,或者是 COPYING 這幾個文件。
不要低估遵守開放源代碼承諾的重要性。這是你被允許參與進來到開源項目來的原因,因此,你得深入地考慮下你能從中學習到什麼,以及你將如何為該項目提供幫助。
找到最佳的開源社區更像是約妹子,尤其是更像在《偷天情緣》里的約會。這需要時間,並且剛開始那幾次有可能會失敗。你參與這樣的聚會越多,你就越了解這些開源項目。最後,你會更了解自己,當你找到了與其它參與者融為一體的方式時,你就已經成功了。總之,你得要有耐心,一切順其自然。
行動比語言更重要
作為一名開源程序員最重要的是寫代碼(開源中的「源」),任何想法都沒多少意義。關鍵是把你的想法變成實際的東西。你要讓大家都知道你在做什麼、知道你不怕苦不怕累,也願意在開源項目上花時間,並且能夠通過編程的方式來實現自己的各種想法。
為了更高效地完成那些工作,你需要對開源項目做做功課,包括項目怎麼樣才能聽取你的建議、哪個分支是穩定的哪個是開發的等等。
從下面幾點開始:
- 熟悉一個項目及其協作開發的氛圍,並且接受這種氛圍。
- 編寫軟體升級包、缺陷修復包,或者一些小的功能需求,並且提交它們。
- 如果你提交的補丁被拒絕了,也不要難過。他們拒絕的不是你個人,而是開發小組在針對你提交的代碼進行評估後作出的一個反饋。
- 如果你提交的代碼被改得面目全非後才被接受也不要泄氣。
- 從頭再來,不斷努力,再接受更大的挑戰。
在開源項目中不應該開設排行榜。然而,有些開源社區卻弄了個貢獻排名,其實這沒必要。大家只需要積极參与、奉獻,貢獻你的才智、提交你的代碼,這樣就可以了。
開發軟體
編程不管在那種情況下都關乎於你自身的發展。無論你是否為了尋找解決問題的新方法,尋找優化代碼的方式,學習新的編程語言,或者是學習如何更好的與其它人員合作,你都不會停止成長。你自己成長得越多,對開源項目越有幫助。
個人成長和職業技能的提升是你參與開源項目的終極目標,但是實際上這是一個貫穿整個項目的持續過程。成為一個開源程序員跟得到一份公務員工作不同;這是一個持之以恆的過程。學習、分享、再學習,或許你會去編寫一個「康威生命遊戲」,然後你會學到越來越多。
這就是開源的過程:自由地開發,每一行代碼。因此,發現你的技能樹,激發潛能,付出努力,不斷提高自己的技能,並最終參與其中。
(題圖素材修改自:woot.com)
作者簡介:
Seth Kenlon —— Seth Kenlon 是一位獨立多媒體藝術家,開源文化倡導者, Unix 極客。他還是 Slackware 多媒體產品項目的維護人員之一,官網:http://slackermedia.ml 。
via: https://opensource.com/article/17/1/how-get-started-open-source-programmer
作者:Seth Kenlon 譯者:rusking 校對:Bestony, wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive