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

























