概念第一

接前兩篇:

  • 成為碼魔的三條路

  • 一場風花雪月的自學

這一篇說編程學習重心的問題,這非常重要。

哥上大學那會迷上編程,去學C++,一本C++ Primer翻了四分之一,倍感艱難,於是給Bjarne Stroustrup(C++的作者)寫了郵件,問如何是好。

大俠居然回了:

Focus on concepts,not syntax.

關注概念的理解,而不是語法。

我得到的最重要的建議之一。

在國內國外的團隊里工作過後,我發現國內外程序員的一個重要區別是對概念本質的理解。我們看到的國外的同行往往對東西鑽得深、透,而國內的同學往往停留在簡單會用的程度,只看到一個概念的若干個側面而不是全面,這就像他們在知乎點贊,大概感覺這人貌似挺厲害,貌似說得有道理,字數也比較多,贊一個,而具體說了什麼,他只是瞄了幾眼。而編程的智慧根植於人對概念體系的領悟,就像厲害的劍客一定知道所持兵器的長短、重量,屬性,經過反覆訓練,習得運用之妙,存乎一心,活學活用的本事,到達人劍合一的境界。對於編程,這種本事到最後就是從業者的技術品位,以及創造性解決問題的能力。所以技術上的創新其實並不是來自於對於廣大技術棧的簡單搜刮,而是對於各個棧的深刻理解。

這麼多年來,每當我要學新的東西,無論是看視頻,在REPL里試驗,還是看別人的代碼,我都試圖把關鍵概念找出來,停下來,通過消化各種不同層次,不同深度的資料,努力讓他們在頭腦中形成明確的理解。所有的示例,反例,訓練,以及所有照貓畫虎的過程,最終都是為了理解概念本身,理解它是什麼,不是什麼,到底是如何工作的。而示例,反例,訓練的具體性,並不是學習的重點,因為項目和場景是無窮無盡的。

理解一個概念以後,代碼看過去變得有層次了,更有機了,而不是簡單一行行字元的簡單疊加,因為那時候你看到的不是代碼本身,而是讀到了代碼的意義,那是柳暗花明的感覺。而這個理解探索的過程,不僅教會了你技術細節在具體事例中的運用,更重要的是初步的架構能力,用技術解決問題的能力。

語法是不需要專門去學得,而是找到cheatsheet,或者直接從文檔里找,所有語言的語法都是有限的,熟悉任何語言的語法,在cheatsheet和少量示例的幫助下,並不麻煩。而且有了概念的理解,你會發現語法也變得更有意義也更容易記憶了。

如果如果我說,編程學習中碰到的問題,是一片一片解決,而不是一點一點解決的,我不知道你能不能聽得懂。

我認為很多人之所以覺得編程學習缺乏正反饋,太多細節的糾結,很可能是因為他們沒有把注意力放在概念上,缺乏一個自我審視的過程。

  • 我明白這個詞是什麼意思嗎?
  • 它的英文是什麼?
  • 如果讓我描述它是什麼,我能不能做到?
  • 它不是什麼,什麼地方容易誤解?
  • 它什麼原理,能找到或者寫出來例子嗎?
  • 為什麼這東西有用?什麼時候它最有用?
  • 這些資料看下來,好像還是不清晰,是不是因為有些概念我沒有搞懂?
  • 如果中文的解釋不清楚,我是否該試試看英文的解釋?

缺乏這個過程的結果,就是很多時候當學習者還並不知道自己不知道某個東西的時候,就草草的到了下一步,然後積累的知識漏洞越來越多,以至於要開工自己寫東西了,仍然覺得一定感覺也沒有。

Focus on concepts。

接著看 探索第二


推薦閱讀:

如何組裝高性能的電腦?
為什麼總感覺自己做的視頻與其他大公司做的視頻相比,自己做的視頻有種不流暢不自然的感覺?
神經工程、腦機介面研究比較深入的大學是?
如果有一天,有證據表明世界是虛擬的,你將如何生活,世界將如何發展?

TAG:编程 | 计算机 | 程序员 |