如何快速學(xué)一門新語言?
先說結(jié)論
我花了半個(gè)月時(shí)間學(xué)習(xí)Go?,就開發(fā)了商業(yè)項(xiàng)目,抗住了并發(fā)考驗(yàn),并且成功被Go圈粉。
2022年初,入職新公司后,花了3天時(shí)間,學(xué)習(xí)GoFrame框架,提前完成了開發(fā)任務(wù),在項(xiàng)目復(fù)盤會(huì)上成了同事口中的"大佬"。
我是如何做到的呢?如何快速學(xué)習(xí)一門新語言呢?
我認(rèn)為核心就三點(diǎn):
第一:多動(dòng)手
第二:不依賴教程的多動(dòng)手
第三:帶著問題的多動(dòng)手
咱們具體講講
我在初學(xué)Go的時(shí)候,之前學(xué)習(xí)編程語言的經(jīng)驗(yàn)告訴我:
入門階段先不要給自己提出很多問題,也不要對(duì)自己要求過高。
第一階段就是多動(dòng)手
手撕官方文檔,把文檔中的知識(shí)點(diǎn)都手敲幾遍,可以有不懂不理解的,這很正常,但是一定要手敲。
而且要盡可能多的手敲,盲敲,不看教程的敲代碼。
第二階段不依賴文檔
自己通過思維導(dǎo)圖或者更簡(jiǎn)單的方式,比如列出todolist,集中1小時(shí)的時(shí)間強(qiáng)迫自己獨(dú)立完成知識(shí)點(diǎn)的復(fù)現(xiàn)。
具體的操作方式是這樣的:
第一步:只列出知識(shí)點(diǎn),最多寫出實(shí)現(xiàn)思路,不要寫代碼。
第二步:關(guān)閉教程和文檔,自己去實(shí)踐,手敲實(shí)現(xiàn)一個(gè)個(gè)知識(shí)點(diǎn)和小的需求。
期間如果碰到了問題,也不要去看當(dāng)時(shí)學(xué)習(xí)的參考文檔,而是通過查看報(bào)錯(cuò),或者IDE的錯(cuò)誤提示去嘗試自己解決問題。
第三階段帶著問題去學(xué)習(xí)
當(dāng)我們可以不依賴教程就能實(shí)現(xiàn)需求之后,這時(shí)候才建議大家?guī)е鴨栴}去學(xué)習(xí),去思考。
對(duì)于初學(xué)者來說,如果入門的第一階段就帶著問題去思考,很容易鉆進(jìn)牛角尖;更可能因?yàn)楦悴磺宄硞€(gè)知識(shí)點(diǎn)而煩躁沮喪,如果因?yàn)檫@些原因“被勸退”可就太虧了。
總結(jié)
所以,學(xué)習(xí)一定要分階段進(jìn)行。
每個(gè)階段做每個(gè)階段的事情,每個(gè)階段有每個(gè)階段關(guān)注的重點(diǎn)。
不要胡子眼睛一把抓,貪多嚼不爛。
初識(shí)GoFrame
下面再分享一下學(xué)GoFrame從小白到“大佬”的故事。
我在學(xué)習(xí)Go?語言的時(shí)候,和大多數(shù)同學(xué)一樣,是使用的Gin + gorm完成的第一個(gè)入門項(xiàng)目開發(fā)的。
2022年初,換工作后,新公司用的 GoFrame 框架,開始接觸時(shí)也是一臉懵啊,因?yàn)楣卷?xiàng)目緊,也沒有時(shí)間像上面介紹的那樣,能有充足的時(shí)間分三個(gè)階段去學(xué)習(xí),只能一邊查前輩們寫的代碼,一邊實(shí)現(xiàn)新的需求。
當(dāng)時(shí)很好奇,公司為什么選擇GoFrame框架。
問過同事才知道,原來公司之前全是PHPer,經(jīng)過充分的調(diào)研發(fā)現(xiàn):PHP轉(zhuǎn)Go最合適的框架就是GoFrame。
我在查文檔的時(shí)候還看到了這么一條評(píng)論:
好吧,因?yàn)槲抑白隽藥啄關(guān)HP,也非常喜歡Laravel框架,聽到這個(gè)說法,還是有些竊喜的,感覺對(duì)于PHPer來說,學(xué)習(xí)GoFrame的成本應(yīng)該不高。
但是,我看公司前輩的代碼很頭大,學(xué)習(xí)筆記做的很辛苦,效率也并不高。
如果你也有遇到類似的問題,我強(qiáng)烈建議你這么做:
以官方文檔為重點(diǎn),而不是前輩的代碼,帶著項(xiàng)目中的問題有針對(duì)性的查文檔。同時(shí)再花時(shí)間從頭到尾系統(tǒng)的閱讀官方文檔。
以我的經(jīng)歷舉例:
當(dāng)時(shí)剛?cè)肼?,公司給了我兩天的時(shí)間熟悉項(xiàng)目需求、已有代碼和架構(gòu)設(shè)計(jì),從第三天就開始參與需求評(píng)審做項(xiàng)目了。
前兩天看前輩的代碼可以說是一臉懵,類似的需求,每個(gè)人的實(shí)現(xiàn)方式都不一樣,團(tuán)隊(duì)內(nèi)并沒有統(tǒng)一的代碼規(guī)范。
我也和老大吐槽過,老大給我的建議是:希望我能輸出規(guī)范的代碼,形成規(guī)范,之后讓大家按照我的標(biāo)準(zhǔn)寫。
好吧,壓力和責(zé)任更大了,于是:
我白天積極的和同事確定不清楚的需求,溝通之前的實(shí)現(xiàn)細(xì)節(jié),為什么這么寫等等。
晚上回到家?guī)е蓡柸ニ⒐俜轿臋n,刷完對(duì)應(yīng)的知識(shí)點(diǎn)后整理筆記,這些筆記不怕細(xì)碎,只要是對(duì)實(shí)現(xiàn)需求有幫助,能提高我工作效率的都會(huì)記錄。
todolist
記錄todolist是個(gè)非常好的習(xí)慣,和大家重點(diǎn)分享一下:
- 比如,能復(fù)用的代碼,方便我快速查找的代碼,沒有理解透徹的代碼等等,我都會(huì)記錄到筆記,并且記錄成todolist,最后統(tǒng)一花時(shí)間逐個(gè)解決。
- 細(xì)碎的知識(shí)點(diǎn)如果有不理解的,我也會(huì)先放放,不用因?yàn)橐粌蓚€(gè)不懂的知識(shí)點(diǎn)影響整體的學(xué)習(xí)進(jìn)度。
- 我又花了大概兩個(gè)晚上下班后的時(shí)間,熬夜刷文檔,從頭到尾刷官方文檔,比較深刻的理解了框架的設(shè)計(jì)思想和最佳實(shí)踐。
- 最后花了1個(gè)晚上的時(shí)間,把細(xì)碎的知識(shí)點(diǎn)給串起來,這樣就有了整體的認(rèn)識(shí)。
就這樣,我花了大概三天的時(shí)間,帶著問題系統(tǒng)的刷了官方文檔,保質(zhì)保量的完成了項(xiàng)目需求,分享了我覺得比較優(yōu)雅的實(shí)現(xiàn)方式(其實(shí)就是通過官方文檔學(xué)的)。
并且在提測(cè)之后,0 BUG。
后來項(xiàng)目復(fù)盤時(shí),同事還說我是"大佬",一看就是很有經(jīng)驗(yàn)的。
其實(shí)當(dāng)時(shí)的自己并沒有 GoFrame 的經(jīng)驗(yàn),并且對(duì)項(xiàng)目理解的也不夠深入。時(shí)間太緊張啦~
只是找對(duì)了方法,并且愿意花時(shí)間去實(shí)踐,刻意練習(xí),去執(zhí)行,而已。
總結(jié)一下
不管你是想快速學(xué)Go,還是想學(xué)其他新的語言;
不管你是有充足的時(shí)間去學(xué)習(xí),還是像我學(xué)習(xí)GoFrame時(shí)一樣時(shí)間緊張。
關(guān)鍵的問題都是找到合適的方法,不斷去實(shí)踐,多動(dòng)手敲代碼。
碰到理解不了的問題也不要懊惱沮喪,可以先列todolist,放到后面解決。
可能在你花了更多的時(shí)間,比較系統(tǒng)的學(xué)習(xí)之后,之前困擾你的問題都不是問題了。
所以:找到合適的方法,每個(gè)階段有每個(gè)階段的學(xué)習(xí)重點(diǎn)。多動(dòng)手,刻意練習(xí),堅(jiān)持實(shí)踐。才是快速學(xué)習(xí),從小白到"大佬"的王道。?