“敲程式碼”學程式設計的正確方式
【來信】
老師您好!我自學程式設計的,我想向您諮詢一下,關於敲程式碼的方法!
第一:我先理解書上、視訊的原始碼,然後根據自己對原始碼的理解,然後把程式碼的思路寫下來,然後自己這個思路把程式碼敲出來,當我自己不懂的時候,再返回去看原始碼!
第二:理解書、視訊的原始碼,完全照抄一篇。
我很長一段時間是使用第一種方法,但是我覺得好累啊!學得很慢,當我遇到一些難以理解的程式碼而且200多行的程式碼的時候,我感覺我雖然理解了程式碼,但是要我完全敲出來,總是會出錯,當我全部功能實現之後,要花很長時間!我不知道我自己的這種方法是不是有問題,身邊我也沒有人可以請教!所以我想向您諮詢一下這個問題!
【回覆】
很感動你的執著。初學遇上困難很正常,這一關過了,就可以迎接下一關的挑戰了,不斷過關,讓自己的知識和能力上到新的高度,有辛苦,但是其樂無窮。
從你描述的學法上,我先做些點評。
“理解書、視訊的原始碼,完全照抄一篇(遍?)”這個時期,我覺得不要照抄。“敲程式碼”靠的不是手指頭,靠的是大腦。你首先要做的是閱讀程式,深度的閱讀。並且在讀的時候,不要一下鑽到細節中,先看結構。要解決的問題大致是清楚的,於是,程式有幾大塊,每塊的任務是什麼(你會發現,最巨集觀的,無非就是“輸入-處理-輸出”三塊),然後再分解每一塊。對十來行程式碼的程式這樣閱讀,等閱讀200行,甚至2000行的程式時,這種思維就形成了,再不會被其中某個語法上的小疑惑困住了。照抄一遍會讓你直接進入細節,忽視了結構,不利於你形成自己解決問題的能力。
基於上面所說的閱讀,在理解後,自己寫程式碼。這時候,思路不清時,想結構,語法不清時,看語法即可。若寫出了和原始碼不一樣的程式,完全正常,不要追求一模一樣。只要知道自己思路清楚,表達正確就可以了,甚至,在思路上、表達上和原始碼不一樣,是件更好的事。當自己寫得過程中糊塗了,有必要再回去看原始碼時,我也希望你能清晰地知道,是去發現思路(結構)上的問題,還是語法上的問題。語法上的問題,也完全可以去看有關的知識點,而不是原始碼。
進入一個新領域學習,總是初時要慢。要學知識本身,還要學方法。從長遠看,接受自己的慢起步。在做簡單題的階段,以及現在已經學一段時間後,可以回頭再看,嘗試一題多解(用多種思路/結構)和一義多表(同樣的思路,用多種語法結構描述,如一段分支結構的邏輯,用if-else語句、switch語句、?:運算分別表示)的方式做一做,你學得東西就“活”了。
以上是對你提問題的直接回答。
再多說點。
程式設計初學者,我特指學第一門程式語言的同學,感覺到的起步難就是源於兩個方面:語言本身和解題思路。解決一個問題,兩方面的能力都需要,但刻意地將這兩個方面學著分開一些。初學做小專案時是這樣,實際上,到成為高手後,做大專案、大工程,必然也是這樣的,並且做巨集觀設計的人和最終用程式語言實現的人甚至不是一個部門的。閱讀程式是學習過程中很重要的手段,先掌握結構,必要時將重點的語法部分再看一看,沒必要時就不看了,用自己覺得更自然的語句去表達。而在寫程式時,先將結構想清楚,甚至寫出來(畫流程圖,或者就在原始碼中,用註釋的方式標出來,以便後續填空),再考慮用什麼樣的語句表達。
在學習過程中,注意一下及時總結。其實初學時,從語法角度,無非就是一些語句、表示式;從結構角度,順序、分支、迴圈三種控制結構,再加上模組化程式設計機制等;從資料結構角度,簡單變數到陣列再到結構體等。學一段時間,將這些成份,以及它們之間的關係,在腦子中從巨集觀上織一織網,漸次再想到細節,你就不會被各種表象困擾了。
就說這些。祝你學習順利,也相信你能渡過難關。