<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          各種編程語(yǔ)言的優(yōu)缺點(diǎn)

          共 14457字,需瀏覽 29分鐘

           ·

          2021-08-05 18:05

          數(shù)學(xué)算法俱樂(lè)部

          日期 : 2021年08月02日       

          正文共 11621字

          來(lái)源 : 伯樂(lè)在線



          【譯注】:圣經(jīng)記載:在遠(yuǎn)古的時(shí)候,人類都使用一種語(yǔ)言,全世界的人決定一起造一座通天的塔,就是巴別塔,后來(lái)被上帝知道了,上帝就讓人們使用不同的語(yǔ)言,這個(gè)塔就沒(méi)能造起來(lái)。巴別塔不建自毀,與其說(shuō)上帝的分化將人類的語(yǔ)言復(fù)雜化,不如說(shuō)是人類自身心靈和諧不再的分崩離析。之所以后來(lái)有了翻譯,不僅是為了加強(qiáng)人類之間的交流,更寄達(dá)了一種愿望,希望能以此消除人際的隔閡,獲求來(lái)自心靈的和諧及慰藉。真正的譯者,把握血脈,撫平創(chuàng)痕,通傳天籟,開(kāi)啟心門(mén)。

          這是我寫(xiě)的旋風(fēng)式的編程語(yǔ)言簡(jiǎn)介 —— 我本來(lái)為亞馬遜開(kāi)發(fā)者雜志本月的期刊寫(xiě)的,但是發(fā)現(xiàn)我寫(xiě)的東西沒(méi)法見(jiàn)人。

          首先,我偶爾一不小心口出臟話,或者對(duì)上帝不恭的話,所以在很官方很正式的亞馬遜上發(fā)表是不合適的;所以我就把它塞到我的博客里了,我的博客反正沒(méi)人看的。除了你以外。是的,只有你會(huì)看,你好啊。

          其次,這是一項(xiàng)進(jìn)行中的工程,現(xiàn)在只是東打一耙西搞一下,還沒(méi)有精加工過(guò)的。又一個(gè)把它寫(xiě)到博客里的很大的理由。不需要很好,或很完整。就是我今天想說(shuō)的一些話。請(qǐng)隨便!

          我的旋風(fēng)式簡(jiǎn)介會(huì)講C、C++、Lisp、Java、Perl (我們?cè)趤嗰R遜用到的所有語(yǔ)言)、Ruby (我就是喜歡) 和 Python,把 Python 加進(jìn)來(lái)是因?yàn)?—— 好吧,你看了就知道了,現(xiàn)在我可不說(shuō)。

          C

          你必須懂C。為哈? 因?yàn)槌鲇谒鞋F(xiàn)實(shí)的理由,這個(gè)世界上你過(guò)去,現(xiàn)在,將來(lái)會(huì)用到的每一臺(tái)計(jì)算機(jī)都是一臺(tái)馮·諾曼機(jī)器,而C是一種輕量級(jí)的,很有表達(dá)力的語(yǔ)法,能很好的展現(xiàn)馮·諾曼機(jī)器的能力。

          馮·諾曼架構(gòu)就是你每天都用的計(jì)算機(jī)的架構(gòu)的標(biāo)準(zhǔn):一個(gè) CPU,內(nèi)存,硬盤(pán),一條總線。多核計(jì)算機(jī)并沒(méi)有帶來(lái)本質(zhì)上的變化。馮·諾曼機(jī)是一個(gè)很方便,很便宜,上世紀(jì)五十年代的實(shí)現(xiàn)圖靈機(jī)的技術(shù),圖靈機(jī)是執(zhí)行計(jì)算的最知名的抽象模型。

          世上還有其他的計(jì)算的機(jī)器。比如,Lisp 機(jī)器,是上世紀(jì) 50 年代對(duì) Lisp 計(jì)算模型的實(shí)現(xiàn)。Lisp 模型是基于 lambda 代數(shù)的一種計(jì)算語(yǔ)言表示法,后者是與圖靈機(jī)同構(gòu)的一種模型。不像圖靈機(jī),lambda 代數(shù)能被人類讀和寫(xiě)。但是這二者是同等能力的。它們同樣精確的表示了計(jì)算機(jī)能干什么。

          Lisp 機(jī)現(xiàn)在不是很流行了,除了在跳蚤市場(chǎng)里。從誰(shuí)更受歡迎來(lái)說(shuō),馮·諾曼機(jī)器贏了。還有一些其他的計(jì)算機(jī),比如神經(jīng)網(wǎng)絡(luò)計(jì)算機(jī),譯者也不知道怎么翻的計(jì)算機(jī)(cellular automata),但是這些都不夠大眾化,至少現(xiàn)在是這樣的。

          所以你必須知道C。

          還有一個(gè)你必須知道C的原因是,Unix 是用C寫(xiě)的。巧的是,Windows 也是。基本上所有的其他操作系統(tǒng)都是用C寫(xiě)的。因?yàn)檫@些操作系統(tǒng)都是馮·諾曼機(jī)的操作系統(tǒng),你還能用別的嗎? 任何跟C很不一樣的東西都會(huì)跟硬件的實(shí)際能力相差太遠(yuǎn)而導(dǎo)致無(wú)法滿足性能上的需要,至少對(duì)一個(gè)操作系統(tǒng)來(lái)說(shuō)是這樣—至少在上個(gè)世紀(jì)是這樣,碰巧這些系統(tǒng)都是上個(gè)世紀(jì)的。

          你還應(yīng)該知道 Lisp。你不必用它來(lái)干實(shí)際工作,雖然它在很多 GNU 的軟件里都會(huì)很用得著。尤其是,你應(yīng)該學(xué)會(huì) Scheme,Lisp 的一種小巧化的,純潔的方言。GNU 的版本叫 Guile。

          他們?cè)诼槭±砉ず图又莶死绦聦W(xué)生一到兩個(gè)學(xué)期的 Scheme,這些學(xué)生都對(duì)他們?yōu)楣獙W(xué)這么奇怪的語(yǔ)言抓破腦袋。實(shí)話實(shí)說(shuō),作為第一門(mén)學(xué)習(xí)的語(yǔ)言,這是一個(gè)很爛的選擇,第二門(mén)也是很爛。你應(yīng)該學(xué)會(huì)它,最終,但不是作為第一門(mén)或第二門(mén)語(yǔ)言。

          這是很難的哦。這是很大的一步。學(xué)會(huì)怎么用 Lisp 寫(xiě)出像C語(yǔ)言的程序是不夠的,那沒(méi)有意義。C 和 Lisp 一個(gè)就像紅外線,一個(gè)就像紫外線,它們分布在光譜的最兩端。它倆一個(gè)牛逼的地方剛好是另一個(gè)傻逼了的地方。

          如果說(shuō),C是最靠近計(jì)算機(jī)是如何工作的語(yǔ)言模型,Lisp 就是最能反映計(jì)算(注意,這里沒(méi)有了“機(jī)”字,計(jì)算機(jī)和計(jì)算是很不同的!譯者注)是如何工作的模型。你不需要懂很多 Lisp,真的。緊咬 Scheme 就哦了,因?yàn)樗亲詈?jiǎn)單最干凈的。其他的 Lisp 已經(jīng)發(fā)展成了很大,很復(fù)雜(很好很強(qiáng)大? 譯者:-)的編程環(huán)境,就像 C++ 和 Java,要有很多庫(kù)啊,工具啊等等之類。那些,你不需要知道。但是你應(yīng)該能用 Scheme 寫(xiě)程序。如果你能夠做出 The Little Schemer 和 The Seasoned Schemer 這兩本書(shū)里的所有習(xí)題,你懂得就夠多了,我認(rèn)為。

          但是對(duì)于你天天要做的編程工作,你應(yīng)該基于以下條款選擇你的語(yǔ)言:庫(kù),文檔,工具支持,操作系統(tǒng)集成,資源,和一堆其他的東西。這些條款跟計(jì)算機(jī)如何工作關(guān)系很小,但是跟人類如何工作關(guān)系甚大。

          人們還在用很直白的C語(yǔ)言寫(xiě)東西。很多東西。你應(yīng)該懂C!

          C++

          C++是地球上最蠢的語(yǔ)言,即使是從蠢這個(gè)字的真正意義上出發(fā)。C++很無(wú)厘頭。它不知道自己是什么東西。它沒(méi)有自省(introspective,面向?qū)ο罄锏囊粋€(gè)概念,譯者注)。C也沒(méi)有,但是C不是“面向?qū)ο蟆钡模嫦驅(qū)ο蠛艽蟪潭壬鲜顷P(guān)于要讓你的程序知道它自己。對(duì)象就像演員。所以面向?qū)ο笳Z(yǔ)言應(yīng)該有運(yùn)行時(shí)的自省機(jī)制,知道自己是個(gè)什么類的對(duì)象。C++不是這樣的,真的,你不會(huì)那樣用它。

          關(guān)于C:寫(xiě)一個(gè)C的編譯器是那么的簡(jiǎn)單,以至于你可以用C寫(xiě)一個(gè)關(guān)于C的工具,用起來(lái)就像是有內(nèi)省機(jī)制。而 C++ 呢,基本上是不可解析的,所以如果你想寫(xiě)一個(gè)很牛逼的工具用來(lái) —— 比如,告訴你你的虛函數(shù)的原型,或者幫你重構(gòu)你的代碼,你將不得不依賴別人的工具集,因?yàn)槟阕约涸诔悄X子進(jìn)屎的情況下是根本不會(huì)去寫(xiě)一個(gè) C++ 的解析器的。而市面上所有的 C++ 的解析器都很傻逼。

          C++很蠢,你不能用蠢語(yǔ)言創(chuàng)造一個(gè)好系統(tǒng)。語(yǔ)言決定世界,蠢語(yǔ)言決定蠢世界。

          所有的計(jì)算都基于抽象。你用低級(jí)的東西創(chuàng)造出高級(jí)的東西。但是你不能用分子創(chuàng)造出一個(gè)城市。嘗試使用太低級(jí)別的抽象只會(huì)給你帶來(lái)麻煩。

          我們就惹上麻煩了 (是指亞馬遜的員工,還是所有 C++ 的程序員? 我也不知道,譯者注)。

          理智的情況下,你用C寫(xiě)的最大的東東就是一個(gè)操作系統(tǒng)。而操作系統(tǒng)其實(shí)不是很大的,真的。它們看起來(lái)很大,但那是因?yàn)樗鼈冇泻芏鄳?yīng)用軟件,操作系統(tǒng)本身的內(nèi)核是蠻小的。

          你用 C++ 能寫(xiě)的最大的東東是…也是操作系統(tǒng)。好吧,或許稍微再大點(diǎn)兒。讓我們說(shuō),再大三倍吧。或者 10 倍吧。但是操作系統(tǒng)內(nèi)核最多也就,那啥,一百萬(wàn)行代碼? 所以我說(shuō)你能用 C++ 寫(xiě)的最大的系統(tǒng)大概也就是一千萬(wàn)行代碼吧,再大的話就開(kāi)始不行了,這玩意兒你沒(méi)法控制了,就像恐怖片里的…

          我說(shuō)的一千萬(wàn)行是指如果你那時(shí)候還能讓你的系統(tǒng)編譯通過(guò)的話。

          我們(在亞馬遜,譯者注)有五千萬(wàn)行 C++ 代碼。不,現(xiàn)在還要更多了。我已經(jīng)不知道有多少行了。上個(gè)圣誕節(jié)是五千萬(wàn)行,那是九個(gè)月前,而它以每季度八百萬(wàn)行的規(guī)模增長(zhǎng)。增長(zhǎng)率本身也增長(zhǎng),媽呀。

          我們想在這個(gè)系統(tǒng)里干點(diǎn)啥好像要一萬(wàn)年。一個(gè)亞馬遜工程師有一次這樣描述我們的代碼庫(kù):“一座很大的屎山,你見(jiàn)過(guò)的最大的山,每次你想修正一個(gè) bug,你的工作就是爬到屎山的正中心去。”

          伙計(jì)們,那哥們可是在四年前說(shuō)的這話。他現(xiàn)在已經(jīng)到更環(huán)保綠色的牧場(chǎng)上去了。真是太可惜了,他可是個(gè)實(shí)實(shí)在在的高手啊。

          這都是 C++ 的錯(cuò)。別跟我爭(zhēng)論。就是的。我們用的是世上最蠢的語(yǔ)言。這簡(jiǎn)直有點(diǎn)老板級(jí)的蠢,你說(shuō)呢? (譯者注,meta 在計(jì)算機(jī)術(shù)語(yǔ)里通常表示更高一個(gè)層次,比如,meta-language,比普通的 language 高一個(gè)層次,意思是關(guān)于語(yǔ)言的語(yǔ)言。哲學(xué)里應(yīng)該會(huì)經(jīng)常用到這個(gè)詞。我不懂哲學(xué),但是我覺(jué)得老板們總是比我們高一級(jí),所以 meta-dump 我就翻譯成老板級(jí)的蠢嘍。:-)

          說(shuō)了以上這些難聽(tīng)的話,話得說(shuō)回來(lái)了。用 C++ 寫(xiě)出漂亮的代碼顯然是可以的,我的意思是說(shuō),這樣的代碼應(yīng)該大部分還是C,偶爾很有品味的,很有節(jié)制的用一點(diǎn)C++。但是這種代碼幾乎從來(lái)不會(huì)被寫(xiě)出來(lái)。C++是個(gè)很好玩的游樂(lè)場(chǎng),而如果你把它玩兒得門(mén)兒清的話你會(huì)覺(jué)得自己特牛,所以你總是被誘惑把你知道的所有的東西都用上。但是那是很難做好的,因?yàn)閺囊婚_(kāi)始這個(gè)語(yǔ)言就太狗屎了,最終,你會(huì)弄得一塌糊涂,即使你很能干。

          我知道,我說(shuō)的都是異端邪說(shuō),該被釘?shù)绞旨苌系摹kS便吧。我在大學(xué)里的時(shí)候老喜歡 C++ 了,因?yàn)槲夷菚r(shí)候就只知道這一門(mén)語(yǔ)言。當(dāng)我聽(tīng)到我的語(yǔ)言教授,Craig Chambers,絕對(duì)的厭憎C++,我想:“為啥呢? 我覺(jué)得它挺好的啊”。而當(dāng)我聽(tīng)到 STL (標(biāo)準(zhǔn)模板庫(kù))的發(fā)明者被采訪時(shí)說(shuō)他恨 OOP (面向?qū)ο缶幊?時(shí),我更是認(rèn)為他肯定是磕藥了。怎么會(huì)有人恨 OOP 呢,而這個(gè)人竟然還是 STL 的發(fā)明者?

          親不敬,熟生厭(語(yǔ)出圣經(jīng),譯者注)。說(shuō)的是在大多數(shù)情況下,跟一件事物熟悉了之后你就失去對(duì)它的膜拜尊敬了; 在計(jì)算機(jī)語(yǔ)言里情況不是這樣的。光對(duì)一門(mén)語(yǔ)言熟悉不會(huì)導(dǎo)致你看輕這門(mén)語(yǔ)言。你必須成為另一門(mén)更優(yōu)秀的語(yǔ)言的專家(才能讓你明白原來(lái)那門(mén)語(yǔ)言有多么多的問(wèn)題)。

          所以如果你不喜歡我針對(duì) C++ 大放厥詞,請(qǐng)你去學(xué)另一門(mén)語(yǔ)言并成為一個(gè)專家(我推薦 Lisp),只有那時(shí)你才有足夠的武器與我爭(zhēng)論。然而,那時(shí)你將不會(huì)跟我爭(zhēng)了。你上了我的當(dāng)了。你也會(huì)跟我一樣變得不喜歡 C++ 了,你或許會(huì)覺(jué)得我這個(gè)人很惡心,把你騙得不喜歡自己曾經(jīng)的最愛(ài)了。所以或許你應(yīng)該把我說(shuō)的一切都忘了。C++挺好的其實(shí),真的。它就是很棒棒(譯者注,作者在這里用了 ducky,這是一個(gè)女性喜歡用的夸某物好的詞,近來(lái)也為玻璃們喜愛(ài))。忘了我說(shuō)的話。C++不錯(cuò)的。

          Lisp

          (我打賭這一節(jié)會(huì)讓你覺(jué)得驚訝,即使你已經(jīng)關(guān)注我的博客有一陣了[譯者注,作者也可能是說(shuō),即使你成為亞馬遜的員工有一陣了])

          亞馬遜創(chuàng)業(yè)之初,我們有很多明星級(jí)的工程師。我不認(rèn)識(shí)他們所有人,但是我認(rèn)識(shí)幾個(gè)。

          比如?Shel Kaphan, 大拿。Greg Linden, 大拿。Eric Benson。即使在他加入亞馬遜之前就已經(jīng)有自己響亮的名氣了。也是大拿。

          他們寫(xiě)了 Obidos 服務(wù)器。是 Obidos 讓亞馬遜成功的。只是后來(lái)那些生產(chǎn)大便很拿手的工程師,網(wǎng)頁(yè)開(kāi)發(fā)者,搞前端的人 —— 這些人因?yàn)樯a(chǎn)大便很拿手而總是能讓經(jīng)理們滿意 —— 只是在后來(lái)這些人把 Obidos 搞糟了。(他們的大便)把整條河都堵了,打個(gè)比方說(shuō)的話。但是 Obidos 是亞馬遜最初的成功的一塊關(guān)鍵的基石。

          這些最早的牛人們?cè)趤嗰R遜神圣的代碼庫(kù)里只允許兩種語(yǔ)言:C 和 Lisp。

          你自己去想吧。

          當(dāng)然,他們所有人都使用 Emacs。靠,Eric Benson 是 XEmacs 的作者之一。這個(gè)世界上所有偉大的工程師都在用 Emacs[注1]。那種世界因你而不同級(jí)別的偉大。不是坐在你旁邊的格子里的那哥們那種偉大。也不是 Fred,走廊盡頭那哥們。我說(shuō)的是我們這個(gè)行業(yè)里最偉大的軟件開(kāi)發(fā)者,那些能改變這個(gè)工業(yè)的面貌的人。像 James Gosling 們(Java 語(yǔ)言設(shè)計(jì)者),Donald Knuth 們(這個(gè)人沒(méi)有聽(tīng)說(shuō)過(guò)的話趕緊改行吧,別搞計(jì)算機(jī)了),Paul Graham 們[注2],Jamie Zawinski 們,Eric Benson 們。真正的工程師用 Emacs。你必須很有點(diǎn)聰明才能把 Emacs 用好,而如果你能成為一個(gè) Emacs 大師的話它會(huì)給你難以置信的牛力。有機(jī)會(huì)的話你應(yīng)該站到 Paul Nordstrom 的肩后看看他是怎么工作的,如果你不相信我的話。對(duì)那些一輩子都在用爛 Visual Studio 之類的集成開(kāi)發(fā)環(huán)境的人來(lái)說(shuō),一定會(huì)大開(kāi)眼界的。

          Emacs 是那種你可以用 100 年的編輯器。

          Shel, Eric, Greg,和其他像他們那樣的人,我沒(méi)有足夠幸運(yùn)能跟他們直接一起工作:他們禁止在這里使用C++,他們禁止使用 Perl(或者 Java,為完整起見(jiàn))。他們是明白人。

          現(xiàn)在我們都在用C++,Java 和 Perl 了,所有的代碼都用這些語(yǔ)言。我們的前輩們已經(jīng)到更環(huán)保的牧場(chǎng)上去了 (指沒(méi)有大便的牧場(chǎng),譯者注)。

          Shel 用 C 寫(xiě)了 Mailman,客服部的人把它用 Lisp 封裝了一下。Emacs-Lisp。你不需要知道 Mailman 是什么東西。除非你是個(gè) Amazon 的老員工,或許不是搞技術(shù)的,而且你曾經(jīng)不得不讓客戶哈皮 (只有在這種情況下你才需要知道 Mailman,譯者注)。不是間接的,因?yàn)槟阌?C++ 寫(xiě)的一個(gè)狗屎功能跑不起來(lái)了,讓客戶很生氣,于是你不得不去搞定它以恢復(fù)客戶的哈皮度。不,我是說(shuō)直接的,意思是,你必須跟他們聊。我們可愛(ài)的,不識(shí)字的,呱呱其談的,心地善良的,充滿希望的,困惑的,能幫點(diǎn)小忙的,憤怒的,哈皮的客戶們,真正的客戶們,那些從咱們這里買(mǎi)東西的人,我們的客戶們。(如果你必須跟他們打交道的話,)那你就會(huì)知道 Mailman 這個(gè)東西。

          Mailman 是客服部的客戶電子郵件處理軟件,我們用了它有…四,五年? 反正是很長(zhǎng)時(shí)間。它是用 Emacs 寫(xiě)的,所有人都愛(ài)死它了。

          人們現(xiàn)在還很愛(ài)它。直到今天,我依舊不得不聽(tīng)我們一些非技術(shù)員工跟我長(zhǎng)篇大論的叨叨他們是多么的懷念 Mailman。我可絕不是滿嘴噴糞。上個(gè)圣誕節(jié)我參加了一個(gè) Amazon 的派對(duì),一個(gè)我不知道自己怎么會(huì)被邀請(qǐng)的派對(duì),里面全是些西裝筆挺的商務(wù)人士,誰(shuí)都長(zhǎng)得比我?guī)洠任夜怩r。以及一些我在公司里曾經(jīng)打過(guò)交道的人(這句不知道怎么譯)。四個(gè)美女認(rèn)出了我是在客服部里干的,把我包圍了,跟我說(shuō)了十五分鐘她們是多么的懷念 Mailman 和 Emacs,而現(xiàn)在的亞馬遜(我們用 JSP 花了好多年準(zhǔn)備換掉 Mailman 的那一套軟件)是怎么的不能滿足她們,讓她們覺(jué)得跟以前一樣爽。

          這一切都太夢(mèng)幻了,我覺(jué)得她們可能是喝多了。

          Shel 是個(gè)天才。Emacs 是天才。連非技術(shù)人員都愛(ài) Emacs。我現(xiàn)在就是在 Emacs 里打這些文字。我絕不情愿在任何其他地方打字。這不只是關(guān)于讓你的效率得到飛躍,通過(guò)那些地球上其他地方找不到的快捷鍵和文本編輯功能。我每分鐘打一百三到一百四十個(gè)英文單詞,在 Emacs 里,當(dāng)我在寫(xiě)沒(méi)有格式要求的文本的時(shí)候。我測(cè)過(guò)這個(gè)時(shí)間速度。自己寫(xiě)了一個(gè)測(cè)打字速度的 Emacs 應(yīng)用。但我想跟你說(shuō)的不只是這個(gè)。

          Emacs 有的是一種你叫不出名字來(lái)的品質(zhì)。

          我們現(xiàn)在不用 Mailman 了。那是因?yàn)槲覀冇幸环N叫得出名字的品質(zhì) —— 就是,爛。我們很爛。我們(當(dāng)時(shí))找不到 Emacs-Lisp 足夠牛的人把 Mailman 繼續(xù)搞下去。今天這應(yīng)該不難了; 亞馬遜現(xiàn)在到處都是 Emacs Lisp 的黑客。但是在那時(shí)候,客服部的人沒(méi)法從別人那里得到幫助。于是他們就用他們當(dāng)時(shí)手頭有的資源去搞這件事。他們當(dāng)時(shí)沒(méi)有足夠多的 Emacs-Lisp 的人。有一段時(shí)間,他們甚至找來(lái) Bob Glickstein 當(dāng)合同工,那個(gè)給 O’Reilly 寫(xiě)了那本 Gnu Emacs 擴(kuò)展的書(shū)的家伙,坐在一個(gè)小辦公室里給 Emacs 寫(xiě) Mailman 的擴(kuò)展。

          客服應(yīng)用部是 Amazon 的第一個(gè)兩塊比薩餅的團(tuán)隊(duì)(代表團(tuán)隊(duì)人數(shù)的增加,編者注)。這個(gè)團(tuán)隊(duì)是完全自立的。不管是那時(shí)還是現(xiàn)在。沒(méi)人跟他們說(shuō)話,沒(méi)人幫他們。沒(méi)有槍,沒(méi)有炮,他們自己造。他們沒(méi)有網(wǎng)頁(yè)工程師,沒(méi)有支持工程師。屁也沒(méi)有。有的只是一堆骨灰級(jí)的工程師和一個(gè)能帶新人的文化。這就是他們需要的一切了。

          但他們最終不得不讓 Mailman 光榮退休。媽哎。而我呢今天還聽(tīng)到人們說(shuō)他們是多么的懷念它。甚至在派對(duì)上。

          我想今天按人頭比例來(lái)說(shuō),客服部仍然擁有比亞馬遜任何其他團(tuán)隊(duì)更多的 Lisp 黑客。可能他們用到 Lisp 的機(jī)會(huì)不多了,但是 Eric Raymond 說(shuō)過(guò),即使你很少用 Lisp 寫(xiě)程序,學(xué)習(xí) Lisp 會(huì)是意義深遠(yuǎn)的一個(gè)經(jīng)歷,能讓你下輩子都成為一個(gè)更好的工程師。

          卡爾,宗教現(xiàn)在已經(jīng)不是大眾的精神鴉片了。現(xiàn)在鴉片是集成開(kāi)發(fā)環(huán)境了。(卡爾·馬克思。這個(gè)人不知道的話應(yīng)該打屁屁)。

          Java

          Java 是過(guò)去的 10 年中計(jì)算行業(yè)里發(fā)生過(guò)的最好的同時(shí)也是最壞的事。

          一方面,Java 把你從 C++ 編程的很多枯燥易錯(cuò)的細(xì)節(jié)中解救出來(lái)了。沒(méi)有數(shù)組越界了,沒(méi)有 core dump 了。拋出來(lái)的異常能讓你精確定位到出錯(cuò)的那一行代碼,而且 99% 的時(shí)候都是正確的那一行出錯(cuò)了的代碼。對(duì)象們?cè)谛枰臅r(shí)候能智能地把它們自己打印出來(lái)。等等等等。

          另一方面,除了是一種語(yǔ)言,一個(gè)虛擬機(jī),一個(gè)巨無(wú)霸的類庫(kù),一個(gè)安全模型,一個(gè)可移植的字節(jié)碼格式,Java 還是一個(gè)宗教。邪教。所以你不能太相信對(duì)它太虔誠(chéng)的人。想要招一個(gè)好的 Java 工程師是一項(xiàng)很有技術(shù)挑戰(zhàn)的活。

          但是總的來(lái)說(shuō),Java 是軟件工程史上的一大進(jìn)步。

          從 C++ 到 Java 不只是語(yǔ)法上的改變。這是一種需要一段時(shí)間去好好體會(huì)的一種震撼性的世界觀的轉(zhuǎn)變。這有點(diǎn)像突然你被配了一個(gè)執(zhí)行助理。你知道老總們?yōu)槭裁纯偸呛孟裼袝r(shí)間去開(kāi)會(huì),總是知道公司現(xiàn)在運(yùn)行的情況,總是寫(xiě)出很酷酷的文檔嗎? 老總們常常忘記其實(shí)他們不是一個(gè)人在戰(zhàn)斗,他們都是兩個(gè)全職的人,他們和他們的執(zhí)行助理們。有一個(gè)執(zhí)行助理把你從瑣事中解救出來(lái)讓你有時(shí)間去思考那些真的需要你去解決的問(wèn)題; 沒(méi)有的話你將不得不花一半的時(shí)間在那些無(wú)聊的世俗的事情上。切換到 Java 編程語(yǔ)言就把你變成了兩個(gè)程序員 —— 一個(gè)處理那些你不需要關(guān)心的東西,另一個(gè)可以集中精力在問(wèn)題本身上。這是一個(gè)很震人的改變,一個(gè)你應(yīng)該很快就能習(xí)慣能喜歡上的改變。

          就像 Jamie Zawinski (Netscape 牛人,開(kāi)發(fā) Mozilla 瀏覽器,好像學(xué)歷是高中畢業(yè)?)在他著名的“Java 真爛(java sucks)”那篇文章里說(shuō)的:“先說(shuō)那些好東西:Java 沒(méi)有 free() 函數(shù)。我必須一開(kāi)始就承認(rèn),其他的東西都沒(méi)什么了不起。(沒(méi)有 free)是能讓我原諒其他所有東西的特性,不管其他東西有多爛。講完這一點(diǎn)后,我的文章里其他一切幾乎都完全沒(méi)有重要性了。”

          Jamie 的文章寫(xiě)在 1997 年,按 Java 年來(lái)算的話是很早以前了,跟他寫(xiě)這篇文章時(shí)比,Java 已經(jīng)有很大的改善; 一些他抱怨的東西甚至已經(jīng)被 fix 了。

          但是大多數(shù)還是沒(méi)有被 fix。Java 作為一門(mén)語(yǔ)言還是有點(diǎn)爛。但就如 Jamie 指出的,Java“是今天為止最好的語(yǔ)言。我的意思是說(shuō),它是今天市面上那些爛得底兒掉地一堆語(yǔ)言比起來(lái)有那么一點(diǎn)能被我接受。”

          真的,你應(yīng)該讀讀他那篇文章。

          Java 幾乎每一方面都很好,除了它的語(yǔ)言本身,而這是 JWZ 抱怨的主要對(duì)象。但那是一個(gè)很大的抱怨。再好的庫(kù)也救不了一個(gè)爛語(yǔ)言。相信我:你可能比我知道多得多的東西,但是我知道好兵救不了爛將。在 Geoworks 搞了五年匯編語(yǔ)言都會(huì)了我這個(gè)道理。

          跟 C++ 比,Java 作為一個(gè)語(yǔ)言還過(guò)得去。好吧,別扯了,Java 要好很多。因?yàn)樗?內(nèi)建)的字符串。哥們,你說(shuō)一個(gè)沒(méi)有內(nèi)建的字符串的語(yǔ)言是人用的嗎。

          但是 Java 跟 C++ 比少了一些好東西,比如(函數(shù)調(diào)用時(shí))傳引用,棧上的對(duì)象,typedef,宏,以及運(yùn)算符重載。一些時(shí)不時(shí)地會(huì)很稱手的東西。

          哦,還有多重繼承,我現(xiàn)在老了,反而挺欣賞了的多重繼承。如果你認(rèn)為我這個(gè)觀點(diǎn)僵硬不靈活的家伙是多態(tài)教義很好的反例的話,我倒是可以給你舉幾個(gè)為什么你需要多態(tài)繼承的好例子,或者至少像 Ruby 那樣的 mixin 或者自動(dòng)的派遣。下次問(wèn)問(wèn)我白龍馬的事情。今天我要告訴你為什么 Java 的 interface 是個(gè)爛貨。

          幾年前 Gosling 自己都說(shuō),如果一切都能重來(lái)的話,他不會(huì)搞出個(gè) interface 的概念。

          但是那正是 Java 的問(wèn)題。當(dāng) James 說(shuō)出那句話的時(shí)候,人們被雷到了。我甚至能感覺(jué)到那股雷勁兒,能感覺(jué)到 Sun 公司市場(chǎng)部和法務(wù)部的鳥(niǎo)人是多么想把 James 滅口,然后告訴大家他沒(méi)那么說(shuō)過(guò)。

          Java 的問(wèn)題就是人們都被那幫人搞的廣告效應(yīng)蒙住了眼。C++,Perl,任何流行語(yǔ)言都有這個(gè)問(wèn)題。這是很嚴(yán)重的,因?yàn)槿绻麤](méi)有一些說(shuō)大話吹牛逼的廣告,一個(gè)語(yǔ)言是不會(huì)流行起來(lái)的。所以如果一個(gè)語(yǔ)言的設(shè)計(jì)者說(shuō)他的語(yǔ)言沒(méi)有被設(shè)計(jì)得很完美的話,就是趕緊用麻醉槍射擊這胡說(shuō)八道的家伙并關(guān)閉會(huì)議的時(shí)候了。

          語(yǔ)言們需要放點(diǎn)兒衛(wèi)星才能活,我只希望人們不要被衛(wèi)星耀瞎了眼。

          我學(xué)了面向?qū)ο缶幊蹋?我自己也對(duì)此大吹大擂。當(dāng)我加入亞馬遜時(shí),我不能告訴你我有什么智慧或者經(jīng)驗(yàn),但我可以給你背誦出所有關(guān)于 OOP 的魔咒。多重繼承是邪惡的,因?yàn)榇蠹叶歼@么說(shuō); 運(yùn)算符重載是邪惡的,諸如此類。我甚至有點(diǎn)模糊地知道為什么是邪惡的,但實(shí)際上不知道。后來(lái)我明白了,這些都不邪惡,不是爛玩意兒,爛的是開(kāi)發(fā)者,是我。我現(xiàn)在還是爛,但是希望每年都不爛一點(diǎn)起來(lái)。

          上禮拜我碰到一個(gè)來(lái)面試的,他告訴我多繼是邪惡的,因?yàn)椋热纾憧梢詮念^,胳膊,腿,軀干多重繼承出一個(gè)人來(lái)。他既是對(duì)的,又是錯(cuò)的。那樣的多繼情形當(dāng)然邪惡,但那都是因?yàn)樗约禾皭毫恕D菢永^承出來(lái)的“東西”遠(yuǎn)遠(yuǎn)就能看見(jiàn)有多蠢,如果他還把這玩意兒弄進(jìn)門(mén)來(lái)那就更邪惡了。

          不良開(kāi)發(fā)者,占了這世上開(kāi)發(fā)者的大多數(shù),他們能用你扔給他們隨便什么語(yǔ)言寫(xiě)出不良的代碼。

          說(shuō)了這些,還是得說(shuō)回來(lái),多繼不是請(qǐng)客吃飯那么輕松的事兒; mixin 看起來(lái)是更好的解決方案,但是還沒(méi)人完美的解決這個(gè)問(wèn)題。但我還是認(rèn)為 Java 比 C++ 好,即使它沒(méi)有多繼。因?yàn)槲抑啦还芪业某霭l(fā)點(diǎn)是多么好,某一天我還是會(huì)被一堆不懂怎么寫(xiě)好代碼的人包圍,讓他們用 Java 比用 C++ 會(huì)帶來(lái)更少的傷害。

          此外,Java 除了語(yǔ)言本身外還有老多其他的重要有用的東西。且 Java 語(yǔ)言本身也在進(jìn)化,雖然像冰川一樣慢,所以我們還是能看到希望。Java 正是我們應(yīng)該在亞馬遜推薦使用的語(yǔ)言。

          你就是得小心點(diǎn)兒,因?yàn)楹推渌魏握Z(yǔ)言一樣,你能很容易找出一堆人,他們很懂一門(mén)語(yǔ)言及其編程環(huán)境,但對(duì)品味,計(jì)算或者其他任何重要的東西卻一無(wú)所知。

          當(dāng)你有懷疑時(shí),還是雇那種會(huì)好幾門(mén)語(yǔ)言的 Java 程序員,那種厭憎 J2EE/EJB 之類松松跨跨的所謂框架的,那種使用 Emacs 的。這都是一些實(shí)戰(zhàn)經(jīng)驗(yàn)。

          Perl

          Perl,怎么說(shuō)呢?

          Perl 是個(gè)老朋友。老老朋友。我開(kāi)始寫(xiě) Perl 代碼的時(shí)候,可能是 1995 年。而它為我很好的服務(wù)了差不多 10 年的時(shí)間。

          它就像你騎了十萬(wàn)二十萬(wàn)英里的老自行車,你心里永遠(yuǎn)有一塊地方裝著它,雖然現(xiàn)在你已經(jīng)換了一輛更加現(xiàn)代化的只有五磅重的自行車,而且這一輛也不像老的那輛頂?shù)媚闫ㄑ厶哿恕?/span>

          Perl 受歡迎原因有仨:

          1. 用 Perl 你很快就能搞定你的問(wèn)題。而這是最終的衡量標(biāo)準(zhǔn)。
          2. Perl 有世上最好的市場(chǎng)推廣。你可以寫(xiě)一本介紹他們市場(chǎng)推廣有多絕的書(shū)。Sun 公司砸大筆錢(qián)給 Java 推市場(chǎng),Perl 在受歡迎程度來(lái)說(shuō)能跟 Java 齊頭并進(jìn),但 Perl 純粹是依靠 Larry Wall 和他那幫哥們的三寸不爛之舌做市場(chǎng)。哈佛商學(xué)院的人應(yīng)該去研究 Perl 的市場(chǎng)是怎么做出來(lái)的。真的讓人瞠目結(jié)舌。
          3. 直到差不多,呃,現(xiàn)在,Perl 沒(méi)有真正的競(jìng)爭(zhēng)者。
          有比 Perl “好”的語(yǔ)言。操,有很多比 Perl 好的語(yǔ)言,如果你定義“好”為“不是給瘋子用的”的話。Lisp, Smalltalk, Python,媽呀,我可能可以列出二三十種比 Perl “好”的語(yǔ)言。從這些語(yǔ)言不像這個(gè)夏天在臺(tái)灣街頭爆了肚皮的抹香鯨這個(gè)角度來(lái)說(shuō)。鯨魚(yú)腸子到處都是,汽車上,機(jī)車上,行人身上。這就是 Perl。讓人著迷,真的。
          但是 Perl 有很多很多好的特性,直到最近,都是其他語(yǔ)言沒(méi)有的。它們彌補(bǔ)了 Perl 腸子在外的不足。你可以從爆了肚皮的鯨魚(yú)可以做很多有用的東西出來(lái),比如香水。這很有用。Perl 也是這樣。
          當(dāng)其他的那些語(yǔ)言(尤其是 Lisp 和 Smalltalk)都想假裝操作系統(tǒng)并不存在,列表(Lisp 的)和對(duì)象(Smalltalk 的)就是把屎搞出來(lái)的唯一存在,Perl 卻走了截然相反的路子。Larry 說(shuō):Unix 和字符串是搞出屎來(lái)的唯一存在。
          對(duì)很多任務(wù)來(lái)說(shuō),他絕對(duì)是正確的。所以 Perl 絕對(duì)是 Unix 系統(tǒng)管理和字符串處理的史上最強(qiáng)語(yǔ)言,除了一個(gè),剛出來(lái)的一個(gè),從哥斯拉(電影哥斯拉看過(guò)沒(méi))之地出來(lái)的一個(gè)。我一會(huì)兒會(huì)講到那一個(gè)。
          可惜,Larry 太太太太在意 Unix 系統(tǒng)管理和字符串處理以致他壓根忘了列表和對(duì)象,等他明白過(guò)來(lái)想改正的時(shí)候已經(jīng)晚了。實(shí)際上,在 Perl 早期的…好吧,對(duì)鯨魚(yú)腸子我實(shí)在不想用“設(shè)計(jì)”這個(gè)詞,就說(shuō)生命周期中吧,他犯的幾個(gè)關(guān)鍵錯(cuò)誤讓把列表和對(duì)象加進(jìn)來(lái)變得如此尷尬,以致 Perl 已經(jīng)進(jìn)化成一個(gè)真正的 Rube Goldberg 機(jī)器,至少當(dāng)你想在 Perl 里用列表和對(duì)象的時(shí)候。(Rube Goldberg 是一漫畫(huà)家,常畫(huà)一些很復(fù)雜的機(jī)器,但只完成簡(jiǎn)單的工作,比如一個(gè)小球滾過(guò)很多關(guān)卡,最后把門(mén)打開(kāi)。譯者注)。
          列表和對(duì)象也他媽的是很重要的,Larry!(farging 應(yīng)該是作者不想說(shuō) fucking 那么直白,譯者注)
          Perl 沒(méi)法表達(dá)列表因?yàn)?Larry 一早犯了一個(gè)悲劇性的愚蠢的錯(cuò)誤,把列表全抹平。于是(1, 2, (3, 4))魔術(shù)般地變成(1, 2, 3, 4)。不是說(shuō)你會(huì)想讓它這樣工作,而是 Larry 剛好那天在搞一個(gè)這樣會(huì)更方便的問(wèn)題。于是 Perl 的數(shù)據(jù)結(jié)構(gòu)從此就變得爆炸了的鯨魚(yú)了。
          今天你看 Perl 的書(shū),小教程或 PPT 的時(shí)候,不花三分之一的時(shí)間在“引用”上是不可能的。這就是 Larry 可憐的,壞了的,Goldberg (漫畫(huà)家,想起來(lái)沒(méi)? 譯者注)式的對(duì)他那抹平列表的瘋狂錯(cuò)誤的解決方案。但是 Perl 的市場(chǎng)宣傳做得那么難以置信地好以致它讓你覺(jué)得這是你身上發(fā)生過(guò)的最好的東西。你可以對(duì)任何東西取它的引用。這很有趣!聞起來(lái)也很香(說(shuō)腸子呢,譯者注,呵呵)!
          Perl 不能支持面向?qū)ο缶幊桃驗(yàn)?Larry 壓根不相信這玩意兒。這可能沒(méi)什么大不了; 我也不是很確定我是不是信這個(gè) OOP。但是那么為啥他又要試著把對(duì)象加進(jìn) Perl 呢? Perl 的面向?qū)ο笫莻€(gè)半成品,且在 Perl 社區(qū)里沒(méi)多少人重視。它就是不像字符串處理或 Unix 集成那樣充滿靈感。
          當(dāng)然了,Perl 還有其他很多怪怪的特性。比如它的“上下文”,這是 Larry 要有N個(gè)變量名字空間的喜劇式?jīng)Q定的一個(gè)恐怖片式的產(chǎn)物。這些空間由 sigil 來(lái)區(qū)分(就是 Perl 里變量名前面的‘$’,‘@’,‘%’字符),看著像是從 shell 腳本里拷貝來(lái)的。在 Perl 里,所有的運(yùn)算符,所有的函數(shù),所有的操作其行為都是六取一的隨機(jī)的,取決于當(dāng)前的“上下文”。沒(méi)有一些規(guī)則或助記法能幫你搞定這些特定操作在特定上下文里的特定行為。你得把它們?nèi)浽谀X子里。
          想要個(gè)例子? 這兒有一個(gè):在一個(gè)值量(scalar,對(duì)應(yīng)于 vector,向量)上下文里對(duì)一個(gè)哈希取值你得到一個(gè)字符串,里面是個(gè)分?jǐn)?shù),分子是目前已分配的鍵,分母是總共有多少個(gè)桶。鯨魚(yú)腸子,我告訴你。
          但就像我說(shuō)的—直到最近,沒(méi)啥能像 Perl 那樣把屎搞定。
          Ruby
          每過(guò) 15 年左右,一門(mén)語(yǔ)言就會(huì)被更好的代替。C被 C++ 代替,至少對(duì)大應(yīng)用開(kāi)發(fā)而又需要性能和數(shù)據(jù)類型的人們來(lái)說(shuō)。C++ 被 Java 代替,而 Java 無(wú)疑在 7 年后又會(huì)被更好的東西代替—好吧,我說(shuō)的是完全代替 C++ 的 7 年后,這到目前為止還沒(méi)有發(fā)生,主要是因?yàn)槲④浤茉?Java 霸占桌面系統(tǒng)之前狙擊它。但是在服務(wù)器上的應(yīng)用而言,C++ 的陣地已經(jīng)慢慢讓給 Java 了。
          Perl 有一天也會(huì)消逝。那是因?yàn)橐婚T(mén)新的語(yǔ)言 Ruby 剛剛終于被翻譯成英語(yǔ)了。沒(méi)錯(cuò),它是在日本發(fā)明的,這么多地兒,沒(méi)想到日本人搞出來(lái)了,還以為他們只是硬件和制造上占有名氣,而不是他們的軟件業(yè),所以大家都跟你一樣驚奇。為什么呢,大家可能都在想。但是我認(rèn)為這都是跟打字有關(guān)。我根本不能想象他們以前能打字打得足夠快,英文字母只有 26 個(gè),他們卻有上萬(wàn)個(gè)字。但是 Emacs 幾年前支持多字節(jié)字符了,所以我猜他們現(xiàn)在打字速度他媽的快多了。(所以能搞出 Ruby 來(lái)了,譯者猜作者是這個(gè)意思) (是的,他們也用 Emacs —— 事實(shí)上日本人負(fù)責(zé)了 Emacs 多字節(jié)支持的大部工作,而且搞得堅(jiān)不可摧。)
          不管怎么樣,Ruby 從 Perl 那里偷師了所有的好東西; 實(shí)際上,Matz, Ruby 的作者(Yukihiro Matsumoto,如果我沒(méi)記錯(cuò)的話,但是他外號(hào)“Matz”),覺(jué)得他從 Perl 那里偷的有點(diǎn)太多了,他的鞋上也粘了些鯨魚(yú)腸子。但是只是一丟丟。
          最重要的是,Ruby 拿來(lái)了 Perl 的串處理和 Unix 集成,一點(diǎn)沒(méi)改,就是說(shuō)語(yǔ)法都是一樣的,于是乎啥也不說(shuō)了,你就擁有了 Perl 最好的那部分。這是個(gè)不錯(cuò)的開(kāi)局,特別是如果你不把 Perl 剩下的東西也拿進(jìn)來(lái)的話。
          但是之后 Matz 還從 Lisp 那里拿來(lái)的最好的列表處理,Smalltalk 和其他語(yǔ)言那里拿來(lái)了最好的面向?qū)ο螅珻LU 那里拿來(lái)了最好的迭代器,以及基本上是每個(gè)人每個(gè)事的最好的東西。
          而他讓這些東西全部都跑起來(lái),跑得那么順,你都不會(huì)注意到這些東西在那兒。我比其他任何語(yǔ)言都快就學(xué)會(huì)了 Ruby,我總共會(huì)三十到四十門(mén)語(yǔ)言; 而我花了大概三天時(shí)間就能用 Ruby 比 Perl 還流暢地工作了,當(dāng)了八年的 Perl 黑客后。這些東西是這么的和諧你都能自己猜它們是怎么工作的,而且大多數(shù)時(shí)候你都能猜對(duì)。漂亮。有趣。靠譜。
          如果把語(yǔ)言比成自行車,那么 AWK 就是一輛粉系的兒童自行車,前面有個(gè)白色小框,還插塊小旗,Perl 就是沙灘車(還記得那有多酷吧? 唉。),而 Ruby 則是一輛七千五美金的鈦合金山地自行車。從 Perl 飛躍到 Ruby 意義不下于從 C++ 到 Java 的飛躍。卻沒(méi)有任何缺陷,因?yàn)?Ruby 幾乎是 Perl 功能的一個(gè)超集,而 Java 卻拿掉了一些人們想要的東西,且沒(méi)有真正的提供一個(gè)替代品。
          下次我會(huì)寫(xiě)更多關(guān)于 Ruby 的東西。我先需要靈感。去讀讀 Lucky Stiff 的(poignant) guide to Ruby 吧。那本書(shū)是一本有靈感的書(shū)。真的,讀一下。超贊。我不理解產(chǎn)生它的那種頭腦,但它很有趣,很犀利,且全是關(guān)于 Ruby 的。好像。你會(huì)看到的。
          Python
          啊,Python 怎么說(shuō)呢,一個(gè)不錯(cuò)的語(yǔ)言,這么多年來(lái)一直旁邊在等待它的機(jī)會(huì)? Python 社區(qū)很長(zhǎng)時(shí)間以來(lái)是那些勇敢地吞下紅藥片從 Perl 駭客帝國(guó)中醒來(lái)的人的避難營(yíng)。
          啊,有點(diǎn)像 Smalltalk 的人們,他們永遠(yuǎn)在等待替代C++,沒(méi)想到半路殺出 Java 一下把它們操翻了,漂亮地,永久地。哎喲。Ruby 正在對(duì) Python 做著同樣的事,現(xiàn)在,今天。可能會(huì)在一夜之間吧。
          Python 本來(lái)可以統(tǒng)治世界,可惜它有兩個(gè)致命缺陷:空格,和冷淡。
          空格很簡(jiǎn)單,就是說(shuō) Python 是用縮進(jìn)來(lái)表達(dá)代碼塊之間的嵌套。它強(qiáng)制你必須按一定格式把所有的東西縮進(jìn),他們這樣做是為了讓所有人寫(xiě)的代碼看上去一樣。不料蠻多程序員討厭這點(diǎn),因?yàn)樗麄冇X(jué)得自己的自由被拿走了; 感覺(jué)就像 Python 侵犯了憲法賦予他們的可以隨便縮進(jìn)格式和全寫(xiě)在一行上的權(quán)利。
          Python 的作者,Guido Van Rossum,也在早期犯過(guò)一些很傻的技術(shù)錯(cuò)誤 —— 沒(méi)有像 Larry 的失誤那么嚴(yán)重,但是還是有幾個(gè)。比如,最早 Python 沒(méi)有字面變量范圍,但它同時(shí)也沒(méi)有動(dòng)態(tài)變量范圍,而動(dòng)態(tài)變量范圍可能會(huì)有它一些問(wèn)題,但它還是有用的。Python 卻沒(méi)有這些,只有全局的和本地(函數(shù))的兩種范圍。所以即使它是一個(gè)真正的 OO 系統(tǒng),類甚至不能訪問(wèn)它們自己的動(dòng)態(tài)成員變量。你必須給成員函數(shù)傳“self”參數(shù),一大堆 self 參數(shù)很快就會(huì)把你搞瘋掉,即使你不在意空格問(wèn)題。
          等等之類。
          但在我看來(lái),Python 不行其實(shí)是因?yàn)槔涞_@阻止了它成為首選腳本語(yǔ)言,或者首選一切語(yǔ)言。靠,人們現(xiàn)在還在用 Tcl 作嵌入解釋執(zhí)行器,雖然 Python 比 Tcl 好得不要太多 —— 除了,我說(shuō),這個(gè)冷淡問(wèn)題。
          (此處開(kāi)始我不知所云。呵呵,這樣吧,把原文貼在最后面。譯者注)
          What’s the frost thing, you ask? Well, I used to have a lot of exceptionally mean stuff written here, but since Python’s actually quite pleasant to work with (if you can overlook its warts), I no longer think it’s such a great idea to bash on Pythonistas。The “frost thing” is just that they used to have a tendency to be a bit, well, frosty。Why?
          Because they were so tired of hearing about the whitespace thing!
          I think that’s why Python never reached Perl’s level of popularity, but maybe I’m just imagining things。
          Coda
          That was the ADJ article I really wanted to write。Or at least something like it。For some reason, though, my true feelings only seem to come out during insomniac attacks between 3am and 6am。Time for bed!2 hours ’til my next meeting。
          注1,Eric 告訴我當(dāng)時(shí)幾乎全是 Jamie Zawinski,當(dāng)他們?cè)?Lucid 工作的時(shí)候。
          注2,我寫(xiě)了這個(gè)之后很多人告訴我 Paul Graham 是用 VI 的,想不到。
          注3,為了有據(jù)可查,我個(gè)人根本不介意空格問(wèn)題。我認(rèn)為因?yàn)檫@個(gè)而不喜歡 Python 是很傻的。我只是說(shuō)有一堆比例讓人驚奇的其他工程師討厭空格問(wèn)題。


          — THE END —


          ?史上最狠的論文評(píng)審意見(jiàn)(沒(méi)投過(guò)SCI,你簡(jiǎn)直不知道reject這個(gè)詞有多可怕呀)
          ?理解矩陣背后的現(xiàn)實(shí)意義
          ?想追她?先算算你要等多久
          ?如何讓AI讀懂大佬的微表情?
          ?無(wú)窮存在嗎?
          ?名人論數(shù)學(xué)——數(shù)學(xué)的本質(zhì)
          瀏覽 40
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一级黄色视频在吗哪看 | 青青草香蕉网 | 屄屄在线看| 日韩一区二区在线观看 | 快色网站 |