3000字8個角度細(xì)說怎么提高代碼編程能力 導(dǎo)師再也不罵我菜雞
“怎么提高代碼編程能力”關(guān)于這個問題,學(xué)姐找遍了百度、Google、知乎、B站看了一圈,我發(fā)現(xiàn)很多大佬給的建議第一步都是——讀別人的代碼,鍛煉計算思維。
?
學(xué)姐也是這樣覺得,畢竟學(xué)姐剛開始python入門的時候報了一個班,這個老師技術(shù)很牛逼,也是直接上項目帶著講,從0開始,每個知識點都會有一個實戰(zhàn)案例配套,按理說這樣的課程已經(jīng)比市面上大部分的課程良心很多了。但是,這個老師有口音,一個小時的課,學(xué)姐要學(xué)三個小時,然后就淪落到python從入門到放棄了/(ㄒoㄒ)/~~。
?
后來也是遍訪名醫(yī)(利用互聯(lián)網(wǎng)找解決辦法),找到了良方——提高寫代碼的能力首先要提高讀代碼的能力。
?

?
讀什么樣的代碼
?
讀你感興趣的,和你現(xiàn)在所學(xué)語言匹配的代碼,或者根據(jù)你現(xiàn)在所學(xué)的知識去選擇相關(guān)的項目,因為大部分同學(xué)都是因為學(xué)習(xí)上要用到才開始敲代碼的。
?
這里學(xué)姐要提醒一句,如果你不喜歡這個專業(yè)(有同學(xué)是被調(diào)劑了的),那么請你找到興趣點,比如:喜歡做詞云,喜歡CV,喜歡研究文本處理,語音識別等等。要不然就算你有超強(qiáng)的自制力面對枯燥的代碼,堅持下來的可能性很小。
?
這些代碼哪里找?
?
你讀論文的時候有的會附帶代碼,或者類似github的網(wǎng)站上也有很多開源的項目,找到你需要的方向,或者感興趣的項目去讀代碼。請善于利用互聯(lián)網(wǎng),實在不行搭個梯子找找墻外面的資源。
?
如果是去開源網(wǎng)站上找項目,最好是找到一些大牛的項目去看,原因很簡單,大牛的代碼規(guī)范程度會更高,從看代碼這里就開始培養(yǎng)規(guī)范代碼的好習(xí)慣。
?
(這里不是說不是大牛的就不規(guī)范哈!而是大牛的經(jīng)驗更多,不容易帶個人習(xí)慣。)
?

?
怎么讀代碼?
?
不要上來就找大項目看,剛開始整體把控能力不強(qiáng),看大項目知識點太多,一下理解這么多知識點的時候,會導(dǎo)致你會有東一榔頭西一棒槌的感受,當(dāng)前的能力還不足以把這些知識點完整的串聯(lián)起來,對提高代碼能力沒有任何幫助。
?
所以讀代碼可以先從小項目開始。
?
如果直接上來看別人的代碼看不懂,怎么辦?那就先去看出了代碼以外的東西,比如項目的功能,利用了什么技術(shù),項目的詳細(xì)說明,以及推薦的書,或者引用的論文。這些都可以幫你理解這個項目的作用。
?
通過這些輔助性內(nèi)容,讓你知道這個項目的基本情況,幫助你在腦海里面形成一個對這個項目的框架,接下來再去研究項目的細(xì)節(jié)。這就相當(dāng)于你的設(shè)計圖,要照著設(shè)計圖去施工每一個細(xì)節(jié)。
?
接著你就對照著說明,或者是你對這個項目的初步了解,對每一個層級的文件及文件夾進(jìn)行功能注釋。Github上面的很多項目基本都已經(jīng)有了注釋,但是你要有你自己的理解,不能照著抄。
?

在讀代碼的時候,最好是找出比如文件中包含的、需要的、加載的其他的相關(guān)文件,根據(jù)閱讀說明書得知的功能,找到每一個功能代碼主題的位置,還有是否用過命名空間等等。
?
同時,最好能夠加上你自己的理解,就是一行一行在別人的代碼上添加自己的注釋。為什么這樣做?因為這個方法能讓你了解到這個問題“通常”的解決方法。
?
熟讀唐詩三百首不會作詩也會吟吶!兄弟們!
?

如果你覺得自己老厲害了,上來就看大項目,那你就把大項目分成小模塊來看,找出每個模塊,研究每個模塊的任務(wù)。
?
精確到函數(shù)的作用,明確輸入輸出對象,向上找出使用該函數(shù)的原因,向下找出都有誰調(diào)用了這個函數(shù),有了什么結(jié)果,這個結(jié)果在整個項目里面能做什么。
?
這一步是理解程序的實現(xiàn),目的是理清整個項目的先后次序,為接下來敲代碼打基礎(chǔ)。
?
敲代碼
?
明確項目功能,了解項目大致情況,弄清楚這部分代碼,梳理出來這個模塊的任務(wù)脈絡(luò)后,就按著梳理出來的思路和項目文件的先后次序,照著每一塊實現(xiàn)代碼邊看邊敲,這部分是實戰(zhàn)項目思路。
?
接著刪掉代碼,或者新建項目,自己按照剛剛規(guī)劃好的上下游思路嘗試著敲,這次不能看原來的代碼了。到哪里卡頓了,實在想不起來了再去看,這樣重復(fù)一直到可以完全不看,自己敲出代碼而且不報錯為止。
?
這里給大家說一下,不要用記憶的方法死記住每段代碼,而是想接下來要實現(xiàn)什么,用什么方法實現(xiàn),調(diào)用什么函數(shù)。
?
而且不要一次性敲完一整個文件的代碼,再運行,而是敲一段調(diào)試一下,否則等你敲完了,發(fā)現(xiàn)有問題,你就要debug整個文檔的代碼。
?

