polarisxu 對(duì)話無聞
閱讀本文大概需要 8 分鐘。
大家好,我是站長(zhǎng) polarisxu。
今天起,我計(jì)劃起一個(gè)系列,叫做「對(duì)話 xxx」,主要訪談、撰寫一些圈里人的成長(zhǎng)故事,希望他們的故事對(duì)大家有一些啟發(fā)。
今天要對(duì)話的這位是國(guó)內(nèi) Go 開源界的名人,GitHub followers 有 11.1k+,主導(dǎo)了開發(fā)了好幾個(gè) Go 開源項(xiàng)目,它就是無聞,昵稱 unknwon(注意,不是 unknown)。早期學(xué)習(xí) Go 的小伙伴,知道他可能更多是來自他的視頻教程。不管什么方式,希望本文對(duì)有些讀者有幫助。
01 與 Go 結(jié)緣
早在無聞讀高中時(shí),我們就認(rèn)識(shí)了(沒見過面,網(wǎng)上認(rèn)識(shí))。因?yàn)槲医佑| Go 比較早,2012~2013 年就創(chuàng)建了 Go 社區(qū)。具體怎么聯(lián)系上的,不記得了。
2013 年上半年,他開始制作 Go 語言視頻教程,我印象特別深的是,那年清明節(jié)左右,我在度蜜月,還每天和他交流 Go 語言,主要探討視頻制作的知識(shí)點(diǎn),他很嚴(yán)謹(jǐn),怕知識(shí)點(diǎn)講解有誤,和我交流、探討確認(rèn)。一口氣,他制作了 《Go編程基礎(chǔ)》[1]、《Go 名庫(kù)講解》[2]、《Go Web基礎(chǔ)》[3]等視頻教程。所以早期學(xué)習(xí) Go 的小伙伴,很多都是看無聞的視頻入門的。
但很多人也許不知道,他的這些視頻是邊學(xué) Go 邊制作的,這就是所謂的通過輸出做到更好的輸入,教別人是最有效的學(xué)習(xí)方法。
當(dāng)然在這背后還隱藏著其他不為人知的故事。
其一:VBA 起家
無聞是一個(gè)文科生,是不是很驚訝?2010 年就出國(guó),在國(guó)外讀的高中。因?yàn)?2 點(diǎn)半就放學(xué),很無聊,然后研究 Excel。有些人也許不知道,Excel 是支持編程的,那就是 VBA(Visual Basic for Applications),這是一種宏語言?;?VBA 做了一個(gè)簡(jiǎn)單的賬本。這算是編程的入門。
學(xué)了 VBA 后,不滿足于它,可能也對(duì)編程產(chǎn)生了興趣,同時(shí)由于 VBA 算是 VB 的子集,所以又去學(xué)習(xí)了 VB 6.0。用 VB 6.0 做了一些工具,在網(wǎng)上也得到了一些前輩友善的指導(dǎo),這讓他拓展了很大的知識(shí)面。
接著,無聞還學(xué)習(xí)了易語言,對(duì),沒錯(cuò),就是那個(gè)中文語言。易語言是 C++ 實(shí)現(xiàn)的,但它和 VB 一樣,提供了很多方便的編程接口,包括提供方便的圖形化編輯環(huán)境,使得有 VB 基礎(chǔ)的學(xué)習(xí)易語言比較容易。
其二:做視頻教程,學(xué)習(xí) Go
2011 年開始學(xué)習(xí) C#,在學(xué)習(xí) C# 的過程中,就一邊學(xué)習(xí)一邊做視頻教程。所以,Go 視頻教程才會(huì)做的比較好。
那時(shí)正是 Web 2.0 比較火的時(shí)候,Web 開發(fā)是比較受歡迎的。無聞發(fā)現(xiàn),PHP 是那時(shí)候 Web 開發(fā)最歡迎的。于是準(zhǔn)備學(xué)習(xí) PHP,相關(guān)圖書都買好了(寄到國(guó)外的哦)。但無意中,他在 GitHub 上看到了 https://github.com/astaxie/build-web-application-with-golang 這本書,搗鼓了一下 Go,發(fā)現(xiàn)它的運(yùn)行方式和易語言很像(都是編譯為二進(jìn)制文件)。因?yàn)樽约河袕?qiáng)迫癥,而 Go 語言的工具鏈很好的解決了這些問題,不再有選擇的痛苦,大家寫的代碼風(fēng)格幾乎一樣。
于是 2013 年無聞開始學(xué) Go 語言,并做了上面的視頻教程和翻譯一些 Go 資料,比如國(guó)外另外一本講解很全面的 Go 語言圖書:《The Way to Go》,無聞向作者要到了授權(quán),翻譯成中文,在 GitHub 上免費(fèi)提供給大家閱讀,目前已經(jīng)有 25.1k+ Star:https://github.com/unknwon/the-way-to-go_ZH_CN。
我總結(jié)一下無聞的 Go 學(xué)習(xí)之路:
通過 VBA 進(jìn)入編程世界; 因?yàn)橐渍Z言和 C# 的視頻制作經(jīng)驗(yàn),愛上 Go 并制作了優(yōu)秀的視頻教程; 通過制作更多的 Go 視頻教程,翻譯優(yōu)秀教程以及名庫(kù)講解,打好自己的 Go 基礎(chǔ),同時(shí)回饋 Go 社區(qū);
02 開源之旅
做開源可能是一種巧合,因?yàn)閷?duì) Git 的喜愛,加上 GitHub 私有庫(kù)是收費(fèi)的(現(xiàn)在他已經(jīng)是 GitHub PRO,而且在 GitHub 上贊助其他人),同時(shí) Go 語言的生態(tài)都是基于 GitHub。所以,那時(shí)候只是知道將自己的代碼放在 GitHub 上公開,并不知曉這原來就是開源。
后來對(duì)開源接觸越來越多,發(fā)現(xiàn)開源項(xiàng)目都比較優(yōu)秀,有一些管理相關(guān)的模板。
對(duì)于 gogs[4] 這個(gè)開源項(xiàng)目,主要對(duì) Ruby 不太喜歡,不太喜歡笨重的環(huán)境,雖然有 GitLab,但想要用 Go 實(shí)現(xiàn)一個(gè)。因此和朋友一起開始搞 gogs。
在做 gogs 時(shí),無聞對(duì)數(shù)據(jù)庫(kù)還是一無所知的狀態(tài)。有著強(qiáng)烈學(xué)習(xí)的意愿,開發(fā) gogs 的過程中,涉及到很多的基礎(chǔ)東西,都從頭實(shí)現(xiàn)了一遍。比如:
github.com/go-macaron/macaron:一個(gè) Web 框架,以及其他一些框架的設(shè)施,都是自己從頭實(shí)現(xiàn); github.com/go-ini/ini:超贊的 Go 語言 INI 文件操作庫(kù); github.com/go-macaron/i18n:gogs 是一個(gè)國(guó)際項(xiàng)目,自然需要國(guó)際化; github.com/unknwon/cae:類似 PHP 風(fēng)格的壓縮和歸檔庫(kù); github.com/unknwon/com:一些經(jīng)常使用的便利函數(shù); github.com/go-clog/clog:基于 channel 的日志庫(kù); 。。。
除了 gogs,還有其他一些知名的項(xiàng)目,比如 gowalker[5]、gopm(已關(guān)停)等。所有這些,都是它在學(xué)習(xí)、實(shí)踐過程中遇到了問題,然后自己將它解決掉??赡芙鉀Q方案不是最好的,甚至市面上已經(jīng)有其他解決方案了,但自己實(shí)現(xiàn)它,給無聞帶來的收益是巨大的。
大家可能沒有注意,他的開源項(xiàng)目,很多都有漂亮的網(wǎng)站或獨(dú)立文檔站,而且基本這些站也是自己實(shí)現(xiàn)的。因?yàn)殚_源項(xiàng)目,文檔很重要,于是他用 Go 實(shí)現(xiàn)了一個(gè),這就是 peach[6]:一個(gè)用于多語言,實(shí)時(shí)同步和可搜索文檔的 Web 服務(wù)器。

