最近寫了一篇關於C++0x Concepts的文章,意料之外地引起了一場小規模口水仗。回各位帖子的同時,回想這些年C++社群的大小爭論,覺得有必要把一些長久以來在C++爭論中出現的誤解列舉出來。
…History became legend, legend became myth …- The Lord of the Rings
哈雷將軍的笑話想必大家都聽過。一句話經口口相傳,每個人都根據自己的主觀意念加以潤色,修補,歪曲…到最後就面目全非。這裡最關鍵的一環就是主觀意識,在歷史學裡面有這麼一句話,大致意思是歷史其實只存在於人的意念之中;就算完全客觀的事件,通過不同的人的嘴說出來,造成的心理效應也往往不一樣,每個人都會加上那麼一兩個形容詞,駕馭語言能力高的更是能夠舌綻蓮花,而語言本就有自身的力量,其中的遣詞造句對讀者構成的心理影響力便應運而生。甚至於同一句話,用不同的語氣說出來,都會造成不同的效果。同一句話,站在不同的立場上看,也會根本不是同一個意思。比如“C++還算是門不錯的語言”,站在C++擁護者的角度聽是在憐憫加诋毀C++,而站在C++反對者的角度聽卻是抬舉了C++。
在一個長期被廣泛爭論的話題中,幾乎無可避免的總是存在一些Fallacies和Myths。比如動態&靜態類型系統的爭論,據說從圖靈時代就開始了,到現在還有各種各樣的誤解,而且,可以說,時間越長,系統內的Fallacy越多。就連異常(exception)這樣不算復雜的語言特性裡面居然也有一些長期存在的誤解。
至於這些Fallacies和Myths出現的原因很多:有人要“內涵”唬人、有人要維護自己的心理優勢、有人要維護自己的政權、有人要維護自己的利益、有人因為話從別人那裡聽了半句轉述給別人聽的時候按主觀意念補全(誰願意說“我不知道”呢?)、有人干脆就是人雲亦雲… 所以,一句話,在一個靠口頭表達交換信息的社會中,Fallacies和Myths是無處不在的,因為從內心真實想法到外界表現出來的想法之間存在著“口頭表達”這一中間層,後者由主觀意志支配。這裡的中間層可不比軟件工程裡面的間接層,在這個間接層上惡魔可以變成天使,天使也可以變成惡魔;六月飛雪可以變成天降祥瑞,瓢潑大雨也可以變成艷陽高照。Anyway,這展開來就是一個心理學的問題了,不多廢話了,有興趣的可以去看Harry G. Frankfurt寫的《On Bullshit》或者Scott Berkun的這篇短文——“How to detect bullshit”。呃…我說“一句話”了麼?
C++ - Fallacies and Myths
C++作為一門被爭論不斷的語言,其中Fallacies和Myths自然不會少。一般來說,一個問題在被大眾爭論中交換的話語數量與其中的Fallacy數量成正比。但一般來說主要的Fallacies就那麼幾個:
Fallacy #1 ——C++社群的哲學太學院派
讓我們先對“學院派”下一個定義好不好?先問你自己一個問題,你心目中對“學院派”的定義是什麼? 以下是一些選項: 1. 傾向於理論美。2. 忽視實際編碼中的constraints(如效率,模塊性、可讀性等等)。3. 倡導語言律師行為。4. 鑽細節。5. … 我想如果我說C++語言設計強調理論美,所有學過C++的人恐怕都會笑了…正如Bjarne自己所說的,C++設計初期的Rule of Thumb之一便是“不要陷入到對完美性的固執追求中”;不過具有諷刺意味的是,後面你會看到,正是這樣的一種哲學帶來了今天對C++的這個誤解。
我猜持這樣一種觀點的人大多對於學院派的定義都是模糊的,一般都介於“提倡鑽語言細節並利用語言細節的做法”、“關注語言特性本身而忽略實際編碼需求”、“對語言細節無休止的爭論”等等之間。 所以,當有人說“C++==學院派”的時候,他的真實意思很可能是:“C++語言的陰暗角落太多,而且C++社群還有提倡對語言角落把握的潛在哲學,就連C++0x的進化也似乎更多關注語言特性,而那些語言特性根本就跟我們實際開發者脫節了…”等等。 首先得承認的是,在近一個十年的時間內,C++社群的確某種程度上建立起了一種對語言細節過分關注的心態,這種心態毫無疑問是錯誤的,但只有知道這個錯誤是如何來的,才能解開這個結。而且,就算一時解不開這個結,知道了原因之後才能保持理性的寬容態度,而不是亂發抱怨。一個理性的態度,更有助於良性發展。例如如果C++社群都能明白這種潛哲學從何而來,或許也就會漸漸走向更好的發展了。