比如你寫了一段正則,就馬上測試一下這段正則能不能跑的通,是否能夠正常使用,如果是寫完了出現(xiàn)了報錯,你可能需要半個小時才能找到這個正則的錯誤,浪費時間挑戰(zhàn)心態(tài)。
?
但是調(diào)試是你必須要掌握的一個技能,很多同學(xué)不愿意調(diào)試,報錯了就想找個人問問為什么這樣報錯,這個報錯是怎么回事。就算你找到人問了,他的方法也是查找報錯提示是什么,查看代碼,然后設(shè)置斷點進(jìn)行debug調(diào)試。(如果你不會debug可以找個入門視頻看一下)
?

?
不同方式反復(fù)敲代碼,這一步是為了讓你自整理對該項目運用知識點的理解,不斷的調(diào)整項目在腦海中的架構(gòu),鍛煉你敲代碼的思路。下次你自己做自己的項目的時候你就知道我想要實現(xiàn)什么樣的效果,我以前讀的代碼中用了什么方法,那現(xiàn)在就可以用這個方法實現(xiàn)。
?
或者當(dāng)你在完成一個階段的時候,可以舉一反三,將某一段代碼按照自己的想法改動一下某些參數(shù),看看有什么效果。又或者你已經(jīng)學(xué)習(xí)了很多理論知識,想要用另一種方式嘗試能不能實現(xiàn)出相同的結(jié)果。
?
在你敲代碼的時候要想著為什么要用這個庫,聲明什么函數(shù),什么時候用這個函數(shù)。上一段代碼對下一段代碼的作用是什么,這一段代碼對下面的代碼起什么作用,對全局起什么作用。這樣的思路下,重復(fù)多次,如果你還不能提高,你過來,我手把手教你。
?

?
把這句話打印出來貼在電腦上:多看,多想,多動手,眼到,心到,手到。
?
我還貼心的給你做了個電腦屏保,拿走不謝!
?

?
?
讀什么書
?
不是我崇洋媚外哈~關(guān)于讀書大部分還是國外的好些。
?
但是吧!剛?cè)腴T的你,先看國內(nèi)大佬寫的書真的夠用了,想要讀國外的書,也要鍛煉的差不多了再去讀,要不然去看書,那就是看天書。
讀書是敲代碼的前提,而且在敲代碼之前你要了解算法和數(shù)據(jù)結(jié)構(gòu)。把基礎(chǔ)打好,外長高樓平地起,一切全都看地基,基礎(chǔ)課程就是你的地基,否則,就算你知道了上面的方法你也學(xué)不精。
?
不同的編程語言有不同的入門書籍,善于利用互聯(lián)網(wǎng)多搜索一下就找到了。算法書籍以前推過,這里不過多贅述。
?

?
做題&打比賽
?
做題是必不可少的,前提是你要先掌握理論基礎(chǔ)(讀書),因為很多題在書中都有講到,但是小白上來先讀書,先不要刷題,先讀幾本書,把書上的代碼都實現(xiàn),舉一反三的練一練;然后按照上面的方法去讀大佬的代碼,起碼能夠理解幾個小項目之后再去刷題。
?
刷題平臺我再說一遍:
?
https://leetcode-cn.com/
?
https://www.nowcoder.com/
?
https://www.lema.fun/question-banks
?
https://github.com/syzoj
?
小白的選擇:
?
https://pintia.cn/problem-sets?tab=0
?
?
關(guān)于打比賽
?
打比賽對鍛煉代碼能力是明顯效果的,但是這建立在你已經(jīng)能夠自己有了計算思維,架構(gòu)能力的基礎(chǔ)之上。沒有這些做鋪墊,就算是參加初學(xué)者的比賽,也是不行的。比賽能夠讓你發(fā)現(xiàn)自己更多的不足,但是直接上來就比賽會打擊你的積極性。
?
Kaggle,天池,華為,科大訊飛的比賽都可以參加的。
?
?
保持心態(tài)
?
最后,大家別把編程當(dāng)作一門技術(shù),你把它當(dāng)成工具,實現(xiàn)你想法的工具,這樣你在敲代碼的時候心態(tài)就不那么容易崩掉。
?
建議在最初學(xué)編程語言的時候,就用它做一個小游戲來激發(fā)自己的興趣,從迭代產(chǎn)品的角度,促使自己去學(xué)習(xí)更多的知識,保持自己的學(xué)習(xí)興趣。
?
也可以去借助比賽,從每一次提高分?jǐn)?shù)方面,保持持續(xù)學(xué)習(xí)的動力。
?
總結(jié)
?
先看書,實現(xiàn)書中的代碼,打好數(shù)學(xué)基礎(chǔ),了解算法基礎(chǔ);然后讀大佬的項目;接著反復(fù)敲一個項目的代碼,直到自己能夠獨立實現(xiàn)這個項目。再去刷題打比賽。
?
如果你有什么問題,關(guān)注公眾號,點擊菜單“聯(lián)系學(xué)姐”加學(xué)姐好友即可。
?

?
參考文檔:
https://www.zhihu.com/question/22031785
(@阿里云云棲號,@陳樹義,@石博天,@桃花島主)
http://web.archive.org/web/20100530025343/http://fuelyourcoding.com/one-sure-fire-way-to-improve-your-coding
免責(zé)聲明:所載內(nèi)容來源整理自互聯(lián)網(wǎng),僅供參考。轉(zhuǎn)載稿件版權(quán)歸原作者和機(jī)構(gòu)所有,如有侵權(quán),請聯(lián)系我們刪除。