1. 程式人生 > >3.5 菜鳥無畏——《逆襲大學》連載

3.5 菜鳥無畏——《逆襲大學》連載

返回到【全文目錄

目錄

3.5 菜鳥無畏

我是菜鳥,我怕啥?

抄之有道

何以程式設計到嘔吐

抓緊與放鬆 

我的程式設計思路呢?

學程式設計,要記住什麼


3.5 菜鳥無畏

程式設計對絕大多數人而言,是在上大學時才正式開始的。儘管目前在初、高中都設有資訊科技課,但總是因為“高考不考”的理由而被忽略。高中的數學課中有“演算法初步”的一個模組,勢單力薄,似乎也並未在學生頭腦中留下什麼印象。

當開始進入這樣一個全新的世界時,不少人遇到了困難。在我的教學工作和課外諮詢中,大學生們會在說“我不會程式設計”前,加上各種各樣的原因作為鋪墊。“數學不好”、“邏輯思維差”、“我是女生”,林林總總。人有了自我保護的意識真是太好了,在寒風般的逆境中,總是想找一頂帳篷鑽進去,藉此能舒服一些,而不是逆風而上,快點回到真正溫暖的家中。我要做的,就是殘忍地掀開帳篷的一角,讓寒風將同學們吹得清醒一些,而不至於在這種“不冷”中凍得失去知覺,進而失去了走出的願望和力量。

一位大二的學生給我來信了,他寫道:“我的學習狀況不是很好,主要因為我是一個零基礎的計算機專業學生……”

我笑了,零基礎,一個我以前沒有聽到過的新的理由。有誰從孃胎裡出來,就有學某個專業的基礎?計算機類專業的招生沒有像藝術類那樣提前加試專業基礎,這已經是說明計算機類專業就是面向零基礎招生的。這樣的理由站不住腳,所有事情都是從零基礎開始的。

我是菜鳥,我怕啥?

初入大學的同學不容易,諸事都需要適應。中學到大學,中間的跨度不小。剛學程式設計的同學傷不起。打火、掛擋、擡離合、加油門,這套老司機習以為常的動作,對菜鳥司機就是一個坎。於是不少剛趴在門口看了看,還不知道程式設計是個啥東東的同學說:“俺就不是個程式設計的料。”

其實,何必這樣呢?不說本來就喜歡計算機的,對所有新手而言,程式設計關是一定要過的,想躲也躲不過了,坦然接受更好。菜鳥最大的資本就在於一窮二白,可以任意地想事,可以問出任意問題——將來可能自己都要發笑的問題。白手起家,無牽無掛的菜鳥,可以為學會輸出“hello world”而自豪,只要抓住一點點的陽光,就可以讓自己無限燦爛。

菜鳥的優秀品質在於敢往前衝,做事捨得下力氣。這是能夠得門而入的途徑。我和學生說:“老師將帶著你們這幫菜鳥學習飛翔。”有學生說:“我們就是個鳥蛋。”認同了自己頂多就是個菜鳥級的身份,就可以走得輕鬆一些,可以無所顧忌地投入進來,經過積累,很快就能找到起飛的跑道。在菜鳥的自我定位中,帶著一些自嘲,但也就此擺脫了不必有的心理負擔,輕裝上陣,找到讓自己夢想起飛的地方。

時下為數不少的學生只要找到一個人雲亦云,有時甚至是子虛烏有的說辭,就將自己劃到了“不學程式設計、學不會程式設計”的陣營中去。見過了太多揹著各種包袱學習的大學生,他們羽翼未豐,卻揹負著不該有的負擔,難以前行。本該是走一步看一步,摸著石頭過河的時候,卻恐懼無比,擔心承受不起想象中失敗帶來的後果,不敢前行。真也怪了,不少人真的就學不會程式設計了。四年專業學習的時光,或許在某個時刻及時回頭,能夠從頭開始。有的人,卻永遠失去了本不該丟掉的機會。

