|
英文原文:Lasagna Code
任何一個跟計(jì)算機(jī)專業(yè)沾點(diǎn)兒邊的人都知道“意大利面條代碼(spaghetti code)”指的是什么。很遺憾,這種風(fēng)格的代碼如今還是不少。但現(xiàn)在我們又有了 —— 找不到其它更好的詞匯,還是沿用面食的比喻 —— “千層餅代碼(lasagna code)”。
千層餅代碼是指代碼被一層層的抽象,一層層的對象繼承和引用,以及其它一些毫無意義的修飾,最終導(dǎo)致代碼臃腫不堪,難于維護(hù),完全跟“清晰”這個詞不沾邊。看著如今有些代碼寫成這個樣子,我不由抓狂。而當(dāng)你看到 Turbo Pascal v3 的體積是如此的微小,而且明白這是一個功能完整的 Pascal 語言編譯器時,你不能不問,為什么如今的應(yīng)用程序和編譯器都如此的巨大。
Turbo Pascal v3 的體積小于40k,不錯,4萬個字節(jié)碼。今天你還能找到體積這么小的有用的軟件嗎。大多數(shù)人甚至不能編譯出一個小于1M 的“Hello World”程序,這都是受我們追捧的面向?qū)ο缶幊痰亩髻n,人們似乎對“代碼行數(shù)”的要求勝過代碼清晰性,對“抽象和對象化”的要求勝過代碼的簡潔和優(yōu)雅。
回想起我初進(jìn)入計(jì)算機(jī)行業(yè)時,我們寫很少的代碼能完成很多的事。而如今,我們寫了成千上萬行代碼,能完成的事卻變少了。如此的悲哀,讓人想哭,或無奈的的甩甩手,走開。
還有幾點(diǎn)亮光。還有一些人在寫短小漂亮的代碼。但他們顯得越來越稀有,尤其是在最近熱衷于寫優(yōu)雅、短小、漂亮的代碼的人過世的時候。Dennis Ritchie (C語言的創(chuàng)始人)會告訴你可以用小程序做大事。他強(qiáng)調(diào)說:算法是你要解決的問題的核心。創(chuàng)造漂亮和精心設(shè)計(jì)的東西,值得人們永遠(yuǎn)研究,就像 Thompson 版的正則表達(dá)式算法!
也許只有像我這樣的年齡和天生的壞脾氣的人才會這樣的抱怨,但這些年來很多系統(tǒng)都讓我痛苦。它們寫的如此的丑陋,設(shè)計(jì)的如此糟糕。也有亮點(diǎn),但少之又少。無怪乎,現(xiàn)在的孩子都不愿意去研究計(jì)算機(jī)科學(xué)。以前我們對各種算法的固有的美麗的追求,現(xiàn)在變成了在鍵盤上的一痛亂敲,輸入成百上千行代碼,期望編譯器能編譯通過。Lisp, Smalltalk 或 APL 等語言的優(yōu)雅哪里去了?甚至 Fortran 也比現(xiàn)在的許多受人追捧的那些爛編程語言優(yōu)雅的多。為什么沒有人回去研究那些面向算法的語言、去改進(jìn)它們?
我曾經(jīng)對我的孩子說,這么多好的語言如今只剩下C語言,這真是悲哀。不錯,一些特定領(lǐng)域還有一些很漂亮很小的語言存在,但會成為主流嗎?不會。這就是一場災(zāi)難。有些東西,比如 Python,如果它不把一個面向?qū)ο蟮南到y(tǒng)嵌入到體內(nèi),也許它會很不錯。唉。
(譯者注:lasagna,字典的解釋是,“烤奶酪肉餡面條:通過烘烤帶有一層層的番茄汁和填有如奶酪和肉餡等調(diào)料的面團(tuán)而制成的菜肴”,但這解釋我聽起來更像是月餅沾大醬。這里暫且用一個比較形象的東西:千層餅。)
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。