中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
對各大語言,一位老程序員竟然如此理解?!這位程序媛……
↑ 點(diǎn)擊上方“程序人生”關(guān)注我們


本文作者CSDN博客專家lanxuezaipiao,作者授權(quán)CSDN社區(qū)微信公眾號《程序人生》發(fā)表,轉(zhuǎn)載需聯(lián)系原作者。


《程序員的吶喊》是Google一位老程序員的經(jīng)驗(yàn)總結(jié),文中展現(xiàn)了他對各大語言如Java、C/C++、Lisp、Python、Ruby、Perl等的極端觀點(diǎn),比如大力吐槽C++,極力推崇C、Lisp、Ruby。他的觀點(diǎn)只是他個(gè)人經(jīng)驗(yàn)所得,也不一定符合實(shí)情,僅供參考,有任何想法都可以說出來一起討論。

程序員和司機(jī)一樣,總是自我安慰說等到需要的時(shí)候再去學(xué)新技能也來得及。但是在內(nèi)心深處他們都明白,其實(shí)當(dāng)需求出現(xiàn)的時(shí)候就已經(jīng)太晚了。因此現(xiàn)實(shí)情況是這樣的,旱鴨子會和水保持距離,司機(jī)會繞開泥濘的路段,而程序員會躲在舒適區(qū)里,搭建圍欄把自己保護(hù)起來,然后祈禱世界和平。

me:其實(shí)喜歡躲在舒適區(qū)里是每個(gè)人都或多或少存在的性格弱點(diǎn),誰能克服它誰就能學(xué)到新技能,誰就能站的比別人高。對于偶爾努力經(jīng)常懶惰的我來說,技術(shù)也是學(xué)的廣而不精,對新技術(shù)都有興趣但學(xué)不到精深處,希望剛工作的我可以改善這個(gè)弱點(diǎn)。

當(dāng)時(shí)04年亞馬遜正飽受其龐大代碼庫的困擾,我曾經(jīng)一度認(rèn)為它的代碼庫失控是因?yàn)檎Z言問題,后來才意識到企業(yè)文化是主因。首當(dāng)其沖的是,亞馬遜的主流語言里有兩門非常哆嗦的語言C++中和Java,外加一門精練的語言Perl。但是Perl正受到排擠,漸漸退出主流。我覺得這是因?yàn)镻erl程序員能用更少的人力完成和Java/C++程序員同樣的工作量,所以要是比人多的話,他們注定是贏不了的。根據(jù)我們的估算,亞馬遜的代碼量比它的功能數(shù)量膨脹得更快。第二個(gè)因素是,亞馬遜的很多技術(shù)問題完全可以用自定義領(lǐng)域語言(DSL的方式來解決),比如大規(guī)模的查詢、分布式計(jì)算、產(chǎn)品配置等,他們寫了太多不必要的代碼了。我后來跳到Google,發(fā)現(xiàn)他們?yōu)檫@些完全一樣的問題專門編寫了強(qiáng)大的自定義DSL。這證實(shí)了我心中的疑慮,亞馬遜的工程師在這些問題上和無頭蒼蠅沒什么兩樣。我敢說這句話誤傷的概率極低。最后一點(diǎn)就是,和絕大多數(shù)公司一樣,亞馬遜非??咕苡眯抡Z言來解決問題。他們會避免使用表達(dá)能力更強(qiáng)的通用語言,比如Ruby或Erlang。他們也幾乎從來不會想到自己去寫DSL。

me:龐大代碼庫是很多公司都有的弊病吧,可又有多少能想到用DSL來解決呢。害怕變動、拒絕新技術(shù)的公司注定是失敗的。

為什么C是必修課?