從菜鳥階段走過,每個人都會有這個時期,這真是一件令人自豪的事情。有了菜鳥無畏的向前精神,發現自己的點滴進步,自信也將逐漸而來。這種自信,是向成功邁出的第一步。相信自己能夠從零開始,唯有在這種心態下,學得一點,就是收穫,這樣走來的腳步不會沉重。既為菜鳥,要的就是這種放鬆。

抄之有道

常見有初學者在上機的時候,將教科書上的例題逐句輸入計算機進行驗證。執行得到了正確的結果:“哈哈”。結果不正確:“怎麼會這樣?!”在究竟是書中錯還是計算機錯的疑惑當中,接著輸入下一道例題。有時候,老師佈置了一道習題,編不出來,找出習題解答,用相同辦法,結果是“哈哈”,或者再次疑惑是書上錯了,還是計算機錯了。

這樣的敘述,讓本來學習就不順利的同學不舒服了。當自己編不出程式,看書找不著感覺,學習難以開啟局面的時候,將書上寫的、別人做的程式抄一抄、調一調,這是在程式設計起步的時候可以採用的一種方式。有人在介紹學程式設計的經驗時,也提到將某本經典的教材上所有題目都輸入、執行一遍,最後找到了感覺。這是一種不錯的笨辦法。

採用這種方式,一定要親自輸入,不要直接複製、貼上。輸入過程中用的是手,但也將大腦用起來了,用手敲鍵盤的動作,在大腦中建立起問題與程式碼之間的聯絡。這樣的手敲打、腦思考的過程,就是找到感覺的過程。限於學習的階段,可能還不會有目標地思考,但潛意識中一定要讓大腦充分參與。

但是,抄程式的過程,千萬不要僅限於我在上面描述的“哈哈”或者“書錯了?”的情形。那樣做的收穫,最多是練了個打字,自己對程式的感覺越來越差。程式輸入計算機後,編譯、連線、執行。能夠得到正常的執行結果,這中間一定有你細心工作的成分。有不少的人在照著書抄的過程中缺這個少那個。試想著行末少個分號,把main寫成mian,大小寫沒有區分,這樣很菜的錯誤誰都犯過。一次能抄對,充分表明了你在抄的過程中的專注,以及對這些問題已經能夠有所注意,決定了你在寫出自己的程式時也會避免這些菜鳥錯誤。所以,當結果對了,再將程式看一遍,欣賞一次。這也是找到好感覺的一個環節。

最重要的是,程式不對怎麼辦?抄不對,很正常。在不得已抄程式的階段,常見的問題一般在基本的語法層面。靜下心來,結合提示的編譯錯誤,仔細對照,有時候需要將教材中相關的知識點看一看,發現其中的問題。將程式改出來,這是一個必須要做的事,萬萬不能止於帶著滿腦子的不解,改輸別的程式去了。每改一處錯誤,就是一個收穫,直至程式正確執行。從第一個錯誤開始改起,往往錯誤有相關性,百十個錯誤常常只需要改動幾個地方就可以了。有不少的問題是共性,改一處,不用再提示也知道其他要改的地方。從錯誤中成長,在失敗中成功,這是無數過來人體會到的真理,抄程式中用好了這些錯誤提示,威力無窮。

看著滿屏的錯誤提示,首先要做到的,就是不煩不急,程式設計師就要有大將軍一般的鎮定。整合開發環境(IDE)真是我們的一個好老師。見過哪個老師為你如此嚴格地把關工作成果,詳細地一一列出問題的?只是這位嚴格的老師不懂心理學,性子也急了些,一股腦全端出來了。正如我在前面提及的,好老師就在你身邊,只是待學生去發現。作為伯樂,要將IDE這個老師用好,沒有哪個老師是完人,每個能夠獨立面對的學生都應該有這樣的胸懷。

