<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    冒號課堂§5.4:語言誤區

     

    冒號課堂

    第五課 語言小談(4)

    5.4語言誤區——語言的宗教情結

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

    關鍵詞:編程語言,宗教,程序員,架構師

    摘要:關于編程語言的一些誤區


     預覽

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

    ·           語言只有兩種:一種怨聲載道,一種無人問津

    ·           對待一門語言的態度應該是:與其抱怨爭執,不如揚長避短

    ·           過分拔高一種語言與抹煞語言之間的差別是兩種極端,皆為秕言謬說

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

    ·           理想的架構師應當如文學大師,既有恢弘大氣的構思,又有細膩深刻的筆法;應當如統軍大帥,既有運籌帷幄的韜略,又有沖鋒陷陣的武功

     

     提問 

    ·           為什么那么多人對某些編程語言都有濃厚的宗教情結?

    ·           存在至高無上的語言嗎?

    ·           “語言不過是工具,其實都差不多”。這種論調正確嗎?

    ·           IDE、框架、設計工具等比語言更重要嗎?

    ·           語言是低級的代名詞,設計是高級的代名詞嗎?

    ·           架構師就不關心語言了嗎?


    講解

    “最后該談談你們最為關心的語言問題了。”冒號環視一番,眾人眼球的瓦數顯見增大,“如果說編程范式是一種文化,那么編程語言更像是一種宗教——盡管它本不該是。每種流行的語言都有大批忠實的信徒,隨時可能與其他的信徒發生宗教戰爭。”

    逗號深有同感:“周圍和網上關于語言的爭論從來不絕于耳,志不同道不合者動輒惡語相向。”

    提起這些,冒號不免有些忿忿然:“這些信徒或準信徒們認為他們所崇拜的語言鶴立雞群,遠比其他語言高明得多,恨不得成為全天下程序員的通用語言。對其他語言的使用者,或居高臨下地同情,或不屑一顧地譏諷。無知與偏見總是相輔相成的,他們中的絕大多數頂多熟悉一兩種語言,其他的或淺嘗輒止、或道聽途說,卻敢妄評優劣,豈不可笑之極?”

    引號點頭稱是:“是啊,沒有深入的了解,怎會有深入的比較。”

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

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

    嘆號道出苦衷:“只是真正掌握好一門語言已殊為不易,同時掌握幾種就更難。學完一種語言再看另一種,怎么都覺得別扭。”

    “這就是第一堂課所說的‘學會’與‘會學’的差距。”冒號挑明要害,“每種語言都有天然設計上的不同,當你用得很別扭時,恰恰說明沒有真正掌握。正如刀法以劈為主,槍法以扎為主,你若反其道而行之,刀扎槍劈,能不別扭嗎?如果愣拿雙節棍當單節棍使,恐怕沒砸到別人倒先砸暈自己了。可見不是兵器問題,而是招法問題。”

    下面隱約傳來周杰倫《雙節棍》的調子。

    問號注意到:“似乎不只是初學者,大師們也會對一些語言提出過尖銳的批評。”

    冒號引用道:“C++的發明者Bjarne Stroustrup說過這樣一句話,語言只有兩種:一種怨聲載道,一種無人問津。”

    眾笑。

    句號有所體會:“一種語言如果用者甚眾,自有其可取之處。沒有一種語言是完美的,愛之深者尚苛之切,何況其余者乎?”

    冒號忽然問:“你們知道對一種語言最大的批判是什么嗎?”

    眾人紛紛搖頭。

    “那就是發明一種與此語言有類似功用的新語言。”冒號語速放緩,“Stroustrup認為Simula太慢、BCPL又太底層,于是發明了C++Gosling覺得C++用得不爽,于是發明了Java;微軟惱恨Java,于是請Hejlsberg發明了C#Matsumoto用了兩年多的C++仍不順手,于是發明了Ruby。如此這般,不一而足。”

    嘆號無奈地說:“那是牛人的批評方法,常人怎能辦到?”

    “沒有能力發明語言,就老老實實地用別人的吧。”冒號酷酷地說,“對待一門語言的態度應該是:與其抱怨爭執,不如揚長避短。”

    引號順勢道:“按這種說法,編程語言的發展史就是一種批判史咯?”

    冒號祭起辯證法:“從另一個角度看,發明一種語言也是對先前語言的一種最高的贊美。C++之于CJava之于C++C#之于Java,都是后者對前者的一種承認,哪怕是極不情愿的承認。批判與贊美,繼承與發展,謂之揚棄。”

    眾人心想,語言課又改哲學課了。

    冒號續道:“對于編程語言還有一種論調:語言只是一種工具,哪種都差不多。”

    逗號接茬:“是啊,經常在論壇上看到一些高手這么說。”

    “一群偽高手,是工具就差不多?能拿錘子當刀使嗎?”冒號嗤之以鼻,“過分拔高一種語言與抹煞語言之間的差別是兩種極端,皆為秕言謬說。圖靈獎獲得者Alan Perlis曾說過:如果一種語言不能影響你對編程的看法,那么就不值得去了解。試想,一種沒有獨特魅力的語言如何吸引程序員趨之若騖?了解這些獨特之處對于編程往往至關重要,如果沿襲以前語言的做法,會顯得不倫不類甚至可能鑄成大錯。”

    問號要求:“能說得具體點嗎?”

    冒號舉例:“有人說,學C++要先學C;還有人說,學會了CC++就不在話下了。”

    嘆號一驚:“難道不是嗎?”

    冒號解釋:“其實C++的真正來源是Simula而不是C,向下兼容C只是因為C效率高、普及廣。換句話說,C++C形同而神異。學會了C當然對C++有一定幫助,但若不能理解C++OOP思想,那么C的背景反而是一種障礙。”

    逗號想當然:“C++Java都是OOP語言,差別該不大了吧?”

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

    嘆號聽罷嘆曰:“做一個好的程序員還真不容易。”

     “如果容易,我們開這個班做什么?” 冒號笑道,“提一個問題,程序員最不能離開的應用軟件是什么?”

    逗號順嘴道:“當然是IDE了。”

    引號糾正:“應該是編輯器,有些程序員用vi甚至記事本來寫程序。”

    冒號插一句:“有人還在命令行下寫程序。”

    嘆號眼瞪得溜圓:“怎么可能?”

    冒號眉毛一挑:“當然可能,一些簡單的程序完全可以在命令行下完成,然后重定向(redirect)到一個文件中或者直接編譯執行。這種情況雖有些極端,對于那些離開IDE就沒法編程的人來說更是不可思議,但至少說明編程離開編輯器還是有可能的[1]。”

    句號突然明白了:“是編譯器!”

    “不錯,是編譯器或解釋器。”冒號作了一點修正。

    問號有點茫然:“為什么談這個呢?”

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

    引號質疑:“我明白您是想修研強調內功的重要性,但似乎有些唯語言論,設計思想不是更重要嗎?”

    冒號補充道:“我所談的語言,自然不是孤立的語法和用法,也包括背后的編程范式和設計思想。當然更高層的架構設計可能會脫離具體的語言,但那不在考慮之列,因為我們談論的主體是程序員,而不是架構師。”

    提到架構師,眾人神往之情油然而生。

    冒號看透了大家的心思:“架構師并沒有多么神秘,他們也是從程序員過來的。也不要以為架構師就不關心語言了,相反需要對語言有更廣博、更深刻的認識。理想的架構師應當如文學大師,既有恢弘大氣的構思,又有細膩深刻的筆法;應當如統軍大帥,既有運籌帷幄的韜略,又有沖鋒陷陣的武功。那些在語言與低級之間、設計與高級之間毫不猶豫地劃等號的人,多半高不成低不就,既不懂語言,也不懂設計。”

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

    冒號哈哈一笑:“這不就是元編程嗎?元編程也是用語言實現的。且不說你描繪的美景是否可能,即便實現了,程序員的任務也是用更高級的語言做更高級的編程——還是離不開語言。別忘了,技術含金量是與工資含金量成正比的,你永遠需要比別人多一門扎實的功夫。程序員這門職業,你選擇,你擔當。好了,閑話打住,欲知在下如何評價各種編程語言,且聽下回分解。”

    眾人聽興正濃之際,課堂卻在說書式的結語中戛然而止了。

     

    插語

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

     
     總結

    • 因了解而喜愛,因無知而憎惡。
    • 破除語言的宗教情結,保持自我批判的勇氣和精神。
    • 過分拔高一種語言與抹煞語言之間的差別是兩種極端觀點,皆不可取
    • 每種語言都有其特到之處和不足之處,與其抱怨爭執,不如揚長避短。
    • 編程語言在批判與贊美中逐步發展。
    • 編程語言是程序員的立身之本。切不可本末倒置,忽視語言的學習,卻熱衷于挖掘IDE、框架、設計工具等的新功能。
    • 語言不等于低級,設計也不等于高級。
    • 架構師同樣關心語言,并且需要對語言有更深更廣的認識。

     

    “”參考

    [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

     

    課后思考

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

    posted on 2009-01-19 08:46 鄭暉 閱讀(4616) 評論(4)  編輯  收藏 所屬分類: 冒號課堂

    評論

    # re: 冒號課堂§5.4:語言誤區 2009-01-20 09:27 heyang

    》》理想的架構師應當如文學大師,既有恢弘大氣的構思,又有細膩深刻的筆法;應當如統軍大帥,既有運籌帷幄的韜略,又有沖鋒陷陣的武功。

    這個要求太高了,試問天下程序員誰人能當?  回復  更多評論   

    # re: 冒號課堂§5.4:語言誤區 2009-01-20 09:41 鄭暉

    @heyang
    所以說那是“理想”的架構師。然而,正如文學大師和智勇雙全的統帥一樣,雖然罕見,畢竟存在。  回復  更多評論   

    # re: 冒號課堂§5.4:語言誤區 2009-01-22 10:47 appu

    表述方式很特別。
    不過總算看到一看得懂的文章了...  回復  更多評論   

    # re: 冒號課堂§5.4:語言誤區 2010-03-17 15:58 外網

    這個要頂  回復  更多評論   

    導航

    統計

    公告

    博客搬家:http://blog.zhenghui.org
    《冒號課堂》一書于2009年10月上市,詳情請見
    冒號課堂

    留言簿(17)

    隨筆分類(61)

    隨筆檔案(61)

    文章分類(1)

    文章檔案(1)

    最新隨筆

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品久久久久免费a∨| 日本亚洲精品色婷婷在线影院| 亚洲日韩人妻第一页| 国产成人免费一区二区三区| 日本无卡码免费一区二区三区| 性盈盈影院免费视频观看在线一区| 一区二区无码免费视频网站| 国产卡二卡三卡四卡免费网址| 久久ww精品w免费人成| 亚洲av无码成人影院一区| 久久久久久国产精品免费免费| 9i9精品国产免费久久| 久久精品亚洲综合专区| 成人免费无码H在线观看不卡| 亚洲精品国产电影| 黄色网站软件app在线观看免费| 亚洲国产精品毛片av不卡在线 | 9久热这里只有精品免费| 亚洲人成网址在线观看| 亚洲精品自在在线观看| heyzo亚洲精品日韩| 亚洲一区精品伊人久久伊人| 亚洲欧洲日产国码av系列天堂| 亚洲高清国产拍精品26U| 亚洲人成电影在线天堂| 国产成人精品日本亚洲专一区| 亚洲国产精华液2020| 黄色毛片免费观看| 久久精品成人免费网站| 2020久久精品国产免费| 国产精品久免费的黄网站| 久久久久亚洲AV成人网| 久久亚洲日韩精品一区二区三区 | 在线视频免费观看www动漫| 国产成人免费高清在线观看| 曰韩亚洲av人人夜夜澡人人爽 | 免费在线黄色网址| 免费毛片在线看不用播放器| 香港a毛片免费观看| 最新中文字幕免费视频| 亚洲人成色77777在线观看大|