學習技術的三部曲:WHAT、HOW、WHY

轉自“編程隨想”:http://program-think.blogspot.com/2009/02/study-technology-in-three-steps.html

 

本帖國內鏡像:
http://blog.csdn.net/program_think/archive/2009/02/19/3908713.aspx

  最近幾天有些網友在郵件裏面問我關於學習的問題。有好幾個人覺得工作了幾年,也學會了不少的類庫、框架、甚至語言,但是感覺自己的能力沒有太大的提 高。因此今天來說一下我個人對這方面的體會,希望對大夥兒(尤其是新手)有幫助。
  先聲明一下,本帖子討論的三部曲是指你已經選定了某個技術方 向之後,該如何學習;至於如何選定技術方向,則屬於另一個話題,不在今天的討論之列。
  我把學習歸類 爲三個步驟:What、How、Why。經過我對周圍同事和朋友的觀察,大部分感覺自己技術沒有提高的人,都僅僅停留在What階段。下面我把這三個步驟 解釋一下。

  ★第一步:WHAT
  所謂的“WHAT ”,就是搞清楚某個東東是什麼?有什麼用? 有什麼語法?有什麼功能特性?......
  舉例如下:
  對於學習語言(比如C++、Java、Python),大部分人都能夠掌握基本的語法和標準庫,然後用它寫一些小程序(諸如二分查找、冒泡排序、簡單文件操作等)。
  對於學習類庫(比如JDBC類庫),大部分Java 程序員都能明白JDBC主要包含哪些類,也能夠用JDBC進行簡單的數據庫查詢和增刪改操作。
  由於這個步驟是最基本的,假如你連這都做不到 (可能你的理解力不夠好),也別在IT界混了。
  但是光會What是不夠的。僅僅停留在這個步驟,導致了很多程序員只知其然,不知其所以然 。這就是目前大部分開發人員的現狀。

  ★第二步:HOW
  所謂的“HOW ”,就是搞清楚某個東西內部是如何運作的?實現機制如何?等一系列相關問題。
  舉例如下:
  假如你在學習C++語言,你是否搞明白函數傳參數的實現機制?虛函數是如何實現?拋出異常時的棧回退是怎麼回事?......
  假如你在學習Java語言,你是否搞清楚GC如何實現?反射是如何實現?......
  假如你在學習JDBC庫,你是否清楚JDBC Driver的4種類型?不同遊標類型的實現機制?事務的機制?......
  在這個階段,你必須多想想類似這些問題。然後通過各種途徑(參見 “關於自學能力 ”的 幾個方法),把問題徹底搞清楚。自然而然,你的提高就會比較明顯。而且如果碰到一些深層次的問題(比如性能優化),也就知道該如何去解決。
  完成這個階段之後,你基本上就屬於該技術領域最優秀的20%的人(根據二 八原理 ,80%的人不會去思考HOW的問題)。

  ★第三步:WHY
  一般來說,只有你把HOW的問題 想清楚,纔開始考慮步驟WHY。
  所謂的“WHY ”,就是搞清楚某個東西爲什麼設計成這樣?爲什麼不是另外的樣子?這樣的設計有 什麼講究?
  說實在的,善於問“爲什麼 ”有一定的天賦成分?好像某個科學大牛曾經說過“提出問題有時候比解決問題更難”。一般來 說,只有當你深刻 理解了某個東西,才能夠針對這個東東的設計 問出一些問題。所以,我前面強調過,要先把HOW的問題搞清楚, 再來考慮WHY的問題。
  舉例如下:
  對於C++語言:爲什麼C++沒有類似Java的finally關鍵字?爲什麼C++當初沒有 考慮GC?......
  對於Java語言:爲什麼Java沒有類似C++的類析構函數?爲什麼Java要同時提供String和 StringBuffer兩個似乎冗餘的類?......
  對於Python語言:爲什麼Python不提供類似C++/Java的訪問控制機 制?......
  如果你能夠自己 問出諸如上述的“爲什麼”問題,並且能夠通過各種途徑找到解答,那你基本上已經吃透這個技術 了,並且你已經有可能 自己去設計 一個類似的玩意兒了。到這時,你已經踏上了通向技術高手的康莊大道。

  由於本博客偏重IT方面,所以今天舉的這些例子多半都是IT相關的,但是這個三部曲在IT以外的行業/領域其實也能適用,就看讀者自己的領悟了。


版權聲明
本博客所有的原創文章,作者皆保留版權。轉載必須包含本聲明,保持本文完整,並以超鏈接形式註明作者編程隨想 和本文原始地址:
http://program-think.blogspot.com/2009/02/study-technology-in-three-steps.html

發佈了51 篇原創文章 · 獲贊 0 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章