程式執行一有錯誤就懷疑計算機出問題的,以及搞不清語法就想是IDE不對的,這是一種罪惡遷移的心態:有了成績是我的,出了問題,別人的可能性更大。然而我要遺憾地告訴讀者,幾乎所有的情況下,問題還是你自己的。程式設計師們在談戀愛中最可貴的品質就是這樣練出來的,他們問自己最多的一個問題是:“我錯在哪裡了?”他們時常告誡自己:“只要知道問題在哪裡,我一定改。”不是書上錯了,是你在什麼地方輸入錯了,不是計算機有問題了,而是你在某個地方還不明白。如此下來,必將進步。不過,如果啃不下來,不要把自己逼瘋,動用你可以利用的力量吧,老師、同學、論壇、搜尋引擎,伯樂還是要做的。在資訊時代,找不到老師,那是你自己的能力還待有提高。

不少使用抄程式學程式設計的學生止步於語法正確。抄程式是從很容易的程式開始的,不在簡單程式中入手練出找錯誤的本事,程式設計的感覺來不了。最低階的問題,就在沒有語法錯誤的虛假繁榮中一直潛伏著。止步於語法正確,就是一種掩耳盜鈴的做法。這樣一種做法,將本不該一直依賴抄程式的做法一直保持下去,將本該是程式入門的學習,完全地成為了練打字的過程。等到要編寫複雜程式了還得依靠抄程式,這樣的學習歷程和學習感受堪憂。

語法問題只是表面,最難辦的是執行錯誤和邏輯錯誤。這也是在程式設計序的時候我們面臨的最大挑戰。這要靠在實踐中鍛鍊自己的邏輯思維能力,運用好各種除錯工具和除錯手段。現在面向初學者的教材和大學的課堂裡,對除錯缺乏必要的重視。初學者要及早通過各種途徑主動掌握除錯工具。

語法正確了,執行正確了,圓滿了嗎?No!儘管很多人的抄程式之旅就此結束。抄完了程式,將參考資料放到一邊,再將程式自己寫出來——可以是手寫到紙上,也可以是直接輸入到計算機中。在寫出來的過程中,一塊一塊,而不是一句一句地回憶,不必追求一模一樣,但求思路跟上。當再次完成時,這個程式就是你的了。如果寫不出來,說明前面抄程式的體會還不到,翻開參考再讀一讀,直至自己能寫出來為止。有同學拿出了應付高考的利器,一咬牙:我把程式背下來!哎呀親呀,趕緊省一省,這個辦法笨到家了,壞透頂了,千萬別試。

再將程式自己寫出來,是抄程式學程式設計的最後一個環節。這個環節是我們的目標所在,體現的是自己真正的進步。不去實施這一步,前面所費周折的收益大減。有人講了:“好不容易有了正確的執行結果,已經是頭昏腦漲了,你這賀老師害人不償命怎地?”誰讓你硬撐著了?該休息該活動隨你去,只是,需要再有個時間,將程式自己再寫出來。如果真能冷一冷再重做,效果還更好。

抄程式的學習方式,只是一種適合起步的做法。抄程式,排除語法錯誤,解決邏輯錯誤,再將程式寫出來。這樣做了,是抄之有道,將使你儘快地走到不抄的道路上去。在以後偶爾也抄一個,但逐漸地就能自己去寫。如果將自己僅當作了打字員,可能抄完了幾十個程式,還是起不了步。抄程式解決的是程式設計序的感覺問題,突破的是起步難的困境。很多問題,回頭看並不是什麼大事,只是有一層“窗戶紙”隔開了兩邊。面對“窗戶紙”,捅破了,就好了。

有些同學對程式設計一開始就有感覺,這實在是一件慶幸的事。起步階段抄點程式也很正常,對某些同學來說是有效的。要抄之有法,抄之有道。要是抄程式久了還得抄,一定要想著抄中的不得法,要改變方法。抄是手段,不是目的。要抄得智慧,抄出精彩,抄出風采來。

何以程式設計到嘔吐

和大一的Y同學談心。她痛苦地告訴我:“調程式就噁心,有兩次坐在計算機前超過兩小時,都嘔吐了。”她的這個問題把我嚇了一跳。我也真為她難過。不說她目前程式設計還有些困難,調程式就噁心,日子怎麼過?

懷著想幫她解決問題的願望,再多瞭解一些,我知道問題可能就壞在了“程式設計有些困難”上,並且壞在了她有一種要改變現狀的強烈願望。當面對bug,她總是告訴自己,我真差,但我不能退縮。我和她分析,如果不出意外,這是由心理導致的生理問題。

