冒號(hào)課堂§5.4:語(yǔ)言誤區(qū)

           

          冒號(hào)課堂

          第五課 語(yǔ)言小談(4)

          5.4語(yǔ)言誤區(qū)——語(yǔ)言的宗教情結(jié)

          愛(ài)而不知其惡,憎而遂忘其善                                   ——《吳兢·貞觀政要》

          關(guān)鍵詞:編程語(yǔ)言,宗教,程序員,架構(gòu)師

          摘要:關(guān)于編程語(yǔ)言的一些誤區(qū)


           預(yù)覽

          ·           如果說(shuō)編程范式是一種文化,那么編程語(yǔ)言更像是一種宗教——盡管它本不該是

          ·           語(yǔ)言只有兩種:一種怨聲載道,一種無(wú)人問(wèn)津

          ·           對(duì)待一門(mén)語(yǔ)言的態(tài)度應(yīng)該是:與其抱怨?fàn)巿?zhí),不如揚(yáng)長(zhǎng)避短

          ·           過(guò)分拔高一種語(yǔ)言與抹煞語(yǔ)言之間的差別是兩種極端,皆為秕言謬說(shuō)

          ·           這些人若有幸拜關(guān)公為師,他們最艷羨的一定他的赤兔馬和青龍偃月刀,或許還會(huì)抹紅臉蓄長(zhǎng)須什么的,就是不太愿學(xué)他的蓋世武功

          ·           理想的架構(gòu)師應(yīng)當(dāng)如文學(xué)大師,既有恢弘大氣的構(gòu)思,又有細(xì)膩深刻的筆法;應(yīng)當(dāng)如統(tǒng)軍大帥,既有運(yùn)籌帷幄的韜略,又有沖鋒陷陣的武功

           

           提問(wèn) 

          ·           為什么那么多人對(duì)某些編程語(yǔ)言都有濃厚的宗教情結(jié)?

          ·           存在至高無(wú)上的語(yǔ)言嗎?

          ·           “語(yǔ)言不過(guò)是工具,其實(shí)都差不多”。這種論調(diào)正確嗎?

          ·           IDE、框架、設(shè)計(jì)工具等比語(yǔ)言更重要嗎?

          ·           語(yǔ)言是低級(jí)的代名詞,設(shè)計(jì)是高級(jí)的代名詞嗎?

          ·           架構(gòu)師就不關(guān)心語(yǔ)言了嗎?


          講解

          “最后該談?wù)勀銈冏顬殛P(guān)心的語(yǔ)言問(wèn)題了。”冒號(hào)環(huán)視一番,眾人眼球的瓦數(shù)顯見(jiàn)增大,“如果說(shuō)編程范式是一種文化,那么編程語(yǔ)言更像是一種宗教——盡管它本不該是。每種流行的語(yǔ)言都有大批忠實(shí)的信徒,隨時(shí)可能與其他的信徒發(fā)生宗教戰(zhàn)爭(zhēng)。”

          逗號(hào)深有同感:“周?chē)途W(wǎng)上關(guān)于語(yǔ)言的爭(zhēng)論從來(lái)不絕于耳,志不同道不合者動(dòng)輒惡語(yǔ)相向。”

          提起這些,冒號(hào)不免有些忿忿然:“這些信徒或準(zhǔn)信徒們認(rèn)為他們所崇拜的語(yǔ)言鶴立雞群,遠(yuǎn)比其他語(yǔ)言高明得多,恨不得成為全天下程序員的通用語(yǔ)言。對(duì)其他語(yǔ)言的使用者,或居高臨下地同情,或不屑一顧地譏諷。無(wú)知與偏見(jiàn)總是相輔相成的,他們中的絕大多數(shù)頂多熟悉一兩種語(yǔ)言,其他的或淺嘗輒止、或道聽(tīng)途說(shuō),卻敢妄評(píng)優(yōu)劣,豈不可笑之極?”

          引號(hào)點(diǎn)頭稱(chēng)是:“是啊,沒(méi)有深入的了解,怎會(huì)有深入的比較。”

          冒號(hào)進(jìn)而尖銳地指出:“從心理學(xué)上分析,一個(gè)人在某種觀點(diǎn)形成后,會(huì)通過(guò)自我的暗示和傾向性的證據(jù)不斷地強(qiáng)化這種觀點(diǎn),并對(duì)其他觀點(diǎn)本能地選擇性失明。這背后折射的其實(shí)是一種懶人心態(tài)——認(rèn)定自己掌握的語(yǔ)言是最好的,便不必費(fèi)事再學(xué)其他語(yǔ)言了;這更是一種弱者心態(tài)——無(wú)論是耿耿忠心的鐵桿衛(wèi)士,還是振振有詞的辯護(hù)律師,一旦喪失自我批判的勇氣和精神,聲嘶力竭的撻伐只能反證他們的偏狹淺薄與自信缺失。”

          冒號(hào)刻意借辛辣十足的嘲諷再次傳遞精神的信號(hào)。

          嘆號(hào)道出苦衷:“只是真正掌握好一門(mén)語(yǔ)言已殊為不易,同時(shí)掌握幾種就更難。學(xué)完一種語(yǔ)言再看另一種,怎么都覺(jué)得別扭。”

          “這就是第一堂課所說(shuō)的‘學(xué)會(huì)’與‘會(huì)學(xué)’的差距。”冒號(hào)挑明要害,“每種語(yǔ)言都有天然設(shè)計(jì)上的不同,當(dāng)你用得很別扭時(shí),恰恰說(shuō)明沒(méi)有真正掌握。正如刀法以劈為主,槍法以扎為主,你若反其道而行之,刀扎槍劈,能不別扭嗎?如果愣拿雙節(jié)棍當(dāng)單節(jié)棍使,恐怕沒(méi)砸到別人倒先砸暈自己了。可見(jiàn)不是兵器問(wèn)題,而是招法問(wèn)題。”

          下面隱約傳來(lái)周杰倫《雙節(jié)棍》的調(diào)子。

          問(wèn)號(hào)注意到:“似乎不只是初學(xué)者,大師們也會(huì)對(duì)一些語(yǔ)言提出過(guò)尖銳的批評(píng)。”

          冒號(hào)引用道:“C++的發(fā)明者Bjarne Stroustrup說(shuō)過(guò)這樣一句話,語(yǔ)言只有兩種:一種怨聲載道,一種無(wú)人問(wèn)津。”

          眾笑。

          句號(hào)有所體會(huì):“一種語(yǔ)言如果用者甚眾,自有其可取之處。沒(méi)有一種語(yǔ)言是完美的,愛(ài)之深者尚苛之切,何況其余者乎?”

          冒號(hào)忽然問(wèn):“你們知道對(duì)一種語(yǔ)言最大的批判是什么嗎?”

          眾人紛紛搖頭。

          “那就是發(fā)明一種與此語(yǔ)言有類(lèi)似功用的新語(yǔ)言。”冒號(hào)語(yǔ)速放緩,“Stroustrup認(rèn)為Simula太慢、BCPL又太底層,于是發(fā)明了C++Gosling覺(jué)得C++用得不爽,于是發(fā)明了Java;微軟惱恨Java,于是請(qǐng)Hejlsberg發(fā)明了C#Matsumoto用了兩年多的C++仍不順手,于是發(fā)明了Ruby。如此這般,不一而足。”

          嘆號(hào)無(wú)奈地說(shuō):“那是牛人的批評(píng)方法,常人怎能辦到?”

          “沒(méi)有能力發(fā)明語(yǔ)言,就老老實(shí)實(shí)地用別人的吧。”冒號(hào)酷酷地說(shuō),“對(duì)待一門(mén)語(yǔ)言的態(tài)度應(yīng)該是:與其抱怨?fàn)巿?zhí),不如揚(yáng)長(zhǎng)避短。”

          引號(hào)順勢(shì)道:“按這種說(shuō)法,編程語(yǔ)言的發(fā)展史就是一種批判史咯?”

          冒號(hào)祭起辯證法:“從另一個(gè)角度看,發(fā)明一種語(yǔ)言也是對(duì)先前語(yǔ)言的一種最高的贊美。C++之于CJava之于C++C#之于Java,都是后者對(duì)前者的一種承認(rèn),哪怕是極不情愿的承認(rèn)。批判與贊美,繼承與發(fā)展,謂之揚(yáng)棄。”

          眾人心想,語(yǔ)言課又改哲學(xué)課了。

          冒號(hào)續(xù)道:“對(duì)于編程語(yǔ)言還有一種論調(diào):語(yǔ)言只是一種工具,哪種都差不多。”

          逗號(hào)接茬:“是啊,經(jīng)常在論壇上看到一些高手這么說(shuō)。”

          “一群偽高手,是工具就差不多?能拿錘子當(dāng)?shù)妒箚幔?#8221;冒號(hào)嗤之以鼻,“過(guò)分拔高一種語(yǔ)言與抹煞語(yǔ)言之間的差別是兩種極端,皆為秕言謬說(shuō)。圖靈獎(jiǎng)獲得者Alan Perlis曾說(shuō)過(guò):如果一種語(yǔ)言不能影響你對(duì)編程的看法,那么就不值得去了解。試想,一種沒(méi)有獨(dú)特魅力的語(yǔ)言如何吸引程序員趨之若騖?了解這些獨(dú)特之處對(duì)于編程往往至關(guān)重要,如果沿襲以前語(yǔ)言的做法,會(huì)顯得不倫不類(lèi)甚至可能鑄成大錯(cuò)。”

          問(wèn)號(hào)要求:“能說(shuō)得具體點(diǎn)嗎?”

          冒號(hào)舉例:“有人說(shuō),學(xué)C++要先學(xué)C;還有人說(shuō),學(xué)會(huì)了CC++就不在話下了。”

          嘆號(hào)一驚:“難道不是嗎?”

          冒號(hào)解釋?zhuān)?#8220;其實(shí)C++的真正來(lái)源是Simula而不是C,向下兼容C只是因?yàn)?/span>C效率高、普及廣。換句話說(shuō),C++C形同而神異。學(xué)會(huì)了C當(dāng)然對(duì)C++有一定幫助,但若不能理解C++OOP思想,那么C的背景反而是一種障礙。”

          逗號(hào)想當(dāng)然:“C++Java都是OOP語(yǔ)言,差別該不大了吧?”

          冒號(hào)再次否定:“不同編程范式的語(yǔ)言差別固是不可以道里計(jì),即使同一范式的語(yǔ)言也是千差萬(wàn)別。一個(gè)純粹的C++程序員用Java編程,會(huì)非常不習(xí)慣沒(méi)有指針運(yùn)算、沒(méi)有內(nèi)存控制、沒(méi)有運(yùn)算符重載、沒(méi)有自由函數(shù)等等。一個(gè)純粹的Java程序員用C++編程,會(huì)極度不適應(yīng)相對(duì)貧乏的標(biāo)準(zhǔn)庫(kù);會(huì)困惑于指針、引用、數(shù)組、字符串還有頭文件等的用法;會(huì)毫不吝惜地在堆(heap)上創(chuàng)建新對(duì)象,并且從來(lái)不去釋放它們。這些概念或用法都是貫穿整個(gè)程序始終的,差別能不大嗎?”

          嘆號(hào)聽(tīng)罷嘆曰:“做一個(gè)好的程序員還真不容易。”

           “如果容易,我們開(kāi)這個(gè)班做什么?” 冒號(hào)笑道,“提一個(gè)問(wèn)題,程序員最不能離開(kāi)的應(yīng)用軟件是什么?”

          逗號(hào)順嘴道:“當(dāng)然是IDE了。”

          引號(hào)糾正:“應(yīng)該是編輯器,有些程序員用vi甚至記事本來(lái)寫(xiě)程序。”

          冒號(hào)插一句:“有人還在命令行下寫(xiě)程序。”

          嘆號(hào)眼瞪得溜圓:“怎么可能?”

          冒號(hào)眉毛一挑:“當(dāng)然可能,一些簡(jiǎn)單的程序完全可以在命令行下完成,然后重定向(redirect)到一個(gè)文件中或者直接編譯執(zhí)行。這種情況雖有些極端,對(duì)于那些離開(kāi)IDE就沒(méi)法編程的人來(lái)說(shuō)更是不可思議,但至少說(shuō)明編程離開(kāi)編輯器還是有可能的[1]。”

          句號(hào)突然明白了:“是編譯器!”

          “不錯(cuò),是編譯器或解釋器。”冒號(hào)作了一點(diǎn)修正。

          問(wèn)號(hào)有點(diǎn)茫然:“為什么談這個(gè)呢?”

          “因?yàn)榫幾g器或解釋器是語(yǔ)言實(shí)現(xiàn)的標(biāo)志。”冒號(hào)提高了聲調(diào),“我想借此說(shuō)明一個(gè)簡(jiǎn)單的道理:對(duì)一個(gè)程序員而言,編程語(yǔ)言乃立身之本。許多人偏偏本末倒置,常常為在IDE、框架、設(shè)計(jì)工具等中挖掘到某些新功能而欣喜不已,或者津津樂(lè)道于各種語(yǔ)言的優(yōu)劣高下,卻對(duì)正在使用的語(yǔ)言中大量的寶藏視而不見(jiàn),與執(zhí)金碗而行乞者何異?這些人若有幸拜關(guān)公為師,他們最艷羨的一定他的赤兔馬和青龍偃月刀,或許還會(huì)抹紅臉蓄長(zhǎng)須什么的,就是不太愿學(xué)他的蓋世武功。”

          引號(hào)質(zhì)疑:“我明白您是想修研強(qiáng)調(diào)內(nèi)功的重要性,但似乎有些唯語(yǔ)言論,設(shè)計(jì)思想不是更重要嗎?”

          冒號(hào)補(bǔ)充道:“我所談的語(yǔ)言,自然不是孤立的語(yǔ)法和用法,也包括背后的編程范式和設(shè)計(jì)思想。當(dāng)然更高層的架構(gòu)設(shè)計(jì)可能會(huì)脫離具體的語(yǔ)言,但那不在考慮之列,因?yàn)槲覀冋務(wù)摰闹黧w是程序員,而不是架構(gòu)師。”

          提到架構(gòu)師,眾人神往之情油然而生。

          冒號(hào)看透了大家的心思:“架構(gòu)師并沒(méi)有多么神秘,他們也是從程序員過(guò)來(lái)的。也不要以為架構(gòu)師就不關(guān)心語(yǔ)言了,相反需要對(duì)語(yǔ)言有更廣博、更深刻的認(rèn)識(shí)。理想的架構(gòu)師應(yīng)當(dāng)如文學(xué)大師,既有恢弘大氣的構(gòu)思,又有細(xì)膩深刻的筆法;應(yīng)當(dāng)如統(tǒng)軍大帥,既有運(yùn)籌帷幄的韜略,又有沖鋒陷陣的武功。那些在語(yǔ)言與低級(jí)之間、設(shè)計(jì)與高級(jí)之間毫不猶豫地劃等號(hào)的人,多半高不成低不就,既不懂語(yǔ)言,也不懂設(shè)計(jì)。”

          逗號(hào)仍有疑惑:“語(yǔ)言真有那么重要嗎?IDE的一些集成工具可以輔助生成許多代碼,或許到了某一天,拖拖鼠標(biāo)、畫(huà)個(gè)UML類(lèi)圖之類(lèi)的,程序就大功告成了。”

          冒號(hào)哈哈一笑:“這不就是元編程嗎?元編程也是用語(yǔ)言實(shí)現(xiàn)的。且不說(shuō)你描繪的美景是否可能,即便實(shí)現(xiàn)了,程序員的任務(wù)也是用更高級(jí)的語(yǔ)言做更高級(jí)的編程——還是離不開(kāi)語(yǔ)言。別忘了,技術(shù)含金量是與工資含金量成正比的,你永遠(yuǎn)需要比別人多一門(mén)扎實(shí)的功夫。程序員這門(mén)職業(yè),你選擇,你擔(dān)當(dāng)。好了,閑話打住,欲知在下如何評(píng)價(jià)各種編程語(yǔ)言,且聽(tīng)下回分解。”

          眾人聽(tīng)興正濃之際,課堂卻在說(shuō)書(shū)式的結(jié)語(yǔ)中戛然而止了。

           

          插語(yǔ)

          [1] 當(dāng)然,命令行本身也可看作編輯器,比如Bash提供viemacs兩種命令行編輯模式。

           
           總結(jié)

          • 因了解而喜愛(ài),因無(wú)知而憎惡。
          • 破除語(yǔ)言的宗教情結(jié),保持自我批判的勇氣和精神。
          • 過(guò)分拔高一種語(yǔ)言與抹煞語(yǔ)言之間的差別是兩種極端觀點(diǎn),皆不可取
          • 每種語(yǔ)言都有其特到之處和不足之處,與其抱怨?fàn)巿?zhí),不如揚(yáng)長(zhǎng)避短。
          • 編程語(yǔ)言在批判與贊美中逐步發(fā)展。
          • 編程語(yǔ)言是程序員的立身之本。切不可本末倒置,忽視語(yǔ)言的學(xué)習(xí),卻熱衷于挖掘IDE、框架、設(shè)計(jì)工具等的新功能。
          • 語(yǔ)言不等于低級(jí),設(shè)計(jì)也不等于高級(jí)。
          • 架構(gòu)師同樣關(guān)心語(yǔ)言,并且需要對(duì)語(yǔ)言有更深更廣的認(rèn)識(shí)。

           

          “”參考

          [1] Bjarne StroustrupThe Design and Evolution of C++Reading, MAAddison-Wesley199419-25

          [2]Alan PerlisEPIGRAMS IN PROGRAMMINGhttp://www.cs.yale.edu/homes/perlis-alan/quotes.html

           

          課后思考

          • 程序員這個(gè)職業(yè)合適你嗎?你在工作中勝任愉快嗎?
          • 你認(rèn)為理想的類(lèi)型系統(tǒng)應(yīng)該有哪些規(guī)則?
          • 你喜歡duck typing嗎?如何防止誤用和濫用?
          • 你是如何看待動(dòng)態(tài)語(yǔ)言的?與靜態(tài)語(yǔ)言相比,哪些是你所欣賞的,哪些是你所不滿(mǎn)的?
          • 你最熟悉哪種編程語(yǔ)言?你認(rèn)為它是最好的語(yǔ)言嗎?
          • 對(duì)一門(mén)不熟悉的編程語(yǔ)言,你是樂(lè)于了解和學(xué)習(xí)它,還是本能地漠視或排斥它?
          • 愛(ài)可以不需要理由,恨卻需要。能說(shuō)說(shuō)你恨某種語(yǔ)言的理由嗎?你確信它們站得住腳嗎?
          • 你是更愿意把時(shí)間花在編程工具的功能挖掘上,還是花在編程語(yǔ)言的深造學(xué)習(xí)上?

          posted on 2009-01-19 08:46 鄭暉 閱讀(4637) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): 冒號(hào)課堂

          評(píng)論

          # re: 冒號(hào)課堂§5.4:語(yǔ)言誤區(qū) 2009-01-20 09:27 heyang

          》》理想的架構(gòu)師應(yīng)當(dāng)如文學(xué)大師,既有恢弘大氣的構(gòu)思,又有細(xì)膩深刻的筆法;應(yīng)當(dāng)如統(tǒng)軍大帥,既有運(yùn)籌帷幄的韜略,又有沖鋒陷陣的武功。

          這個(gè)要求太高了,試問(wèn)天下程序員誰(shuí)人能當(dāng)?  回復(fù)  更多評(píng)論   

          # re: 冒號(hào)課堂§5.4:語(yǔ)言誤區(qū) 2009-01-20 09:41 鄭暉

          @heyang
          所以說(shuō)那是“理想”的架構(gòu)師。然而,正如文學(xué)大師和智勇雙全的統(tǒng)帥一樣,雖然罕見(jiàn),畢竟存在。  回復(fù)  更多評(píng)論   

          # re: 冒號(hào)課堂§5.4:語(yǔ)言誤區(qū) 2009-01-22 10:47 appu

          表述方式很特別。
          不過(guò)總算看到一看得懂的文章了...  回復(fù)  更多評(píng)論   

          # re: 冒號(hào)課堂§5.4:語(yǔ)言誤區(qū) 2010-03-17 15:58 外網(wǎng)

          這個(gè)要頂  回復(fù)  更多評(píng)論   

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          博客搬家:http://blog.zhenghui.org
          《冒號(hào)課堂》一書(shū)于2009年10月上市,詳情請(qǐng)見(jiàn)
          冒號(hào)課堂

          留言簿(17)

          隨筆分類(lèi)(61)

          隨筆檔案(61)

          文章分類(lèi)(1)

          文章檔案(1)

          最新隨筆

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 永嘉县| 永宁县| 博爱县| 六盘水市| 高雄县| 阿巴嘎旗| 静宁县| 延吉市| 麻江县| 阿合奇县| 富平县| 三原县| 岫岩| 肃南| 共和县| 静乐县| 都安| 慈利县| 鹿邑县| 浙江省| 柳林县| 西乌| 长葛市| 东丽区| 通江县| 太康县| 棋牌| 城口县| 通州区| 兰溪市| 崇信县| 原平市| 临邑县| 泸水县| 渭源县| 黄龙县| 澜沧| 安国市| 达尔| 和静县| 格尔木市|