時??吹綉敢罄锩鎸懼?熟練掌握XX",我也來談談我的看法吧.
拿C++來說,我現在可以在我的個人簡歷里面寫著"熟練掌握C++",誠然,不是C++的每個細節我都能十分熟悉,但是我可以做到以下幾點:1)C++的整體觀念我都大致的清楚,繼承多態封裝虛函數等等 2)基本的錯誤我不會犯,比如空指針調用等等 3)出了問題的時候我可以馬上的反應過來問題可能出在哪里并且通過網絡或者書籍來解決我的問題,我不必為了忘記某個函數的名字或者寫法而發慌,因為我心里有數.
也就是說,我認為,某一門知識,如果建立起了整體的概念,這樣就可以不必為了細節上可能出現的問題而發慌,并且可以迅速的解決出現的問題,那么這一門知識可以稱之為"熟練掌握".這是因為我認為很多時候,做事情也好學東西也罷要抓住根本或者說基礎的東西,至于細節,那要實踐過才能十分的熟練的.比如C++中的流和異常處理,我基本沒有用過,所以不是拿來就能馬上上手寫的,但是我不會因為這個而發慌,因為我知道我在哪里可以找到我想要的答案并且實踐我的想法,這就足夠了.
回過頭來,說一下我對學習方法的看法.我認為,學習一門知識的時候,剛開始時應該馬上建立起整體的觀念,然后在慢慢的在實踐中扣細節.比如我最近在看的<<windows核心編程>>,里面大量充斥著對某個API其中參數的解釋,一般看到這些地方我都是一掃而過的,因為我認為如何選擇API參數這樣的細節除非到了我真正要用到這個API了否則靠死記硬背或者簡單的看書是無法真正的理解的.相反的,我把對這本書的關注更多的放在了對概念的解釋上,比如線程,進程,內核對象,臨界對象等等的.所以,剛開始學習一門知識的時候,建議找一些薄而且五臟俱全的書籍來迅速入門,把握最最基本的概念,這樣的典型有Lippman的<<Essensial C++>>等,初學的時候不推薦用那種磚頭式可以作為字典察看的書籍,這樣你的入門會比較慢而且不容易抓住重點.
其實,作為程序員,我們日常工作中遇到的大部分問題以前都曾經有人遇到過,我這里指的是細節性的問題,其他如如何設計一個系統如何架構等等的就要靠經驗和知識面了.所以,不在學習的時候過早的陷入與細節的糾纏而把重點放在基本概念的建立上我認為才是比較好的入門方法.
綜合起來,應該把What(是什么?),When(什么時候使用?),Why(如何使用?)這三個W放在最前面,而How(如何實現)則是優先級別比較靠后的了,細節性的東西只要你有實踐做過項目慢慢的就會熟悉了,因為并沒有太多自己需要創新的地方,書上網上很多前人都有了例子了,看一看就可以明白(前提是前面的三個W已經掌握的足夠好了).
但是話說回來,照貓畫虎依樣畫瓢的事情很多人都會做,如果僅僅滿足與此也許到了一個瓶頸的時候就很難進步了.比如前一陣我和一位同事聊天,我跟他說我最近要好好看看算法和數據結構這些基礎的東西,他說這些是最不必看的,因為STL里面都有,我承認STL里面確實是包含了很多實用的算法,但是如果不去明白其中的原理那么在選擇合適的容器和算法的時候也許不能做到十分的準確.
同時,在平時工作的時候,還需要積累解決問題的思路,這不僅是程序員的一個素養,也是一個人需要具備的一個基本的能力,這個能力包括--避免問題的能力(如果能避免問題了就不必解決了:),發現并且逐步定位問題的能力,提問的能力,搜索問題答案的思路等等.這方面的書很多,<<程序設計實踐>>里面提到過很多實際編程的時候會遇到的問題,比如代碼風格,注釋,assert如何使用,如何測試等等的,注意里面的一些基本的寫代碼的原則可以幫你避免許多問題.除去這一本程序設計方面的書,還有一些和寫代碼關系不是很大的書,比如溫伯格的<<你的燈亮著么?>>,波利亞的<<怎樣解題>>等等的,都不錯.
一點愚見,歡迎拍磚~~