有不少學生,尤其中考生、高考生快到考試的時候,出現了腹痛、腹脹之類的生理反應,到醫院去檢查卻往往沒有任何生理上的指標異常。這種情況完全是由於焦慮緊張的情緒引發的,其中多數是由於家庭或個人對考試的期望值過高。

在程式設計起步時出現困難,這是很正常的事。一些人很快地適應了,走上了辛苦而又快樂的學習道路。一些人仍在堅持著,等待適應的那一天。每個人的內心不一樣,有人告訴自己,我一定會進步,更幸運的是,他或她能敏感地發現自己哪怕一丁點的進步,為之歡欣鼓舞,這樣的同學遲早會找到樂趣。也有人不看自己的進步,反倒是一再地和自己對話:怎麼這麼難,真煩人!什麼時候才能做完?我什麼時候才能學會?這種負面心理,讓自己一直生活在陰暗之中,不僅程式設計學不好,生活狀態可能也會陷入困境。

對於Y同學,她的心理暗示恰好就是負面的。有一天她告訴自己,調程式真噁心。再有一天又這樣想了一遍,在逐漸強化中,終於,有一天,忍不住吐了。

我給她了一些建議。

給自己正面的暗示,有意識地看到自己的進步,多花些時間,欣賞自己做出來的程式,而不是一做完看到結果正確了,趕緊逃離這個“惡魔”。再程式設計時將“噁心”的念頭放到一邊,取而代之的是想一些愉快的事。作為視覺型學習者,我不贊成學習時聽音樂。但她處在這種情況下,可以試一試一心二用,用聽音樂之心,聽音樂獲得的歡娛,壓制那個邪惡的念頭,用另一心完成程式設計。這一招叫“轉移意念法”

程式設計時,不要持續時間太久。其實對於沒有這種問題的同學也一樣,至少一個小時活動一下,利用三五分鐘隨便走動一下,不要連續坐在那裡兩小時以上。而對Y同學,半小時放鬆一下,也不失為暫時的積極應對。這樣,負面的感覺不會積累起來,謂之“分而化之法”

胃病病人一般要少吃多餐,Y同學也可以每次少學一些,換個其他事情做,然後再做程式設計的工作,也就是學習的次數增加,每次的量要減少。這是程式設計中的“少吃多餐法”

上機調程式之前,先做好“功課”。把要做的程式先在草稿紙上寫好,通過看書將基本原理搞明白,不用電腦,而用“人腦”將自己寫的程式執行好,這樣可以減少在計算機前調程式的時間。再者,一出手,就差不多了,這種更成功的體驗也有利於早日解決這一問題。詩人常說“功夫在詩外”,學程式設計可以講“功夫不在電腦前”。這在我們那個計算機奇缺的年代不是沒有用過。這可以稱之為“圍魏救趙法”

解鈴還需繫鈴人,“程式設計困難”引起了“噁心嘔吐”,需要用提高自己的程式設計能力的手段去解決。只有這樣才能夠擺脫折磨,獲得自信、獲得興趣,獲得愉悅,最終成功地渡過這一難關。

有心魔,就想辦法去克服。但心魔往往都是自己招來的。學習中的投入是前提,但是方式可以靈活些,策略可以多樣些,時刻找到讓自己積極的暗示。學習中有了這種好的感受,學習就是件快樂的事,好的學習效果何愁不來?

抓緊與放鬆 

又一名“親”學生給我發來一封信,標題為“救命”。

從開學到現在也有兩個多月了,學習C++,一開始覺得很有意思,也覺得能學好C++是一件值得驕傲的事。可是,不知怎麼的,腳步慢下來了,總感覺自己有好多東西都不會,看到舍友發了一篇又一篇博文(注:我要求學生編完一個程式,就發一篇博文),很是羨慕,但同時又有了好大的壓力,看到自己沒做的作業,心裡越是著急,想快點做完,越是編不出程式,這就成了一個惡性迴圈,感覺自己與大家的距離越來越遠。我好好看書,也向同學請教,當時明白了,可是一上機,卻不知道用什麼語句,上機時也不知道編什麼好,編一個半路出錯,再編一個還是半路出錯,時間就這麼浪費了,兩節課也做不了多少程式。老師,我該怎麼辦呢?我好想和他們一樣,能又快又好地做出程式,請老師指路。