他實(shí)現(xiàn)這些,順便把前端相關(guān)技術(shù)也學(xué)習(xí)了。
參與開源,不一定一上來就是參與者,也可以是反饋者,通過反饋慢慢融入這個(gè)項(xiàng)目,實(shí)際上將問題反饋清楚也是一種挑戰(zhàn)。
無聞的理念:自己學(xué)習(xí)階段,通過造輪子,把自己往“死”里整,什么新技術(shù)都盡量用上,多想想這項(xiàng)技術(shù)解決了什么問題,通過項(xiàng)目提升自己能力。
03 劃重點(diǎn)
通過對(duì)無聞步入編程世界,回顧了他學(xué)習(xí) Go 語言的經(jīng)歷,以及進(jìn)行 Go 開源的心得體會(huì),我認(rèn)為有以下幾點(diǎn)值得大家借鑒,特別是對(duì)于后浪們,比如還是在校學(xué)生。
一、越早學(xué)習(xí)越好
在股票基金投資中,很強(qiáng)調(diào)時(shí)間,因?yàn)閺?fù)利效應(yīng)很可怕。學(xué)習(xí)也是一樣。對(duì)于編程學(xué)習(xí)來說,你開始的越早,就越早的走在同輩的前列,比如無聞,雖然是文科生,但高中就開始接觸編程,并自發(fā)的進(jìn)行各種學(xué)習(xí)、研究,做視頻、做項(xiàng)目,進(jìn)行主動(dòng)學(xué)習(xí)。我特別欣賞那些還在讀書的人能夠積極融入各種社區(qū)的圈子。不管是開源項(xiàng)目,還是社區(qū)的一些活動(dòng)、群等,其中有大學(xué)生的話,我會(huì)特別注意他,覺得他前途無量。
想想我的大學(xué)生活,只是沉浸在校園生活中,對(duì)業(yè)界發(fā)生的事情一無所知。這注定起點(diǎn)就比那些早早接觸外界的人低。所以,我強(qiáng)烈建議你現(xiàn)在就開始認(rèn)真學(xué)習(xí),無聞經(jīng)歷也許可以借鑒。
而且,你越早學(xué)習(xí),越早了解外界,越早工作,你的能力、薪資等大概率會(huì)比同齡人強(qiáng)。何況都說程序員吃青春飯,所以更應(yīng)該提前學(xué)習(xí)。盡早多接觸外界,外界的人和事。
二、興趣是最好的老師
工作很多時(shí)候是為了生活,但你不能全無興趣。而且,我認(rèn)為興趣也是可以培養(yǎng)的,要善于發(fā)現(xiàn)生活的美。只要你不討厭它,慢慢的,你大概率可以喜歡它。大家可以想想生活中,你看到一個(gè)女生,覺得一般,時(shí)間長(zhǎng)了,接觸多了,有沒有覺得還挺好看的,屬于耐看型?哈哈哈哈,對(duì)吧,需要培養(yǎng)!
無聞能夠做這么多項(xiàng)目,我相信一定是對(duì)這些事情是有興趣的,而且做成了很有成就感,更進(jìn)一步增加了興趣。抱著喜歡它去學(xué)習(xí),而不是太功利的,目標(biāo)就是通過它找到一個(gè)好工作。其實(shí)只要你學(xué)好了,學(xué)透了,好工作是自然的。
三、通過輸出倒逼輸入
學(xué)習(xí)別只是看。無聞的經(jīng)歷很明顯,他通過邊學(xué)習(xí)邊做視頻,進(jìn)步很快。你不一定非得做視頻,但至少應(yīng)該做做筆記,寫寫文章。寫出來的東西,一定通過網(wǎng)絡(luò)發(fā)布,比如微信公眾號(hào),這樣督促自己更嚴(yán)謹(jǐn)。
其次,一定要實(shí)踐。你別跟我說:不知道用 Go 寫點(diǎn)什么。那是你根本沒有思考,對(duì)自己不夠狠。能寫的東西很多。再不濟(jì),參與一些你喜歡的開源項(xiàng)目也可以,比如提提 typo 也是可以的,關(guān)鍵要邁出第一步。
認(rèn)清自己,看自己的長(zhǎng)處。通過輸出,倒逼自己輸入,讓輸入更高效!
希望通過「對(duì)話無聞」能夠?qū)Υ蠹矣袔椭?/p>
參考資料
《Go編程基礎(chǔ)》: https://github.com/Unknwon/go-fundamental-programming
[2]《Go 名庫(kù)講解》: https://github.com/Unknwon/go-rock-libraries-showcases
[3]《Go Web基礎(chǔ)》: https://github.com/Unknwon/go-web-foundation/tree/v1
[4]gogs: https://github.com/gogs/gogs
[5]gowalker: https://gowalker.org/
[6]peach: https://github.com/peachdocs/peach
歡迎關(guān)注我
