YH,今天早晨起來?;叵胱蛱欤m然吐槽了C++的各種問題,但給別人打工,還是要靠C++干活吃飯。我對待C++的態(tài)度和云風(fēng)不同,雖然他所說的C++技術(shù)的事情我都懂都理解,而我感受到的不是技術(shù)問題,而是人生的問題以及人的精力問題,所以我感到還是需要寫一篇文章,和你探討下程序猿的編程人生。
請先容我在這里倚老賣老下。我用C++也用了好久,2000年開始真正開始學(xué)C++。之前是為了找工作需要,學(xué)了幾年的Delphi以及Foxpro。2001年下半年畢業(yè)開始,感受到C++的強(qiáng)大,我開始買大量的C++的書去學(xué)習(xí)。
朋友周愛民對我的評價就是:你是個學(xué)院派的。你最適合去大學(xué)里搞研究。
呵呵,可能我是從我父親那里遺傳并繼承了他的研究能力。我很喜歡找到一個東西,并深究研究到我認(rèn)為透了,我才去用。這個在其他地方也同樣體現(xiàn)。
在學(xué)C++之前,我也學(xué)了2~3年的Delphi,而且畢業(yè)設(shè)計都是Delphi做的。我去面試的是Delphi的工作,但業(yè)余時間,看C++的書,寫一些C++的代碼練手,后面時機(jī)成熟了,就很輕松的上手寫代碼。
但我那堪比貓的好奇心。讓我總是在不停的被C++的“特性”所干擾。因為C++提供的特色太多了。模板,模板庫。虛擬、虛擬、再虛擬的東西。各種抽象、抽象、再抽象的方式。這里就不逐一敘述各種C++概念了。
而這些有趣的東西。會讓我的精力一次又一次的轉(zhuǎn)到研究這些C++的有趣的設(shè)計上。但多年以后回過頭來看,這些東西盡管設(shè)計的確實很不錯,但占你人生的代碼量而言,大概有1%到10%左右不等,具體看人的工作性質(zhì)。而這種代碼,也會被其他方式替換,只不過C++提供的是比較易懂的機(jī)制。而不管編寫底層庫,還是編寫頂層實現(xiàn)代碼。最多的還是業(yè)務(wù)代碼,而這種業(yè)務(wù)代碼,就是基礎(chǔ)邏輯代碼。任何計算機(jī)語言都提供的那類基礎(chǔ)功能。
在十來年前,流行過一套小書,其中有一本書叫《編程之道》。里面充滿了道家的思想,很多地方甚至就是把老子、莊子的話稍微改一下就成了一種很神秘的話, 呈現(xiàn)在你面前。多年來,我一直時不時的看看這本書,感悟下書里面所說的道理。
一個初學(xué)者被要求編寫一個財務(wù)軟件。
他瘋狂地工作了很多天,但他的主管檢視他的程序時發(fā)現(xiàn),它寫了一個編輯囂,一個圖形程序集,和人工智能的界面,但是看不到任何跟財務(wù)有關(guān)的東西。
主管要求解釋時,程序員被激怒了:“你太沒耐心了,我會在最后寫財務(wù)的部分。”
起初看這個小故事,并沒有感受到作者到底是在寫什么。工作以后才明白,這個程序猿一開始就沒有考慮核心的財務(wù)功能代碼,而是寫了周邊的代碼。要說周邊代碼沒用嗎?其實也是有用的,但那不是核心功能。當(dāng)業(yè)務(wù)真正投放使用之后,這些代碼的使用過程中,會被反復(fù)推敲修改的,如果最初就沒有思路去思考,那結(jié)果必定是一團(tuán)糟。而程序猿就這么輕易被那些“花哨”,看上去很好很強(qiáng)大的東西給吸引了,而忽略了最核心的需求。
而C++正是讓你看到,這個不錯,可以用哦。那個也不錯,試試看?結(jié)果呢?短期來說,有可能真正的工作可能耽誤了。長期來說,積累的C++“使用經(jīng)驗”,對編程水平的提高幫助幾乎微乎其微。
現(xiàn)在信息量如此之巨大,書籍如此多,網(wǎng)上的新興概念,新的資料還在不停的生產(chǎn)。你或許一輩子可能都看不完的東西。
《C++標(biāo)準(zhǔn)程序庫》和《代碼大全》是差不多一樣厚的。兩本書擺在你面前你是選擇哪本呢?《深入理解計算機(jī)系統(tǒng)》和《C++ Primer》也是差不多一樣厚的,你是選擇哪一本呢?
當(dāng)你可能懂得如何謹(jǐn)慎的對待C++標(biāo)準(zhǔn)庫的時候,boost庫又在你的面前了,loki之類的庫都逐一出現(xiàn)在你面前。都是海量的信息轟炸著你的頭腦。還有巨額的各類引擎代碼。
C++可以用,用了這么長時間。我深知它僅僅是一門語言而已。但要阻止被各種所謂的“設(shè)計”給迷惑。使用他提供的一些基本功能。
去研究C++的周邊的時間。你可以研究下計算機(jī)結(jié)構(gòu)基礎(chǔ),基本的虛擬機(jī)原理,完善你的編輯器,研究下工具鏈,研究下各種有趣的算法,看下Lua或者Python的源碼,值得研究的東西太多了。而這輩子精力太有限了。
因為這些不僅僅是屬于C++的東西,而是屬于“編程”這個大范疇的東西,而很多在現(xiàn)代計算機(jī)出現(xiàn)之前就存在,這種不變的東西,才會提高你的編程能力。把精力視角擴(kuò)大,多專注與編程,多專注于你所在行業(yè)的業(yè)務(wù)需求。這才能提高你的工作能力。甚至可以和兩三好友去玩也會提高你的社交能力。
可以用C++,但不要去研究C++
最后,我再用一段《編程之道》的小故事做個總結(jié)。
有一天編程大師碰見了一個正玩掌上游戲機(jī)的編程新手,他說:“給我看一下?”
新手把游戲機(jī)遞給大師,“我看到上面說明了三種難度的玩法:容易,中等,高難”,大師說,“但是每個這樣的游戲機(jī)都有另外一種玩法,此時游戲機(jī)即不是想著怎么贏你,也不是怎么被你贏?!?/p>
“那么請問大師”,初學(xué)者說,“這種玩法到底是怎樣玩的呢?”
大師把游戲機(jī)摔到地下然后用腳踩碎它,突然初學(xué)者明白了。