以為真要出人命的我,趕緊回覆。

你的一聲“救命”,嚇死為師了。你的來信中,通篇看到的就是急躁,這樣一個心態讓自己沉不下來,進而更急。在任何時候,我們需要忌諱“比”字,不要總將自己與別人比,覺得比別人差,比別人慢,對你無益;覺得比人強,沾沾自喜,有意思麼?人各有別,怎能一樣?如果要比,是一定要和自己比。回顧一下兩月前,你的進步有多大!昨天還在受困於見了迴圈就讓人眼暈;而今天,學了函式,寫出了好多個模組,完成一個整體的功能。漂亮的程式結構,你可以為之自豪!上機時也不知道編什麼好?我佈置的任務不是要做的嗎?看書中遇到的疑惑是否可以通過自編一個小程式去體驗?是否可以根據做過的題目改進一下需求,或者換一種解法?

“編一個半路出錯”,不出錯正常嗎?自己的理解和本來的樣子之間有偏差正常,但在不斷推進中,我們的學習一直在向著掌握知識的方向有效行進。出現錯誤是我們最好的進步機會,是我們的朋友,而你將之視為敵人。程式設計序的過程,就是和這位朋友一起共同成長的過程。換種立場看問題,海闊天空,曾經感覺的“有意思”和“驕傲”仍然在。只是,你不近他,他不理你。在這期間,無論做得多慢,時間並不是浪費的。你可能看到了有些同學的快,你沒有看到他們在背後的投入,每個人都需要一個過程,有人可以在努力一段時間後,快速地找到感覺,有人時間會長些;有人太急了,反倒是感覺遲遲不來。太過於急躁,感覺有可能永遠不會來。

所以,沉下心來,抓緊,也要放鬆,你會找到感覺,會學出精彩。這需要自己有個調整。

據我觀察,你已經開了個好頭,鬆了兩週,但目前還不算跑偏太多。本來均勻發力即可,對你而言,可能真的需要在近期多投入一些,在程式碼的海洋中多打兩個滾,就能回到正軌。

我的程式設計思路呢?

一名計算機專業大二的學生給我來信說,他覺得程式設計難,卻還在堅持學習,並且提出了疑惑:

我現在在做一系列C語言競賽中的一些容易的題目,可是我發現我碰到的問題會很沒有思路,不知道方向,看見網上的很多同學都能夠解決,而我卻不能,我不知道自己差到哪了,我不知道怎麼辦才好,都有很多中學生的水平都比我這個大學生的水平要高,我真的不知道,那些未上大學就已經在程式設計方面很牛的同學是怎麼做的,我感覺計算機這條路走的好難!

這種情況太常見了。程式設計初學者常常陷入一種無奈:我一看書就懂,合上書就不會了。看別人的程式能看懂,要是自己編,沒思路。在這種無奈中,放不鬆,抓不緊,感受很差勁。我在前文介紹過有層次地設計,那些方法需要沉下心來運用和體會,但在我的教學中發現,我給同學通過一個例子講明白了方法,但是離開了這一個問題,同學們卻不主動用這樣的思維和步驟去解決另外的問題。似乎習慣了題海戰術之後,並不講究方法的遷移。站在老師的角度吐槽這個事情,提醒同學們需要注意知識的關聯,需要主動應用老師介紹過的方法。

對於來信的同學,顯然還有其他方面的問題。我嘗試給出一些建議:

遇到問題沒有思路?你提的籠統,實際上有時也真說不清思路應該從何而來,其中到底難在什麼地方。我也就一些猜測與你共享,但願有一條適合你,給你啟發。

1. 人常說,見多識廣。是不是見得還不夠?凡事都要個積累,量變才能達到質變。此時知道自己的做法是對的,平靜一些,做下去即可。

