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