YH桥狡,今天早晨起來(lái)≈遄浚回想昨天裹芝,雖然吐槽了C++的各種問(wèn)題,但給別人打工好爬,還是要靠C++干活吃飯局雄。我對(duì)待C++的態(tài)度和云風(fēng)不同,雖然他所說(shuō)的C++技術(shù)的事情我都懂都理解存炮,而我感受到的不是技術(shù)問(wèn)題炬搭,而是人生的問(wèn)題以及人的精力問(wèn)題,所以我感到還是需要寫(xiě)一篇文章穆桂,和你探討下程序猿的編程人生宫盔。
請(qǐng)先容我在這里倚老賣老下。我用C++也用了好久享完,2000年開(kāi)始真正開(kāi)始學(xué)C++灼芭。之前是為了找工作需要,學(xué)了幾年的Delphi以及Foxpro般又。2001年下半年畢業(yè)開(kāi)始彼绷,感受到C++的強(qiáng)大,我開(kāi)始買大量的C++的書(shū)去學(xué)習(xí)茴迁。
朋友周愛(ài)民對(duì)我的評(píng)價(jià)就是:你是個(gè)學(xué)院派的寄悯。你最適合去大學(xué)里搞研究。
呵呵堕义,可能我是從我父親那里遺傳并繼承了他的研究能力猜旬。我很喜歡找到一個(gè)東西,并深究研究到我認(rèn)為透了,我才去用洒擦。這個(gè)在其他地方也同樣體現(xiàn)椿争。
在學(xué)C++之前,我也學(xué)了2~3年的Delphi熟嫩,而且畢業(yè)設(shè)計(jì)都是Delphi做的秦踪。我去面試的是Delphi的工作,但業(yè)余時(shí)間掸茅,看C++的書(shū)洋侨,寫(xiě)一些C++的代碼練手,后面時(shí)機(jī)成熟了倦蚪,就很輕松的上手寫(xiě)代碼。
但我那堪比貓的好奇心边苹。讓我總是在不停的被C++的“特性”所干擾陵且。因?yàn)镃++提供的特色太多了。模板个束,模板庫(kù)慕购。虛擬、虛擬茬底、再虛擬的東西沪悲。各種抽象、抽象阱表、再抽象的方式殿如。這里就不逐一敘述各種C++概念了。
而這些有趣的東西最爬。會(huì)讓我的精力一次又一次的轉(zhuǎn)到研究這些C++的有趣的設(shè)計(jì)上涉馁。但多年以后回過(guò)頭來(lái)看,這些東西盡管設(shè)計(jì)的確實(shí)很不錯(cuò)爱致,但占你人生的代碼量而言烤送,大概有1%到10%左右不等,具體看人的工作性質(zhì)糠悯。而這種代碼帮坚,也會(huì)被其他方式替換,只不過(guò)C++提供的是比較易懂的機(jī)制互艾。而不管編寫(xiě)底層庫(kù)试和,還是編寫(xiě)頂層實(shí)現(xiàn)代碼。最多的還是業(yè)務(wù)代碼忘朝,而這種業(yè)務(wù)代碼灰署,就是基礎(chǔ)邏輯代碼。任何計(jì)算機(jī)語(yǔ)言都提供的那類基礎(chǔ)功能。
在十來(lái)年前溉箕,流行過(guò)一套小書(shū)晦墙,其中有一本書(shū)叫《編程之道》。里面充滿了道家的思想肴茄,很多地方甚至就是把老子晌畅、莊子的話稍微改一下就成了一種很神秘的話, 呈現(xiàn)在你面前寡痰。多年來(lái)抗楔,我一直時(shí)不時(shí)的看看這本書(shū),感悟下書(shū)里面所說(shuō)的道理拦坠。
一個(gè)初學(xué)者被要求編寫(xiě)一個(gè)財(cái)務(wù)軟件连躏。
他瘋狂地工作了很多天,但他的主管檢視他的程序時(shí)發(fā)現(xiàn)贞滨,它寫(xiě)了一個(gè)編輯囂入热,一個(gè)圖形程序集,和人工智能的界面晓铆,但是看不到任何跟財(cái)務(wù)有關(guān)的東西勺良。
主管要求解釋時(shí),程序員被激怒了:“你太沒(méi)耐心了骄噪,我會(huì)在最后寫(xiě)財(cái)務(wù)的部分尚困。”
起初看這個(gè)小故事链蕊,并沒(méi)有感受到作者到底是在寫(xiě)什么事甜。工作以后才明白,這個(gè)程序猿一開(kāi)始就沒(méi)有考慮核心的財(cái)務(wù)功能代碼滔韵,而是寫(xiě)了周邊的代碼讳侨。要說(shuō)周邊代碼沒(méi)用嗎?其實(shí)也是有用的奏属,但那不是核心功能跨跨。當(dāng)業(yè)務(wù)真正投放使用之后,這些代碼的使用過(guò)程中囱皿,會(huì)被反復(fù)推敲修改的勇婴,如果最初就沒(méi)有思路去思考,那結(jié)果必定是一團(tuán)糟嘱腥。而程序猿就這么輕易被那些“花哨”耕渴,看上去很好很強(qiáng)大的東西給吸引了,而忽略了最核心的需求齿兔。
而C++正是讓你看到橱脸,這個(gè)不錯(cuò)础米,可以用哦。那個(gè)也不錯(cuò)添诉,試試看屁桑?結(jié)果呢?短期來(lái)說(shuō)栏赴,有可能真正的工作可能耽誤了蘑斧。長(zhǎng)期來(lái)說(shuō),積累的C++“使用經(jīng)驗(yàn)”须眷,對(duì)編程水平的提高幫助幾乎微乎其微竖瘾。
現(xiàn)在信息量如此之巨大,書(shū)籍如此多花颗,網(wǎng)上的新興概念捕传,新的資料還在不停的生產(chǎn)。你或許一輩子可能都看不完的東西扩劝。
《C++標(biāo)準(zhǔn)程序庫(kù)》和《代碼大全》是差不多一樣厚的乐横。兩本書(shū)擺在你面前你是選擇哪本呢?《深入理解計(jì)算機(jī)系統(tǒng)》和《C++ Primer》也是差不多一樣厚的今野,你是選擇哪一本呢?
當(dāng)你可能懂得如何謹(jǐn)慎的對(duì)待C++標(biāo)準(zhǔn)庫(kù)的時(shí)候罐农,boost庫(kù)又在你的面前了条霜,loki之類的庫(kù)都逐一出現(xiàn)在你面前。都是海量的信息轟炸著你的頭腦涵亏。還有巨額的各類引擎代碼宰睡。
C++可以用,用了這么長(zhǎng)時(shí)間气筋。我深知它僅僅是一門語(yǔ)言而已拆内。但要阻止被各種所謂的“設(shè)計(jì)”給迷惑。使用他提供的一些基本功能宠默。
去研究C++的周邊的時(shí)間麸恍。你可以研究下計(jì)算機(jī)結(jié)構(gòu)基礎(chǔ),基本的虛擬機(jī)原理搀矫,完善你的編輯器抹沪,研究下工具鏈,研究下各種有趣的算法瓤球,看下Lua或者Python的源碼融欧,值得研究的東西太多了。而這輩子精力太有限了卦羡。
因?yàn)檫@些不僅僅是屬于C++的東西噪馏,而是屬于“編程”這個(gè)大范疇的東西麦到,而很多在現(xiàn)代計(jì)算機(jī)出現(xiàn)之前就存在,這種不變的東西欠肾,才會(huì)提高你的編程能力瓶颠。把精力視角擴(kuò)大,多專注與編程董济,多專注于你所在行業(yè)的業(yè)務(wù)需求步清。這才能提高你的工作能力。甚至可以和兩三好友去玩也會(huì)提高你的社交能力虏肾。
可以用C++廓啊,但不要去研究C++
最后,我再用一段《編程之道》的小故事做個(gè)總結(jié)封豪。
有一天編程大師碰見(jiàn)了一個(gè)正玩掌上游戲機(jī)的編程新手谴轮,他說(shuō):“給我看一下?”
新手把游戲機(jī)遞給大師吹埠,“我看到上面說(shuō)明了三種難度的玩法:容易第步,中等,高難”缘琅,大師說(shuō)粘都,“但是每個(gè)這樣的游戲機(jī)都有另外一種玩法,此時(shí)游戲機(jī)即不是想著怎么贏你刷袍,也不是怎么被你贏翩隧。”
“那么請(qǐng)問(wèn)大師”呻纹,初學(xué)者說(shuō)堆生,“這種玩法到底是怎樣玩的呢?”
大師把游戲機(jī)摔到地下然后用腳踩碎它雷酪,突然初學(xué)者明白了淑仆。