2. 在教育、學習中有個非常響亮的詞,舉一反三。反思在做過一道題以後是做完就將之放過去了,還是總結從這道解題中運用了哪些知識、技能?是否需要在做完若干道題目後將之瀏覽一遍悟一悟了?動手是表現形式,更深層的是要思考,是動腦。這樣,做一道題目,可以獲得解答同類問題的啟示。

3. 常說理論要聯絡實際,其實,在實踐中也需要有理論的支援。有些理論,你以後會學到。在目前的階段,建議你能看一些通俗點的演算法書,結合你要做的競賽類的題目,可以看競賽輔導類的書。前人總結好的什麼窮舉法、迭代法、回溯法之類的,會對你有幫助。

隨著進展,你的感覺會變好。從信中,我不擔心你現在做題不順,而是擔心你的心態,有天要給自己找個“我不行,我沒興趣了”之類的藉口而不再堅持到你嚮往的那一刻。急,急了後就去比,比的結果是讓人喪氣。看到與人的差距,設定了自己的目標,上路就行。在行進中,不再多想。起步本來就晚,速度還沒有提起來,你就老看著比你先起步的,速度還比你快的,這是自找不愉快。如果要比,比自己,做題目比以前快了,寫的程式比以前長了,解決的問題比以前難了,你會看到自己的進步,享受其中的樂趣。想想龜兔賽跑中龜的堅持和自我吧,當然咱不是那龜速,它是本來就跑不快,咱只是起步晚,速度還沒有上來而已,咱做的是加速運動,甚至加速度在遞增,是加加速運動。踏實地走在路上,不急不躁。

人和人不能比。看到這句話不要洩氣。每個人有先天的一些因素,成長的環境、過程、機遇各不相同。有時,是你本來有天賦的領域也還來不及啟用。著眼向前看,讓自己的前行更愉快些。其實,你只要平穩上路了,進步了,水平低但主動和牛人同學一起共事、學習,他對你的影響,會成為你的前行的助推劑,你會成為他們中的一員。從大學四年的角度,他們的最大的優勢不是現在已經掌握的知識,而是為之投入的興趣,和在這一領域深入學習的行動。對你來說最大的隱患是,在起步階段由於對自己的否定,看不到自己的進步,從而不能堅決地前行。

最後建議找些同學和你搭伴學。起點差不多,水平差不多,想法也一致的同學,做同樣的題,遇到類似的問題,一商量,一討論,done。可以按我對我的學生的要求,建一個技術部落格,記錄自己的成長。找到一些同樣在做程式設計題的博友,看他的程式,給他評論,回頭他也會投桃報李,網路上的互幫互助也就有了。

你並不差,只是缺少積累,時候未到。只要願意往前走,辦法總比困難多,輕快一些往前走吧。

學程式設計,要記住什麼

有同學疑惑,學程式設計要記住的東西太多了,怎麼才能記下來?在考完試閱卷中我也常能發現,有些同學的程式設計題是靠“背”程式完成的。在驢脣不對馬嘴的回答中,卷面上依稀就是書中某道例題的影子。我的一位女學生在博文寫學習心得:“雖然有些還是不太明白,但是先把這程式背下來了,相信會慢慢懂得。”

在有些同學的心目中,對“背會程式”給予了很高的重視。這個方法有大大的不妥,但從中表現出的渴望獲得突破的精神自然要給予好評。我在部落格上給這位努力的同學留言:“本週表現出色!希望你所說‘把程式背下來’不是我理解的死記硬背,而是成塊地看,關鍵的語法點和原理能與課堂講的、書上寫的對應得上。”

在突破中力求改變,沒有巧勁用笨力,這種精神咱可以有。

看著有些高手們嫻熟地敲出程式,好羨慕,這些從指尖自然流出的程式碼,究竟是從何而來?遺憾地告訴採用了笨辦法的同學,這些東西不是通過背書而來的,套用賣油老漢的話,是“唯手熟爾”。和賣油老漢不同的是,程式設計要用腦子,程式設計也要有靈感。只是靈感何時能來因人而異,而靈感未到之時,就要靠積累。程式設計序多了,靈感也就有了,遇到要解決的問題,腦筋一轉,方案自然出現,寫出程式成為自然。

