最近總是聽到很多有同學(xué)問:怎么學(xué)到后面感覺越來(lái)越難了!
教程看完一遍后懵懵懂懂的
腦子繞不過彎來(lái),我是不是不適合學(xué)
……
大多數(shù)人在入門之后谍倦,都會(huì)遇到一個(gè)比較大的“?瓶頸期?”:這個(gè)階段,你已經(jīng)了解了編程語(yǔ)言的基本語(yǔ)法泪勒,可以看懂入門書上的所有例子昼蛀,但是?合上教程卻又無(wú)法寫出一個(gè)完整的代碼?,對(duì)于接下來(lái)的學(xué)習(xí)又缺少方向圆存。以至于對(duì)編程這件事情感到迷茫叼旋,甚至自我懷疑。
這是種很普遍的感受沦辙,也是很正常的現(xiàn)象夫植,而且不僅是在學(xué)編程上。
有種現(xiàn)象在心理學(xué)上被稱為“?達(dá)克效應(yīng)?”油讯,指的是:?人在對(duì)一件事認(rèn)知不足的時(shí)候往往會(huì)高估自己的水平详民;在經(jīng)過適當(dāng)?shù)膶W(xué)習(xí)和訓(xùn)練之后,就會(huì)認(rèn)識(shí)到事情的復(fù)雜度和自己的不足陌兑,轉(zhuǎn)而對(duì)自己產(chǎn)生否定沈跨;繼續(xù)堅(jiān)持,走出這一階段兔综,就會(huì)客觀看待饿凛,進(jìn)入穩(wěn)定的成長(zhǎng)期?狞玛。
所以,如果開始感到迷茫涧窒,至少?說(shuō)明你已走上正確的道路?心肪,比起很多剛剛接觸甚至還未接觸編程就覺得自己可以三個(gè)月成為軟件工程師的人,你已經(jīng)超越了一個(gè)階段杀狡。
可以說(shuō)蒙畴,幾乎所有的程序員都是這么過來(lái)的,包括我自己呜象。你們看到教程前幾課里的那個(gè)猜數(shù)字游戲膳凝,我剛開始學(xué)編程時(shí),做了一個(gè)多星期恭陡;大一的暑假折騰了近兩個(gè)月蹬音,才完成一個(gè)很蹩腳的黑白棋。以我的經(jīng)驗(yàn)來(lái)看休玩,這個(gè)過程甚至不只是一個(gè)達(dá)克效應(yīng)的曲線這么簡(jiǎn)單著淆,而是?無(wú)數(shù)個(gè)小的達(dá)克效應(yīng):你總是會(huì)不停地面對(duì)自信和自我懷疑?。
但?無(wú)論你的心態(tài)(縱軸)如何變化拴疤,你對(duì)于編程的認(rèn)知(橫軸)一定是增長(zhǎng)的?永部。
那么問題來(lái)了,?我們?cè)撊绾蚊鎸?duì)這種起伏呢?呐矾?
在軟件工程領(lǐng)域有個(gè)概念叫做“?迭代式開發(fā)?”苔埋。
最傳統(tǒng)的“?瀑布式開發(fā)?”是遵循?需求->設(shè)計(jì)->開發(fā)->測(cè)試?這一開發(fā)流程,每一步都完善之后進(jìn)入下一個(gè)階段蜒犯,直到最后交付成品组橄,一步到位。這看起來(lái)是個(gè)很有效的模型罚随,但實(shí)際中有太多不可預(yù)知的因素玉工,造成了大量軟件的開發(fā)失敗。
“迭代式開發(fā)”則在其基礎(chǔ)上做了改變淘菩,雖然同樣是從需求到測(cè)試這一流程遵班,但并不再是一步到位,而是把產(chǎn)品拆分成很多小版本潮改,每次迭代只需要實(shí)現(xiàn)一部分功能狭郑,之后再根據(jù)實(shí)際情況調(diào)整下一版本。如今的互聯(lián)網(wǎng)產(chǎn)品幾乎都是基于類似的迭代開發(fā)方式进陡。
迭代開發(fā)的好處顯而易見愿阐,但到了學(xué)習(xí)這件事上,很多人就還沒想通這一點(diǎn)趾疚,潛意識(shí)里還是覺得應(yīng)該一步到位缨历。你可能覺得編程學(xué)習(xí)是這樣的過程:
但其實(shí)以蕴,它更類似于這樣:
除了一開始很基本的一些語(yǔ)法外,后續(xù)的進(jìn)階內(nèi)容很少是線性發(fā)展的辛孵,通常都是多個(gè)知識(shí)點(diǎn)的結(jié)合丛肮。所以你必然會(huì)在第一次遇到某個(gè)概念時(shí)茫然。
對(duì)此魄缚,你要做的并不是尋找一個(gè)按部就班的教程(這基本不存在)宝与,而是?坦然接受這種未知,不求甚解冶匹,硬著頭皮往下看习劫。在第一次學(xué)習(xí)的迭代時(shí),去構(gòu)建整體的認(rèn)知嚼隘,勿鉆牛角尖诽里;在后續(xù)的迭代中,這些曾經(jīng)孤立的知識(shí)點(diǎn)就會(huì)在你腦中逐漸產(chǎn)生化學(xué)反應(yīng)飞蛹,形成連接谤狡。
?這是個(gè)不斷迭代的過程,也是個(gè)量變到質(zhì)變的過程卧檐。所以讓程序員去給新手講一個(gè)概念墓懂,往往很難講明白,因?yàn)檫@本身就不是通過“講解”獲得的認(rèn)知霉囚,你沒有相關(guān)的概念捕仔,?沒有前9次的迭代,不可能直接領(lǐng)悟第10次迭代的結(jié)論?佛嬉。
所以你以為的學(xué)習(xí)曲線可能是這樣:
但實(shí)際上逻澳,它更可能是這樣:
你需要不斷經(jīng)歷反復(fù)的學(xué)習(xí)闸天。大多數(shù)瓶頸期的問題暖呕,只是?因?yàn)閷W(xué)習(xí)的時(shí)長(zhǎng)還沒到位,寫的代碼還太少?苞氮。飯要一口一口吃湾揽,編程也是要一個(gè)坑一個(gè)坑地踩。但好的一方面是:?你每次的迭代學(xué)習(xí)笼吟,都會(huì)得到新的認(rèn)知?库物。
所以說(shuō)?進(jìn)階靠項(xiàng)目,目的就是通過實(shí)踐開發(fā)贷帮,把你曾經(jīng)看過的點(diǎn)都連接起來(lái)?戚揭。就像喬布斯說(shuō)的:
Conneting the dots
你在向前展望的時(shí)候不可能將這些片段串連起來(lái);你只能在回顧的時(shí)候?qū)Ⅻc(diǎn)點(diǎn)滴滴串連起來(lái)撵枢。所以你必須相信這些片段會(huì)在你未來(lái)的某一天串連起來(lái)民晒。
雖然這話說(shuō)的是人生大道理精居,但放在編程這件小事上,同樣適用潜必。
我們總是容易高估自己短期內(nèi)能做到的事情靴姿,而又低估自己長(zhǎng)期能達(dá)到的高度。
如果心態(tài)不好磁滚,急于求成佛吓,一時(shí)學(xué)不會(huì)就很容易自暴自棄。你想想看垂攘,專業(yè)的大學(xué)生再怎么不努力维雇,好歹也學(xué)了四年呢,憑什么你覺得自己三個(gè)月就能跟別人競(jìng)爭(zhēng)晒他?要是抱著這樣的心態(tài)谆沃,最后難免是21天從入門到放棄。
但說(shuō)難很難仪芒,說(shuō)簡(jiǎn)單也簡(jiǎn)單唁影。難在并不是每個(gè)人都相信時(shí)間的力量,都能在尚未看到成果的階段堅(jiān)持下來(lái)掂名,跨過絕望之谷据沈。簡(jiǎn)單在于,?只要你做得夠久饺蔑,就已經(jīng)勝過了許多人?锌介,跟什么天賦、出身都沒多大關(guān)系猾警。
學(xué)計(jì)算機(jī)不易孔祸,此路應(yīng)攜手前行。
如果你也想學(xué)計(jì)算機(jī)編程的話发皿!
可以來(lái)我專欄推薦的C/C++編程學(xué)習(xí)基地崔慧,【點(diǎn)擊進(jìn)入】!
還有免費(fèi)(零基礎(chǔ)教程穴墅,項(xiàng)目實(shí)戰(zhàn)教學(xué)視頻)惶室!? ?
涉及:游戲開發(fā)、課程設(shè)計(jì)玄货、常用軟件開發(fā)皇钞、編程基礎(chǔ)知識(shí)、黑客等等...
和志同道合的小伙伴們一起學(xué)編程吧松捉!