最近寫了一篇關于C++0x Concepts的文章,意料之外地引起了一場小規模口水仗。回各位帖子的同時,回想這些年C++社群的大小爭論,覺得有必要把一些長久以來在C++爭論中出現的誤解列舉出來?! 璈istory became legend, legend became myth …- The Lord of the Rings 哈雷將軍的笑話想必大家都聽過。一句話經口口相傳,每個人都根據自己的主觀意念加以潤色,修補,歪曲…到最后就面目全非。這里最要害的一環就是主觀意識,在歷史學里面有這么一句話,大致意思是歷史其實只存在于人的意念之中;就算完全客觀的事件,通過不同的人的嘴說出來,造成的心理效應也往往不一樣,每個人都會加上那么一兩個形容詞,駕馭語言能力高的更是能夠舌綻蓮花,而語言本就有自身的力量,其中的遣詞造句對讀者構成的心理影響力便應運而生。甚至于同一句話,用不同的語氣說出來,都會造成不同的效果。同一句話,站在不同的立場上看,也會根本不是同一個意思。比如“C++還算是門不錯的語言”,站在C++擁護者的角度聽是在憐憫加詆毀C++,而站在C++反對者的角度聽卻是抬舉了C++。
至于這些Fallacies和Myths出現的原因很多:有人要“內涵”唬人、有人要維護自己的心理優勢、有人要維護自己的政權、有人要維護自己的利益、有人因為話從別人那里聽了半句轉述給別人聽的時候按主觀意念補全(誰愿意說“我不知道”呢?)、有人干脆就是人云亦云… 所以,一句話,在一個靠口頭表達交換信息的社會中,Fallacies和Myths是無處不在的,因為從內心真實想法到外界表現出來的想法之間存在著“口頭表達”這一中間層,后者由主觀意志支配。這里的中間層可不比軟件工程里面的間接層,在這個間接層上惡魔可以變成天使,天使也可以變成惡魔;六月飛雪可以變成天降祥瑞,瓢潑大雨也可以變成艷陽高照。Anyway,這展開來就是一個心理學的問題了,不多廢話了,有愛好的可以去看Harry G. Frankfurt寫的《On Bullshit》或者Scott Berkun的這篇短文——“How to detect bullshit”。呃…我說“一句話”了么?
另一方面,寫作C++書籍的大多數都是C++庫的設計者,這就給予了許多C++書一個有偏見的視角,大量庫設計中才會用到的技術被介紹出來,而社群對這些牛人又都是唯馬首是瞻的。(其實我覺得一本Bjarne的《The C++ PRogramming Language》加上一本Herb&Alexandrescu的《C++ Coding Standard》對于日常程序員來說,真的足夠了。)
此外,人總是好奇的,在C++里面有那么多的被“發明”的好玩技術,怎么可能不會有人去追捧呢。另一個動機則是學了這些技術有立竿見影的炫耀效果,比如在論壇上。這可比編寫可維護代碼的才能輕易表現多了——人自然是更傾向于去關注那些更輕易拿來表現和炫耀的東西的。退一步說,就單單是“發明”一項新的語言特性組合運用技巧都能帶來純粹的成就感,因為你又在現有語言框架下作出了一個創舉,你做了別人做不到的。而作為學習者,你可能會因為發現原來自己理解的一塊土地上還有不知道的東西而感到興奮和新奇,這種興奮和新奇感往往是學習的真正原動力。至少,對于我來說,當年讀《Modern C++ Design》時正是這樣一種感覺,我想有和我一樣感覺的人肯定不在少數。