用背書的方法學程式設計,是用應試的方法學習和備考的一個典型反面案例。一個人的記憶力再好,能背會多少程式?工作中要解決的問題,豈是書本中的例題能夠涵蓋的?日新月異的IT業創新多多,背會了再多的程式,究竟能幹些什麼?用背書的方法學程式設計,無疑是鑽了死衚衕。

在學習中文、英語這樣的自然語言時,需要記憶一些文章,是為了找到和積累語感。對於很多美文,經過記憶後,文章中的表達方法慢慢成為自己表達的習慣,各種表達方式,藉此能夠自然流露。高中時某些科目中的強記,是一種完全低階的考證方式和學習方法的結合,並不值得再繼續。到了學習程式設計的時期,要明確程式是用於解決問題的。一個問題有多種解決辦法,有了解決方案,程式自然能寫出來。用背程式的方法,就是不追求方案之根本,偏索要表達之末節。

程式設計中最重要的環節不是實現,不是用語言表達出來。程式設計序的關鍵在設計。寫不出程式,往往是在設計環節上出了問題。試圖在用語言表達的層面上記住,實則掩蓋住了在思維上的不足,使得程式設計最核心的問題久拖得不到解決。有些人背過了一個程式,問題稍加變化,就不會解決,還是不能做到靈活應用。

有同學要問:“程式設計語言中的各種關鍵詞、語法規則也不需要背會嗎?”其實,對於一個程式語言來說,關鍵詞一般最多也就幾十個,在英語當中屬於常用詞,其意義和自然語言並無太大的差別,而程式語言的語法規則死板且有限,只要經過實踐,可以做到不記而記。有人說一個程式中出現的詞太多了,細問之下發現他將變數名、函式名等可以自由命名的識別符號也當成不能改變的成分了,如此背過的程式只能是死水一潭。

在程式設計師的工作當中,記住程式碼毫無價值,只會成為同行的笑料。在實際工作中,遇到問題可以隨時查手冊,且很多人習慣使用線上資源。開發中引入的軟體包倒是需要知道大量的庫函式及其呼叫格式,有整合開發環境中“程式碼自動完成”等功能的支援,還可以查詢線上的參考資料,這些根本不是個事。在ACM競賽等面向大學生的程式設計大賽中,規則是可以帶上你想帶的任意紙質資料,很多參賽隊都準備著非常實用的“程式碼庫”。

那麼,不背程式,程式設計的考試能通過嗎?有人背會了程式,在很少的情況下押題成功,撞了運氣。但是,學會程式設計的目標沒有解決,這個分數只是問題的遮羞布而已。有些在答題時用背會的程式生搬硬套,只會出現驢脣不對馬嘴的笑話。真正掌握了程式設計,而不是背會了程式的同學,無論怎麼考試,題型怎麼變化,面對這個年代大學的考試,隨便就是高分。我倒是真願意取消程式設計的筆試,這或許才能真正抽去了企圖背程式的同學的“絕招”,才能讓他們添置新的“裝備”,改變學習的思路。

在學習程式設計時,遇到了再大的困難,也不要把自己交給死記硬背。我們知道,學過的和做過的東西,會在大腦中形成記憶,這是從實踐中得來的記憶。這些記憶加入了自己的體驗,在多方對照中形成了知識和體驗的交織,成為了更為可靠的知識。這些鮮活的知識具有強大的再生能力,當遇到類似的問題時,會自動由大腦調動起來,形成解決新問題的方案。在持續的實踐中,這些知識會不斷體驗,學與習的反覆互動,不背而記。這就是我們要的境界,也是我們追求的自由。

安排出有效的實踐,習、學結合,學會讀程式碼,學會除錯的手段,有勇氣往前衝一衝,自然會獲得這些能力。拿出有效的方法突破瓶頸,讓背程式永遠成為歷史吧。

返回到【全文目錄