1. 程式人生 > >轉:自己的大腦要有一個程式設計的思維,新手必看

轉:自己的大腦要有一個程式設計的思維,新手必看

自己的大腦要有一個程式設計的思維
2009-10-16 13:22 5637人閱讀 評論(89) 收藏 舉報
作者:如鵬網 59362008 原帖地址:http://www.rupeng.com/forum/thread-4811-1-1.html

這篇文章,是寫給進入程式設計大門但卻突然發現除了有激情剩下的都是迷茫新手,請保持你們的激情,那是最純粹的動力。
也希望你們在以後的學習過程中,能不走彎路。 記住,機會總是有的,但你要先堅持住。

一把剪刀 在有的人手裡,他只能把一張完美的紙剪得體無完膚,但是在剪紙藝術家手裡,卻能妙筆生花般的剪出無與倫比的窗花,
那把剪刀 就是程式語言(不僅僅是C),剪紙藝術家就好比是得道的程式設計大師,而那個不幸的可憐人,就是還沒意識到自己處境的人(是不是你呢。)

-------回想一下,你用多長時間學會了用剪刀。-------
有一個人問我,學會一門語言需要多長時間。,我給他一個答案,就是我學會C語言所用的時間,3天。(我學的是機械,學C完全是愛好)
第一天,到新華書店買一本《C語言程式設計》,回家,放在床上,接著去玩CF。
第二天,把目錄,編者寄語看完了。繼續CF。
第三天,把整本書一頁一頁看完了。並做了筆記。我就是怎麼學習C語言的。

這就是我學C語言的全過程。有人笑了,
好,現在你問我關於C的問題,int是什麼。 指標是什麼。 我都可以精準的回答你,如果你又問,書裡面的漢諾塔問題不用遞迴怎麼解決。 怎麼編寫一款試圖軟體。
我回答,我不會。
你不說你已經會C了麼。 我反問 ,你提的問題是C的問題麼。這些問題只可以用C解決麼。很顯然,不是。
舉個例子,還是上面的,所有人都清楚剪刀的構造,都會用剪刀,但不是所有人都可以剪除完美的窗花。
你問的int是什麼。。 指標是什麼。 就好比問我,剪刀是有什麼構成的。這誰不知道。 但你問我你能編寫一款檢視軟體麼。 就好比問我,
你會剪窗花麼。 我當然回答,不會。
學習C語言,只要把基本語法搞懂了,理解關鍵字含義就行了,甚至不必去記它。 它又不會丟,它就在書上,忘了就去看就行了。怎麼學C語言。就這樣學。
C(程式語言)只是一種工具。。就好比是一把剪刀。剪刀是拿來用的,不是用來研究的,不過很遺憾,有很多人至今還在研究剪刀。
我最終要學習的是方法,不是C本身。學習C本身只是其中很小的一個階段。

------你是怎麼用剪刀撿東西的。-----
那個人又問我,為什麼我看書上的例子都懂。怎麼我就寫不出程式呢。就不知道如何下手。
舉個例子,很好,你會用剪刀了,下面就跟著大師一起一步一步的去剪窗花了,大師剪完了,你也剪完了。然後大師說,你自己再剪一個給我看看。你突然蒙了,忘了大師是從那一刀入口的。把握不住問題關鍵的切入點。根本不會設計演算法。
書上的程式很容易就看懂了。這是作者有意這樣做的,但他真正的目的不是讓你看懂程式。而是讓你學習他的方法。什麼方法。找問題切入點的方法。(就是分析從哪下手,從這下手後如何設計演算法的方法)
書上每到例題的解答前面一定有這樣一段話“我們可以這樣做…”,“這樣做”就是作者思考的全過程,也是作者找切入點的全過程。你們讀書的時候注意到了麼。這就是多讀。
如果你能這麼想,那這個問題你就明白一半了,怎麼還有另一半。 對,就是去寫程式。這就是多做。
能找到切入點了,也能畫N-S圖了,下面就去瘋狂的寫程式吧。久而久之,你就會發現,當一個問題擺在我面前時,我就有種“他可以被解決的”的感覺。
這種感覺,就是你解決問題的切入點。

-----你用剪刀都剪了些什麼。------
那個人又問(老是他 - -。),我也寫出程式了,問什麼老是出錯。。或者一個問題解決了,突然發現有冒出一個新問題。
還是上面那個例子,有的人剪得窗花真是好看,但有的人剪出來而的… 我們姑且也把它叫做窗花吧 - -。為什麼差距這麼大。
同一個問題,別人寫的程式簡潔,高效。為什麼我寫的那麼冗長,就像“蓋”長城。
回過頭來看看,你在第二個問題裡面都做了些什麼。 多看題,多做題,沒錯。

但你看的都是什麼題。
你明白你眼前的程式出自誰手麼。
網路上可以搜到很多經典程式,但這些程式的“經典”往往只是特定指向某方面的,哪方面。和他問題有關的那方面。就是演算法的經典,但是格式,往往不“經典”。
比如你在寫程式時候,還會用到 int i;? 如果用到了,那就是你還沒有好的風格,習慣。定義要有實際的名字。這樣可以減輕你思維的負擔,如果i 代表總和,就應該寫上 int sum;
當然,還有程式碼的編寫規範,都要注意。(這樣不會因為你的疏忽而造成語法錯誤或書寫錯誤)
做的都是什麼程式。
舉個例子,你正在做一道題 求 1+3+5+7+… 恩 ,解決了,然後,你又拿起了另一道題開始攻堅 求2+4+6+8… - -。
你也在用工的做題,但你一直在做無用功。 要學會舉一反三,做大的節約自己的時間與精力,程式設計是很辛苦的。沒有這麼多時間來浪費。借如鵬網的話就是 一通百通。

當你在看題的時候,你在想什麼。
當你拿到一些經典的程式並讀完他時。會過頭來,想一想,你從中得到了什麼。就像前面讀課本里的題目時,你有沒有注意作者在例題前面寫的思考過程。
現在,沒有作者的思考過程給你讀,你要自己去理解,去感悟,去極力的把自己想象成這個程式的作者,如果是我,我會怎麼做,這個作者有是怎麼做的,問什麼這樣做。
對有些人來說,很痛苦的過程。但對有些人來說,這是樂趣。就看你自己怎麼想了。
你是如何做題的。
看了很多程式,看了很多經典,當你開始解決一個問題的時候,你有沒有把這些經典應用進去。或者你有沒有想到用這些經典。
你能不能發現比這個經典更經典的演算法。
這就是個人的能力,絕不是單單做題,看題,看經典能解決的。要從方方面面做起。

相信新人看了上面的問題,應該對程式設計有了一個感性的認識,應該不會太迷茫了吧,這也只是我個人的觀點,可能不太正確。但也算一點經驗,歡迎參考。
如果有什麼不同意見,歡迎指出

文章總結
這是一篇本人非常喜歡的文章,偶然間看到,深受啟發,類比的很到位

  1. 熟練掌握語言基礎,掌握工具的基本使用方法(“使用剪刀”)
  2. 重點思考解決問題的切入點,化繁為簡(“自我創新或模仿經典,都要認真先思考從哪裡剪的問題”)
  3. 多練,多思考,多總結(“剪多了,思路就開闊,要多總結多優化,進一步提高效率,且追究求更完美的作品”)