探索C++語(yǔ)言中的秘密
許多編程人員學(xué)習(xí)C++總結(jié)經(jīng)驗(yàn)為,有的覺(jué)得C++語(yǔ)言是一門(mén)獨(dú)立的語(yǔ)言,并不是在C語(yǔ)言的基礎(chǔ)上,可以直接學(xué)習(xí)C++不必先從C下手,希望大家切磋。。
評(píng)論數(shù)目也有一百多。為什么獨(dú)獨(dú)這篇能夠激起這么多的回應(yīng),想必是國(guó)內(nèi)的C++社群被C++壓抑太久,或者,嚴(yán)格來(lái)說(shuō),是被C++的教育方式壓抑太久。實(shí)際上,不管是在各大國(guó)內(nèi)論壇上。
還是在comp.lang.c++.moderated這樣的國(guó)際C++論壇上,乃至于在douban上的小組內(nèi),有心者都會(huì)發(fā)現(xiàn),對(duì)C++語(yǔ)言的細(xì)節(jié)的關(guān)注一直都沒(méi)有停止過(guò),同樣,對(duì)C++語(yǔ)言的細(xì)節(jié)的抱怨也從來(lái)都沒(méi)有停止過(guò)。
一個(gè)例子就是comp.lang.c++.moderated上的一個(gè)技術(shù)牛人James Kanze說(shuō)的,他說(shuō)接觸C++十年了,到現(xiàn)在還需要不時(shí)去翻C++標(biāo)準(zhǔn)。這就難怪Eric Raymond老大在《The Art of Unix Programming》中說(shuō)“C++是反緊湊”的了。C++中的細(xì)節(jié)太多,就算都看過(guò)了,也不可能都記住。更關(guān)鍵的是,就算都記住了,也不能讓你成為一個(gè)真正的好程序員。
絕大多數(shù)人都把細(xì)節(jié)太多(或者用貶義詞來(lái)說(shuō)就是“陰暗角落太多”)歸結(jié)為C++的本質(zhì)問(wèn)題,認(rèn)為一切邪惡由此而生。也正因此,大約9月份的時(shí)候,Linus在郵件列表上說(shuō)“C++是一門(mén)有思想包袱的語(yǔ)言;僅僅是為了讓程序員遠(yuǎn)離C++,我也要用C”。這句短短的話在國(guó)內(nèi)引起了很大的反應(yīng),最初是劉江轉(zhuǎn)了Linus的話,然后云風(fēng)和孟巖都發(fā)表了自己的看法;我也寫(xiě)了一篇“Why C++”(后來(lái)發(fā)給Bjarne,Bjarne對(duì)這篇文章做了一個(gè)友情評(píng)注)。
然而,這一通渾水?dāng)囘^(guò)之后,我相信引起的變化未必很大。大多數(shù)原先的反對(duì)者能從中找出反對(duì)的理由,于是更加反對(duì);大多數(shù)原先的贊同者也能從中找到贊同的理由,于是更加贊同;而剩下來(lái)的原先沒(méi)有明確意見(jiàn)的,看雙方各有各的道理,可能還是沒(méi)有頭緒。
擺脫自我服務(wù)偏見(jiàn)——理性思考的前提 《決策與判斷》上提到過(guò)一個(gè)有趣的真實(shí)故事:1980年的某一天,美國(guó)空戰(zhàn)司令部的計(jì)算機(jī)突然發(fā)出警報(bào)——蘇聯(lián)的一枚核彈正在向美國(guó)本土飛來(lái)。司令部立即調(diào)兵遣將,迅速為一場(chǎng)核戰(zhàn)做好了準(zhǔn)備,然而3分鐘之后,工程人員發(fā)現(xiàn)是計(jì)算機(jī)的一個(gè)小零部件故障造成的。
然而,這場(chǎng)虛驚之后,大眾的反應(yīng)才是真正有意思的:原先支持核武裝的,認(rèn)為現(xiàn)在感覺(jué)更加安全了(因?yàn)椤笆聦?shí)證明這類(lèi)的故障是完全可克服的”);而原先反對(duì)核武裝的則認(rèn)為更不安全了(因?yàn)椤斑@類(lèi)錯(cuò)誤信號(hào)可能導(dǎo)致蘇聯(lián)過(guò)度反應(yīng),引發(fā)真正的核戰(zhàn)”)。
類(lèi)似的情況也發(fā)生在三里島核泄露事件之后,同樣的,反對(duì)者認(rèn)為(“這表明管理部門(mén)沒(méi)有辦法安全管理核能”),支持者認(rèn)為(“這正表明這樣的危險(xiǎn)沒(méi)有想像得那么嚴(yán)重,是可克服的”)。社會(huì)心理學(xué)把諸如此類(lèi)的現(xiàn)象總結(jié)為“自我服務(wù)偏見(jiàn)”。不幸的是,“真理越辯越明”其實(shí)只適用于理性思考者。
為什么啰嗦這么一大通呢?就是因?yàn)?,一直以?lái)泛濫于程序員社群的“語(yǔ)言之爭(zhēng)”,背后真正的原因其實(shí)并不在于語(yǔ)言實(shí)質(zhì)上的優(yōu)劣,而在于觀察者的眼睛。在觀察者的眼睛里面,語(yǔ)言并非一門(mén)工具,而是自己花了N多時(shí)間(其中尤數(shù)C++為最)來(lái)“修煉”的技能,對(duì)于這樣的技能,被否定無(wú)疑等同于自己被否定。所以,從心理學(xué)上講,語(yǔ)言并不是工具(盡管一直有這么一種呼吁),而是信仰。
這樣的信仰在越是花得時(shí)間久的語(yǔ)言上越是激烈。有趣的是,幾乎所有的“熱鬧”的社群都有這樣的現(xiàn)象,Java、Python、Ruby…莫不如是;因?yàn)榫退阏Z(yǔ)言本身不復(fù)雜,程序員仍然還是要投入大量的精力去學(xué)習(xí)各種各樣的框架類(lèi)庫(kù)(想想Java的那些框架?)。因此這些語(yǔ)言社區(qū)的信仰未必不比C++社群的強(qiáng)烈。
然而,一旦弄清我們?yōu)槭裁磿?huì)把語(yǔ)言當(dāng)成信仰,就非常有助于擺脫在看待語(yǔ)言時(shí)的“自我服務(wù)偏見(jiàn)”,從客觀的角度去看待問(wèn)題?!爱?dāng)你看到的是支持某個(gè)意見(jiàn)的證據(jù)時(shí),試著去想一想有哪些證據(jù)是不支持它的”。
那么為什么要擺脫自我服務(wù)偏見(jiàn)?說(shuō)小了,是為了成為一個(gè)更優(yōu)秀的程序員(誰(shuí)也不希望因?yàn)槠?jiàn)而去使用一門(mén)低效的語(yǔ)言乃至不妥當(dāng)?shù)恼Z(yǔ)言)。C++語(yǔ)言說(shuō)大了是節(jié)省生命(因?yàn)槠?jiàn)可能導(dǎo)致越陷越深,浪費(fèi)時(shí)間)。 所以,如果你能夠理性的思考我們將要討論的問(wèn)題,避免自我服務(wù)偏見(jiàn)(就當(dāng)你從來(lái)沒(méi)有花時(shí)間在C++上一樣)。那么我們便可以開(kāi)始討論真正的問(wèn)題了。
【編輯推薦】