一個(gè)原因是現(xiàn)在的電腦都是馮諾·伊曼結(jié)構(gòu)的,而C以精悍的語法展現(xiàn)了馮·諾伊曼機(jī)的能力,其他類型的機(jī)器也是存在的,比如Lisp機(jī)。還有一個(gè)原因就是,Unix是用C寫的,不僅如此,包括Windows等在內(nèi)的幾乎所有的操作系統(tǒng)都是用C寫成的,因?yàn)樗鼈內(nèi)繉儆隈T諾伊曼機(jī)操作系統(tǒng)。你覺得自己還有其他選擇嗎?至少在操作系統(tǒng)領(lǐng)域里,任何與C迥異的語言都發(fā)揮不出硬件的實(shí)際能力,至少這句話放在近一百年里都是對的這些系統(tǒng)都誕生于這段時(shí)期內(nèi)。

計(jì)算機(jī)編程語言里沒有所謂的“親近生侮謾“,只有在掌握更優(yōu)秀的語言前提下,才會懂得怎么批判自己最熟悉的那門語言。因此,要是你不喜歡我批評C++,我建議你去了解一下更優(yōu)秀的語言是什么樣子的,然后你才有資格否定我的話。不過到那時(shí)你就不會來否定我了,我忽悠成功了。那時(shí)你不會再喜歡C++,可能會有點(diǎn)生我的氣,忽悠你討厭自己之前最愛的語言。所以你還是別管我說什么了。C++很出色,非常優(yōu)秀。別在意我的話。它是門很棒的語言。

me:作者是有多么討厭C++啊!“親近生侮謾“的意思是當(dāng)你對一個(gè)人或事物越親近越熟悉,你就會越討厭越忽視TA。而作者認(rèn)為計(jì)算機(jī)語言里不會發(fā)生這種事情,除非你知道了其它更優(yōu)秀的語言。我贊同這個(gè)觀點(diǎn)。

亞馬遜的偉大元老們只用兩種語言:C和Lisp。顯然,他們都是Emacs的擁躉。

me:的確很多編程界的大佬都愛這兩門語言,比如《黑客與畫家》的作者。

杰米·扎溫斯基曾經(jīng)寫過一篇非常有名的文章來批判Java有多糟糕,但他還是這樣寫道:“先說好的地方:Java沒有free(),我必須承認(rèn)這一點(diǎn),其他錦上添花而已。光這一點(diǎn)就足以讓我忽視其他缺點(diǎn)了,不管它們有多糟糕。有鑒于此,本文接下來的內(nèi)容都可以說無足輕重?!苯苊椎倪@篇文章寫于1997年,那時(shí)的Java還在襁褓之中,如今Java早已今非昔比,他當(dāng)時(shí)抱怨的有些東西現(xiàn)在都已經(jīng)修復(fù)了。但也不是全都改好了。就語言層面,Java仍然算不上優(yōu)秀。但正如杰米所言,它“依然是今天最好的語言,遠(yuǎn)遠(yuǎn)比我們在實(shí)際工作中用的那些徹頭徹尾的垃圾語言要好得多”。不過Java也缺了一些C++的優(yōu)點(diǎn),比如(在棧上)傳引用、typedef,宏,還有重載操作符。這些東西并非必不可少,但是需要的時(shí)候就很方便。對了還有多重繼承,說得我都開始懷念從前了。假如你要用我自己的“固執(zhí)己見的精靈”來反對多態(tài),那么我還可以舉出更多為什么多重繼承是必需的例子。有時(shí)間我們可以討論一下“火焰劍”或者“盜賊披風(fēng)”的問題,你就會明白接口是多糟糕的東西了。幾年前,高斯林自己也承認(rèn),要是有機(jī)會重來的話,絕對不會考慮接口。而這正是Java的問題所在。

me:Java好在垃圾自動回收,壞在臃腫不堪,語言本身設(shè)計(jì)的不好。

