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