① 程序員是不是手藝人的一種
編程不是一種知識,而是一門手藝。
我們從小到大的學習都是學習知識,流程一般是課前看書預習,上課聽講,下課做作業,然後復習考試。但是學手藝可不是這么學的。
我們先拿游泳舉例,游泳不是知識,而是技能,也可以算門手藝吧。
需要預習嗎?需要上課聽講嗎?不需要,因為兩歲小孩都能學會游泳,他們連話都不太會說呢,怎麼可能聽課預習呢。游泳是通過在水裡的練習,教練手把手地傳授動作,一點一點提高熟練度學會的。
我們再來看看彈琴,學鋼琴一定要有鋼琴,音樂基礎知識也是老師在練琴間隙傳授的,並且一定會結合練習,另外練琴時間是很重要的,必須保證一定的練習量,有些理想遠大的琴童練琴時間可以用慘無人道喪心病狂來形容。
千萬別把編程看作知識,計算機科學是知識,但是編程是手藝。
既然是手藝就要用學手藝的思路去學習。
以動手練習為主,看書學習為輔,甚至極端點,初學的時候除了看必要的文檔都可以不看書,等有了一定編程基礎後再去看書,看完書立刻動手編程去驗證書上的理論知識。
練習一定要循序漸進,把手藝分解成幾個簡單的動作,反復練習直到熟練,然後再把基本動作組合起來練習直到熟練。拿C語言舉例,比如從認真寫好一個Hello world開始,然後去熟悉 if for while 等基本關鍵字,然後熟悉字元串操作,內存操作,練習查找 排序 二叉樹等基本演算法數據結構,然後學習一個小型Framework。。。。
找個師傅,手藝的一大特點就是自學是很慢的,而且容易走彎路,而有人手把手教要快得多,手藝有很多細節,實際操作經驗,需要去體會感受的東西,這些細節書上基本不會有。
堅持做大量的練習,以代碼行數為例,每年50000行左右是比較一般的練習量,有毅力的話可以挑戰10萬行。(有人說代碼行數不代表什麼,行數多不見得程序就對,寫得好的程序代碼很少blablabla,滾,去跟朗朗說去,告訴他其實不用練那麼長時間琴。)
回憶下自己當年是怎麼學會騎自行車,學會游泳,學會打籃球的,按照那個思路去學編程,而不是用你學大學課程的思路去學編程。
當你還是一個新手的時候,你需要瘋狂的積累你的代碼量,你可以從基本的問題出發,做一些簡單的問題,怎麼輸入數據,怎麼輸出數據,然後熟悉各種數據結構,各種常見演算法,瘋狂的刷題。