什么是學(xué)習(xí)C++意義?
學(xué)習(xí)C++意義其實(shí)真的是醉翁之意不在酒,像C/C++這種系統(tǒng)級語言,在學(xué)習(xí)的過程中必須要涉及到一些底層知識,如內(nèi)存管理、編譯連接系統(tǒng)、匯編語言、硬件體系結(jié)構(gòu)等知識。
這些東西也就是所謂的內(nèi)功了(其實(shí)最最重要的內(nèi)功還是長期學(xué)習(xí)所磨練出來的自學(xué)能力)。對此大嘴Joel在《Joel On Software》里面提到的漏洞抽象定律闡述得就非常漂亮。所以,答案是,讓你成為高手的并不是你掌握什么語言。
精通C++未必就能讓你成為高手,不精通C++也未必就能讓你成為低手。我想大家都不會懷疑g9老大如果要抄起C++做一個項(xiàng)目的話會比大多數(shù)自認(rèn)熟練C++的人要做得漂亮。所以關(guān)鍵的不是語言這個表層的東西,而是底下的本質(zhì)矛盾。
當(dāng)然,不是說那就什么語言都不要學(xué)了,按照一種曹操的邏輯,“天下語言,唯imperative與declarative耳”。C++是前者里面最復(fù)雜的一種,支持最廣泛的編程范式。借用當(dāng)初數(shù)學(xué)系入學(xué)大會上一個老師的話,“你數(shù)學(xué)都學(xué)了,還有什么不能學(xué)的呢?”。學(xué)語言是一個途徑,如果你把它用來磨練自己,可以。
如果你把它用來作為學(xué)習(xí)系統(tǒng)底層知識的鑰匙,可以。如果你把它用來作為學(xué)習(xí)如何編寫優(yōu)秀的代碼,如何組織大型的程序,如何進(jìn)行抽象設(shè)計,可以。如果掉書袋,光啃細(xì)節(jié),我認(rèn)為不可以(除非你必須要用到細(xì)節(jié),像boost庫的coder們)。
避免去過問任何語言細(xì)節(jié),除非必要。這個必要是指在實(shí)際編程當(dāng)中遇到問題,這樣就算需要過問細(xì)節(jié),也是最省事的,懶惰者原則嘛。一個掌握了基本的編程理念并有較強(qiáng)學(xué)習(xí)能力的程序員在用一門陌生的語言編程時就算拿著那本語言的圣經(jīng)從索引翻起也可以編出合格的程序來。
十年學(xué)會編程不是指對每門語言都得十年,那一輩子才能學(xué)幾門語言哪,如果按字母順序?qū)W的話一輩子都別指望學(xué)到Ruby了;十年學(xué)習(xí)編程更不是指先把語言特性從粗到細(xì)全都吃透才敢下手編程,在實(shí)踐中提高才是最重要的。
至于這種摳語言細(xì)節(jié)的哲學(xué)為何能在社群里面呈野火燎原之勢,就是一個心理學(xué)的問題了。想像人們在論壇上討論問題時,一個對語言把握很細(xì)致的人肯定能夠得到更多的佩服,而由于論壇上的問題大多是小問題。
所以解決實(shí)際問題的真正能力并不能得到顯現(xiàn),也就是說,知識型的人能夠得到更多佩服,后者便成為動力和仿效的砝碼。然而真正的編程能力是與語言細(xì)節(jié)沒關(guān)系的,熟練運(yùn)用一門語言能夠幫你***表達(dá)你的意圖。
但熟練運(yùn)用一門語言絕不意味著要把它的邊邊角角全都記住。懂得一些常識,有了編程的基本直覺,遇到一些細(xì)節(jié)錯誤的時候再去查書,是最節(jié)省時間的辦法。重要的不是你掌握的語言,而是你掌握的能力,借用myan老大的話,“重要的是這個磨練過程,而不是結(jié)果,要的是你粗壯的腿,而不是你身上背的那袋鹽巴。
【編輯推薦】