【導讀】:以往我們認為學習新程式語言的最佳方式是看語法,然後做小專案練習。Sahil Dua 另闢蹊徑,找到了學習新語言的另類方式:參與對應的開源專案。參與的過程中,需要檢視已有的模組,瞭解這種語言的模式,對自己寫出高質量的程式碼非常有益。
補充:Sahil Dua,創業公司 Refiral 合夥人,DuckDuckGo 開源社群 leader 之一,多個開源專案主要貢獻者。
目前程式語言超過 500 多種。學習一門新的程式語言對我們來說已是家常便飯。很有可能你熟悉 C++ 和 Java,而你的工作需要用到 Python 或者你非常精通 Python,但你工作寫程式碼需要用 Java 。再或者你想學習一種炫酷的程式語言來擴充你的技能。
如果你想學習一門新的程式語言,你選擇哪種方法?
- 網路教程
- 網路公開課(MOOC)
有些人甚至主張,學習新程式語言最好的方法其實如下:
- 學習語法;
- 建立一些個人專案;
嗯,說得過去!你想學習一門程式語言,你學了它的語法,建立一些個人小專案可以確保你應用到這些語法知識。
在學習不同的程式語言時,我建立了 20 個以上的小專案。相信我,當你為一週甚至一整晚就能快速完成的小專案寫程式碼時,你只是想完成任務。你所關心的只是——“我的程式碼能執行嗎?”你幾乎不關心程式碼的質量。
任何傻瓜都可以編寫計算機能理解的程式碼。優秀的程式設計師寫人類能理解的程式碼。” —— Martin Fowler
那麼,在嘗試學習一門新的程式語言時,你怎樣獲得好的實踐呢?
參與該語言的開源專案。
是不是感到驚訝?一些人或許會認為 —— ”等等,開源是很難的。只有當我們精通這門語言,我們才能為開源專案做出貢獻,對嗎?“。答案是否定的。
讓我先給你講個故事。
去年,我得到了一個來自 Booking.com 的全職工作 offer,而且我得知我工作的程式語言是 Perl (這是他們公司首要的後端語言)。2016 年 6 月,當我完成我的大學學位,我開始學習 Perl ,以便準備我大學後的第一份工作。我入職的時間是 7 月的第二週,因此我差不多有一個多月的學習時間。
我開始閱讀 Perl 的語法,並開始理解該語言的一些常見模式。到這裡,我真正想使用 Perl 來建立一些東西,這樣我就可以應用我學到的該語言的知識,實踐它的各種概念。當我在為使用 Perl 建立一些東西尋找 idea 時,我在 GitHub 上偶遇了 DuckDuckGo 的開源組織。我注意到一些開源專案是用 Perl 語言寫的。我瀏覽了一下發布的 issues,找到了很多帶有“初學者”標籤的 Issue 。我立即開始工作,並提交了一些 pull requests。快進到今天,我成為了它們一些開源專案的主要貢獻者,以及 DuckDuckGo 20 個開源社群的領導者之一。
這個故事的意思:我通過參與 Perl 語言的開源專案最終學會了 Perl 語言。
為什麼參與到開源就奏效了呢?
就在我學習了 Perl 的語法後,我開始參與開源專案。在那期間,我常常檢視現有的模組。我時常注意 Perl 正被使用的模式。因此我開始挑選這些好的例項應用到我自己的程式碼中,這有助於我學習怎樣用 Perl 更好地寫程式碼。
這不只是巧合;讓我告訴你另一個故事,以獲得更多的相關性。
最近,在 Booking.com 工作時,我接受了一些任務,其中有一個是在 Go 語言寫的服務系統上新增一些功能。下面是我和隊友的對話:
我:我真的很喜歡這個任務,我想完成它。你怎麼看?他:是的,的確很有意思。但是它要用到 Go,你熟悉 Go 嗎?
我:不。
他:那你想學嗎?
我 : 是的!
他:? 你可以的!
所以,那就是我學習另一種程式語言—— Go 的起點!
我開始學習 Go 的語法,並在其官網上找到了一個很棒的初學者指南,足以讓我掌握這門語言的基本概念。
再一次地,我開始尋找一些釋出的 Issue 中帶有“初學者”或者“簡易修復”標籤的 Go 語言開源專案。我通過 Google 找到了一個專案,大致就是 GitHub 的 REST API 包裝器。
在我開始學習 Go 語言的第二天,我在那個專案上發了第一個 pull request。
我去年一整年的貢獻圖 ( https://github.com/sahildua2305 )
開源專案是如何提供幫助的?
那麼,你現在可能會疑惑參與開源專案怎樣可以幫到你獲得好的語言實踐。有好幾個方面,讓我們逐個討論。
程式碼質量
大多數優秀的開源專案都有嚴格的程式碼標準,想要你的程式碼融入其中,你必須遵守這些準則。這會幫助你適應這些準則,因此寫出高質量的程式碼,即使你才剛學習這門語言。
不僅如此,你還有機會檢視程式碼的其餘部分,看看別人是怎麼樣寫程式碼,寫文件的。
程式碼審查
為開源專案做貢獻最佳之處就是程式碼審查(code review)。當 push 你的程式碼,你得到與該專案相關的專家的反饋,因此它給了你一個提高對這門語言理解的機會。
你獲得了一次如何寫處優秀程式碼的私人機會,並且還免費的呢!
鼓勵和讚賞
這是我在 Go Lang 上發出的第一個 PR 後,別人寫下的第一個評論。
作為軟體開發人員,我們的工作確實需要得到理解和鼓勵;開源社群能讓你得到足夠的鼓勵和支援。在我為開源貢獻的所有經歷中,我從未收到過任何侮辱性或消極的評論。每個人都是特別願給他人鼓勵和幫助。
DuckDuckGo 社群其他人給我的評論
所以,下次你想要學一門新語言,大步向前去冒險吧!找到一個開源專案去做貢獻,在學習這門語言和它微妙之處的道路上行進。
【伯樂線上補充】:希望作者這個不走傳統慣例的方法,對大家有啟發。如果你對如何參與開源還不怎麼了解,請看 GitHub 的這篇文章《新人必看的開源指南:如何參與並做貢獻》。
打賞支援我翻譯更多好文章,謝謝!
打賞譯者
打賞支援我翻譯更多好文章,謝謝!
任選一種支付方式