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