[譯] 震驚,還可以用這種姿勢學習程式設計

ivyxuan發表於2019-02-18

現在已經有 500 多門程式語言了。所以站在今天來說,開始學習一門新的程式語言對你來說是一件很正常的事情。比如你會 C++ 和 Java,但是你的工作卻需要用到 Python;或者你精通 Python 但是你工作中用到的語言卻是 Java;又或者說你只是想擴充套件一下你的程式設計技能。

所以如果你想開始學習一門新的程式語言,你會選擇什麼方式?

  • 閱讀一些線上教程
  • 或是看一些線上的網路課程

甚至你們其中一些人或許會說學習一門新的程式語言最好的途徑應該是這樣的:

  • 先學習這門新的程式語言的語法
  • 再用這門語言開發一些個人專案

這樣說的確很有道理!因為它可以確保你將你所學的語法知識運用出來。

在我學習各種語言的過程中,我開發了 20 多個小專案。但相信我,在你寫個人專案的時候,不管是利用週末做一個專案還是刷夜做一個快速開發,你寫的程式碼都是為了完成某些事情。你只會關注 —— “我的程式碼能不能執行的通”,而不會去關心程式碼質量。

“任何一個吃瓜群眾都可以寫出能讓計算機理解的程式碼,但一個好的程式設計師可以寫出能讓人理解的程式碼。” —— (Martin Fowler)


所以,如果你想要學習一門新的程式語言,怎樣才是一個好的方式?

向這門語言的開源專案貢獻程式碼。

是不是震驚了?你可能會想 —— “等等,開源專案很難啊。難道不是隻有當我精通這門語言的時候才能向一個開源專案貢獻程式碼的嗎?”。答案是否定的。

讓我來給你們講個故事。

去年,我收到了 Booking 全職工作的邀請,而且我知道我將要用 Perl 語言去工作(因為這個是他們後端主要應用的語言)。2016 年 6 月,我畢業之後就開始學習 Perl,這樣我才能做好準備去迎接我大學畢業後的第一份工作。因為我會在 7 月的第二週入職,所以我大概有 1 個月的時間去準備。

我開始閱讀 Perl 的語法規則並嘗試理解這門語言常用的設計模式。那個時候,我特別想用 Perl 做些什麼,那樣我就可以應用我學到的知識還可以將這個語言各種各樣的概念實踐出來。當我還在想我能用 Perl 做些什麼的時候,我在 GitHub 上看到了一個叫 DuckDuckGo 的開源專案組織。我注意到它們的一些開源專案是用 Perl 語言寫的。我看了看上面的 issue,然後發現有很多 issue 都有“新手(beginner)”的標籤。我馬上開始著手去解決這些問題並且提交了一些 pull request。到今天為止,我已經成為了他們一些開源專案的主要的貢獻者,而且還是 DuckDuckGo 這個開源專案社群中 20 個負責人之一。

這故事想告訴大家的就是 —— 我通過向 Perl 語言寫的開源專案貢獻程式碼學習了 Perl 語言。

所以為什麼這個辦法會有用?

當我學完了 Perl 的語法之後,我開始向開源專案貢獻程式碼。做這件事的時候,我習慣於檢視所有已有的模型,並留心 Perl 語言的設計模式。然後,我再將可取地方運用到自己的程式碼中,我也因此瞭解到了怎樣才能寫好 Perl 語言。

這並不是偶然,我還可以向你講另外一個類似的故事。

最近,在我的工作中,我選擇了一些任務,其中包括向 Go 語言寫的系統中新增一些新的特性的任務。因此我和我的同事發生了下面的對話 ——

我: 我十分喜歡這個任務,很想參與,你覺得可以嗎?

Him: 嗯,這個任務的確很有意思。但是,它需要你瞭解 Go,你學過 Go 嗎?

我: 沒有耶……

Him: 那你想學 Go 嗎?

我: 想!

Him: 好嘞,那就去學!

所以啦,我要開始學習另一門語言了 —— Go!

我開始閱讀 Go 的語法然後在他們的官網中找到了一個優質的針對初學者的教程。這足夠我去了解這個語言所有的基本概念。

然後又一次,我開始找 Go 的開源專案,而且是那種帶有“初學者(beginner)”和“簡單(easy-fix)”標籤的 issue。我發現了一個谷歌的專案,基本上來說是一個用 Go 語言為 GitHub 的 REST API 寫的包。

僅僅在我開始學習 Go 的 2 天之後,我就有了我的第一次提交。

[譯] 震驚,還可以用這種姿勢學習程式設計


開源專案能提供怎樣的幫助?

你現在可能會好奇,向開源專案貢獻程式碼到底是如何讓你更好地學習使用程式語言的。有以下幾個方面。

程式碼質量

很多好的開源專案都有一套嚴格的程式碼規範,要想你的程式碼能夠被合併就必須要遵守這些規範。因此,即使你剛剛開始學習這門語言也可以根據這些規範寫出質量很高的程式碼。

不僅僅如此,你還可以瀏覽專案其他部分的程式碼,然後學習怎麼寫出優雅的程式碼以及怎麼去組織文件。

程式碼校對

向開源專案貢獻程式碼最棒的一點就是有程式碼校對。你提交你的程式碼之後,你會收到專案負責人的反饋,這提供給你一個能更好理解這門語言的機會。

這就像是獲得了一個能教導你寫出優秀程式碼的免費個人教練。

得到賞識

[譯] 震驚,還可以用這種姿勢學習程式設計

作為軟體開發人員,我們真的需要自己的工作能夠得到賞識,而開源社群確保了這一點。我從來沒有收到過一條侮辱或者打擊人的評論,所有人都特別鼓勵我而且特別友好。

[譯] 震驚,還可以用這種姿勢學習程式設計


所以,如果下一次你要學習一門新的語言,只管去學吧!找一個開源專案貢獻程式碼,然後在學習這門語言和它自己細微差別的路上前進吧 ?

一定要讓我知道這個不怎麼尋常的方法對你有沒有用。而如果你認為這個方法有用的話,請給我點個贊(❤)~

如果你有什麼其他有用的方法的話也請告訴我。推特/關注我@sahildua2305

掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOSReact前端後端產品設計 等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃

相關文章