總之,Ruby對Perl充分實(shí)行了拿來主義。Ruby的作者M(jìn)atz(我沒記錯(cuò)的話,他的本名是松本行弘,不過通常都自稱“Matz”)甚至可能有點(diǎn)借鑒過頭了,連些不好的東西也拿了過來。好在不多,只有一點(diǎn)點(diǎn)而已。基本上Ruby照搬了Perl的字符串處理和Unⅸ集成,語法完全一樣,只此一點(diǎn),Perl的精華就全都有了。這可以說是開了個(gè)去蕪存菁的好頭。接著Matz從Lisp那里吸收了列表處理的精華,從Smalltalk那里拿來了OO,迭代器則是取自CLU,基本上各個(gè)語言里的優(yōu)點(diǎn)都吸收進(jìn)來了。所有的這些東西被完美地糅合在一起,你壓根注意不到斧鑿的痕跡。

me:Ruby本質(zhì)上就是各種語言精華的大雜燴,去蕪存菁,作者精通這么多語言的精華非常值得敬佩?,F(xiàn)在的框架也是的,都是互相之間借鑒精華,按需索取,無可厚非。

Python本來是有機(jī)會一統(tǒng)江湖的,但是它有兩個(gè)致命的缺陷:一個(gè)是空白符,另一個(gè)是死腦筋。所謂空白符的問題就是Python的嵌套是通過縮進(jìn)來完成的。它強(qiáng)迫你用特定的方式來縮進(jìn),這樣大家的代碼看起來就是一樣的了??上В芏喑绦騿T都討厭這個(gè)規(guī)定,感覺好像被剝奪了自由一樣;他們覺得胡亂排版和和編寫那種精簡到一行沒人看得懂的小程序是自己的權(quán)利,而Python卻侵犯了這一點(diǎn)。Python之父吉多·范羅蘇姆之前也出過幾次昏招,雖然不如拉里那么驚世駭俗,但也真的是夠小兒科的了。比如,Python原本是沒有詞法作用域的??蓡栴}是它連動態(tài)作用域也沒有,雖然說動態(tài)作用域也有自身的問題,但至少還勉強(qiáng)可以用。Python最早只有全局和局部(函數(shù))作用域,所以雖然它擁有一個(gè)“真正的OO系統(tǒng),可是—個(gè)類卻連自己的實(shí)例變量都沒法訪問。你只能給每個(gè)實(shí)例方法帶上一個(gè)self參數(shù),然后通過self來訪問自己的實(shí)例數(shù)據(jù)。所以你在Python里看到一堆self ,哪怕你忍了空白符,這些self也能把你給逼瘋了。

me:用空格縮進(jìn)的確讓人不爽,不過提升了規(guī)范性。

Java 其中特點(diǎn)之一就是凸顯了“架構(gòu)”。Java國王授予了架構(gòu)尊崇的地位,因?yàn)榧軜?gòu)完全是由名詞組成的。我們都知道,名詞就是事物,而在Java里,事物的地位遠(yuǎn)勝一切動作。建筑是由看得見摸得著的事物構(gòu)成的,譬如高聳入云的龐然大物,又如用棍子敲打時(shí)發(fā)出低沉悅耳聲音的東西。Java國王特別喜歡這種沉悶的聲音,每次換新馬車的時(shí)候,他都特別喜歡從踢輪子中獲得快感。不管上述的兒歌有何瑕疵,它就是不想要任何東西。

me:的確,Java最讓人受不了的就是一堆架構(gòu),一層層封裝致死,調(diào)試起來也麻煩。

福勒告訴我們所謂重構(gòu),就是通過迭代,將惡心的代碼變成優(yōu)質(zhì)代碼的藝術(shù)和科學(xué),是能妝點(diǎn)代碼卻不會在操作過程中產(chǎn)生破壞的算法,而且正確性都是能證明的。

me:作者認(rèn)為福勒寫的重構(gòu)這本書非常不錯(cuò),值得一讀。

