其實很多人學編程都會遇到困難,我覺得其中一個根本原因是他們沒搞明白學編程到底是學什么。
編程不是一種知識,而是一門手藝。
我們從小到大的學習都是學習知識,流程一般是課前看書預習,上課聽講,下課做作業,然后復習考試。但是學手藝可不是這么學的。
我們先拿游泳舉例,游泳不是知識,而是技能,也可以算門手藝吧。
需要預習嗎?需要上課聽講嗎?不需要,因為兩歲小孩都能學會游泳,他們連話都不太會說呢,怎么可能聽課預習呢。游泳是通過在水里的練習,教練手把手地傳授動作,一點一點提高熟練度學會的。
我們再來看看彈琴,學鋼琴一定要有鋼琴,音樂基礎知識也是老師在練琴間隙傳授的,並且一定會結合練習,另外練琴時間是很重要的,必須保證一定的練習量,有些理想遠大的琴童練琴時間可以用慘無人道喪心病狂來形容。
千萬別把編程看作知識,計算機科學是知識,但是編程是手藝。
既然是手藝就要用學手藝的思路去學習。
以動手練習為主,看書學習為輔,甚至極端點,初學的時候除了看必要的文檔都可以不看書,等有了一定編程基礎后再去看書,看完書立刻動手編程去驗證書上的理論知識。
練習一定要循序漸進,把手藝分解成幾個簡單的動作,反復練習直到熟練,然后再把基本動作組合起來練習直到熟練。拿C語言舉例,比如從認真寫好一個Hello world開始,然后去熟悉 if for while 等基本關鍵字,然后熟悉字符串操作,內存操作,練習查找 排序 二叉樹等基本算法數據結構,然后學習一個小型Framework。。。。
找個師傅,手藝的一大特點就是自學是很慢的,而且容易走彎路,而有人手把手教要快得多,手藝有很多細節,實際操作經驗,需要去體會感受的東西,這些細節書上基本不會有。
堅持做大量的練習,以代碼行數為例,每年50000行左右是比較一般的練習量,有毅力的話可以挑戰10萬行。(有人說代碼行數不代表什么,行數多不見得程序就對,寫得好的程序代碼很少blablabla,滾,去跟朗朗說去,告訴他其實不用練那么長時間琴。)
回憶下自己當年是怎么學會騎自行車,學會游泳,學會打籃球的,按照那個思路去學編程,而不是用你學大學課程的思路去學編程。
記住,編程是手藝,不是知識。
======
最后再強調下,對編程能力本質最好的比喻就是彈琴。但是有了編程能力還不能算優秀的程序員,優秀的程序員是作曲家,他們不僅能想出優美的旋律,並且能彈奏出來,就像優秀的程序員不僅能想出優美的算法架構,而且能把它變成可執行代碼。你很難想像作曲的人不會任何樂器。
很多人的問題是想當作曲家卻不肯下功夫去練琴。
打個預防針,估計有人會舉出反例說我就知道某某某作曲家不會樂器(其實真的有)。
我要說的是,等你成了公認的著名作曲家之后再說自己不會樂器,那你牛逼。
在成名之前就這么說那是煞筆。
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">