今天郵箱中收到這么一個(gè)問(wèn)題:
天花板你好,你的某某文章我看了兜粘,非常喜歡申窘。里面的某某例子我自己寫了一下,代碼是這樣的:
int main()
{
bala...bala;
bala...bala;
}
你看這樣寫是否正確孔轴?
很容易看出剃法,這個(gè)孩子最近一定是剛學(xué)C語(yǔ)言不久,他的學(xué)習(xí)熱情和好奇心非常值得贊賞路鹰。在這個(gè)前提下贷洲,我要說(shuō)的是,編程學(xué)習(xí)僅僅靠態(tài)度是不夠晋柱,的還需要科學(xué)的方法論优构。編程是人和計(jì)算機(jī)交流的過(guò)程,準(zhǔn)確的說(shuō)是指揮計(jì)算機(jī)工作的過(guò)程雁竞。那么這個(gè)過(guò)程的結(jié)果與好壞應(yīng)該由計(jì)算機(jī)來(lái)反饋而不是另外一個(gè)普通人來(lái)反饋钦椭。
最近這樣的郵件收到了不少,看來(lái)這樣的誤區(qū)還是普遍存在的碑诉。于是我想要和大家重新討論一下究竟該如何學(xué)習(xí)編程玉凯。
我曾在文章里多次提到過(guò),不能只是通過(guò)讀教材和記筆記來(lái)學(xué)習(xí)編程联贩,這樣學(xué)到的東西是死的,很可能寫出的代碼根本就編譯不過(guò)捎拯。那究竟如何系統(tǒng)地學(xué)習(xí)編程呢泪幌,我總結(jié)為以下幾點(diǎn)。
系統(tǒng)學(xué)習(xí)教材
對(duì)教材的學(xué)習(xí)是特別重要的署照,尤其是對(duì)初學(xué)者而言祸泪。對(duì)于初學(xué)者,軟件開(kāi)發(fā)是一個(gè)完全陌生的領(lǐng)域建芙,通過(guò)閱讀教材能夠迅速讓自己在這個(gè)空白的領(lǐng)域構(gòu)建出自己的一個(gè)知識(shí)體系没隘。這對(duì)后面繼續(xù)深入地學(xué)習(xí)至關(guān)重要。
如何讀教材就有學(xué)問(wèn)了禁荸。很多同學(xué)讀教材非常仔細(xì)右蒲,每一個(gè)細(xì)節(jié)都要搞得非常清楚,這樣慢慢推進(jìn)會(huì)讓戰(zhàn)線拉得非常長(zhǎng)赶熟,讀一本教材大概要花一兩個(gè)月的時(shí)間瑰妄。對(duì)于這些同學(xué),經(jīng)常出現(xiàn)看第五章的時(shí)候已經(jīng)把第二章的內(nèi)容忘得差不多了映砖。這樣學(xué)習(xí)最大的問(wèn)題就是雖然把細(xì)節(jié)知識(shí)點(diǎn)搞到非常清楚间坐,但由于時(shí)間太長(zhǎng),讓這些知識(shí)點(diǎn)相互間無(wú)法聯(lián)系起來(lái)形成體系,這樣既不利于理解也不利于記憶竹宋。
我給同學(xué)們的建議是要由粗向細(xì)地閱讀教材劳澄。一般分三個(gè)階段:
- 粗讀
粗讀就類似于囫圇吞棗地讀。對(duì)于一本入門級(jí)的教材一般400到500頁(yè)的樣子蜈七,在兩周內(nèi)快速通讀一遍秒拔。閱讀過(guò)程中,對(duì)于不是太清楚的知識(shí)點(diǎn)可以跳過(guò)宪潮,知道有這么回事就行溯警。這樣讀一遍之后,你會(huì)發(fā)現(xiàn)自己雖然依然不怎么會(huì)寫代碼狡相,但基本已經(jīng)知道編程是怎么回事了√萸幔現(xiàn)在可以進(jìn)入下一個(gè)階段。
- 精讀
在這個(gè)階段里尽棕,要仔細(xì)把教材重新閱讀一遍喳挑。在這一遍里,重點(diǎn)了解每一章里介紹的編程方法滔悉,能夠在計(jì)算機(jī)上把實(shí)例代碼調(diào)通就達(dá)到要求伊诵。最好把課后習(xí)題有關(guān)上機(jī)練習(xí)的部分都自己完成一下。至于那些你還不清楚究竟如何去用的冷門方法回官,可以不用掌握曹宴。這個(gè)過(guò)程耗時(shí)比較久,大概2個(gè)月左右歉提。這個(gè)階段完成后笛坦,你已經(jīng)能夠用某種語(yǔ)言完成一些最基本的功能了。
- 貫通
最后這個(gè)階段就是融匯貫通的階段苔巨。在第二遍結(jié)束后版扩,基本的功能你已經(jīng)都掌握了,但可能對(duì)于大部分功能你還不知道他們除了寫例子程序還有什么用侄泽〗嘎或者你干脆就忘記了都學(xué)會(huì)了那些方法。接下來(lái)悼尾,你需要在互聯(lián)網(wǎng)上找一些基礎(chǔ)的編程實(shí)例柿扣,在學(xué)習(xí)這些實(shí)例的過(guò)程中,你會(huì)發(fā)現(xiàn)涉及到的很多東西你都了解過(guò)闺魏,但又有些模棱兩可窄刘,這時(shí)候你就要像查資料一樣回到教材中認(rèn)認(rèn)真真、仔仔細(xì)細(xì)地去研讀相關(guān)的知識(shí)點(diǎn)舷胜,把它完全吃透娩践。
這也是一個(gè)反復(fù)的過(guò)程活翩,在你學(xué)習(xí)了一些別人分享的實(shí)例內(nèi)容后,你還可以自己按照興趣完成一些小工具之類的東西翻伺。一段時(shí)間后材泄,你會(huì)發(fā)現(xiàn),你已經(jīng)基本掌握了一門編程語(yǔ)言吨岭。
敲代碼
在編程學(xué)習(xí)的過(guò)程里拉宗,寫代碼是非常重要的東西。即使對(duì)于同一段例子程序辣辫,讀一遍和自己敲一遍的效果都是天壤之別旦事。敲代碼的過(guò)程是你對(duì)編程知識(shí)的二次思考的一個(gè)過(guò)程,同時(shí)還能幫助你建立對(duì)編程語(yǔ)言的肌肉記憶急灭。就我而言姐浮,一些基礎(chǔ)的代碼片段都是不用思考就能敲出來(lái)的,這就是肌肉記憶葬馋。
另外卖鲤,在代碼編譯和尋找Bug的過(guò)程能夠幫助你更深入地理解和記憶。敲得多了畴嘶,很多知識(shí)點(diǎn)自然就記住了蛋逾,壓根不用那么刻意地學(xué)習(xí)。
拓展學(xué)習(xí)
教材里介紹的東西往往是有限的窗悯,當(dāng)你掌握到一定程度的時(shí)候区匣,你需要繼續(xù)豐富自己的知識(shí)和技能。最好的方法就是自己設(shè)計(jì)一個(gè)小工具蒋院,然后用掌握的知識(shí)去實(shí)現(xiàn)它沉颂。在這個(gè)過(guò)程中,你一定會(huì)遇到很多問(wèn)題不知道該如何實(shí)現(xiàn)悦污,這時(shí),解決問(wèn)題的欲望會(huì)推動(dòng)你通過(guò)各種渠道去尋找解決方法钉蒲。當(dāng)你最終完成了這個(gè)小工具時(shí)切端,你會(huì)發(fā)現(xiàn)你的編程能力已經(jīng)上升到了一個(gè)新的水平。