那么這些代碼一開始是怎么變爛的呢?首先當(dāng)然是由于過早優(yōu)化造成的,為了避免重復(fù)計(jì)算而保存了太多的中間變量。因?yàn)楹ε路椒ㄕ{(diào)用會造成虛幻的負(fù)擔(dān),而刻意回避編寫短小的函數(shù)。我們還弄出一大堆類的繼承關(guān)系,僅僅是為了想象中可能存在的復(fù)用,為了避免分配器對象而弄出一個(gè)巨大的參數(shù)列表。濫用null,把它當(dāng)成成具有語義的符號。放任簡單的布爾邏輯表達(dá)式變成錯(cuò)綜復(fù)雜、無法閱讀的漿糊。不用訪問方法來封裝數(shù)據(jù)結(jié)構(gòu)。還有其他很多亂七八糟的問題。正是因?yàn)楦鞣N各樣的小錯(cuò)誤別類,加以命名,并歸類成嚴(yán)重錯(cuò)誤。

me:這是福勒重構(gòu)這本書告訴我們的。

那我們的代碼是怎么變成那樣的呢?因?yàn)閷懙脿€。這時(shí)重構(gòu)就能救命。再優(yōu)秀的設(shè)計(jì)也會出紕漏,但我們?nèi)匀豢梢匝a(bǔ)救,反正有自動化的奴仆來幫我們修復(fù)這些:小問題。它們不知疲倦,我們只要點(diǎn)個(gè)按鈕就行了。既然如此,誰能離得開自動化重構(gòu)工具?還有誰能協(xié)調(diào)Java那些數(shù)以百計(jì)的小腿,讓它們像毛毛蟲一樣統(tǒng)一行動呢?讓我來告訴你答案:Ruby是蝴蝶。(意指Ruby是完全不同的物種,Java中自動化重構(gòu)工具所要解決的問題在Ruby中根本不存在。)

me:作者喜歡Ruby,覺得Java需要重構(gòu)是因?yàn)榇a寫的爛,要是用Ruby寫的話根本不需要重構(gòu),也就沒有自動化重構(gòu)工具。

首先,再垃圾的語言和技術(shù)也一樣有機(jī)會贏。甚至贏面可能還會大一點(diǎn),因?yàn)楦恼饋頃臁ava擊敗了smalltalk , C++擊敗了Object-C,Perl擊敗了Python,VHS擊敗了Beta,諸如此類。并不是說一項(xiàng)技術(shù)(特別是編程語言)比較優(yōu)秀,它就一定會勝出。營銷才是關(guān)關(guān)鍵。追求公平競爭只會導(dǎo)致你的語言無人問可津。

me:原來一門語言的流行起關(guān)鍵作用的不是這門語言有多優(yōu)秀,而是它的營銷做的有多好。嗯,我記得Java就是營銷搞起來的。

注意,罵誰也不能罵Python。相反,罵Ruby罵得最兇的人可能就是Matz自己了。他在自己的演講“為什么Ruby很爛”里,自陳了Ruby的各種問題,當(dāng)時(shí)看得我汗都下來了。不可否認(rèn),任何語言都有缺點(diǎn)。相比之下,我更喜歡Ruby眾的坦誠,Pyhon那種一味指責(zé)別人,回避問題,過分地自我標(biāo)榜的行為令人感到惡心。

me:作者的意思是Python眾狂妄自大,而Ruby相對比較坦誠,這是作者通過經(jīng)過逛兩個(gè)社區(qū)得出的結(jié)論,也不一定準(zhǔn)確。



 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
每個(gè)程序員都應(yīng)該學(xué)習(xí)使用Python或Ruby
編程語言大匯總(Part Ⅰ)
Sawin軟件研發(fā)之窗:主動程序員與被動程序員
Perl、PHP、Python、Java和Ruby的比較
歷史上偉大的程序員,沒有華人簡直太可惜了!
為什么Java、Python會成為程序員最害怕的編程語言?
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服