千層餅代碼

千層餅代碼


英文原文:Lasagna Code
  任何一個跟計算機專業沾點兒邊的人都知道“意大利麵條代碼(spaghetti code)”指的是什麼。很遺憾,這種風格的代碼如今還是不少。但現在我們又有了 —— 找不到其它更好的詞彙,還是沿用麵食的比喻 —— “千層餅代碼(lasagna code)”。
  千層餅代碼是指代碼被一層層的抽象,一層層的對象繼承和引用,以及其它一些毫無意義的修飾,最終導致代碼臃腫不堪,難於維護,完全跟“清晰”這個詞不沾邊。看著如今有些代碼寫成這個樣子,我不由抓狂。而當你看到 Turbo Pascal v3 的體積是如此的微小,而且明白這是一個功能完整的 Pascal 語言編譯器時,你不能不問,為什麼如今的應用程序和編譯器都如此的巨大。
  Turbo Pascal v3 的體積小於40k,不錯,4萬個字節碼。今天你還能找到體積這麼小的有用的軟件嗎。大多數人甚至不能編譯出一個小於1M 的“Hello World”程序,這都是受我們追捧的面向對象編程的恩賜,人們似乎對“代碼行數”的要求勝過代碼清晰性,對“抽象和對象化”的要求勝過代碼的簡潔和優雅。
  回想起我初進入計算機行業時,我們寫很少的代碼能完成很多的事。而如今,我們寫了成千上萬行代碼,能完成的事卻變少了。如此的悲哀,讓人想哭,或無奈的的甩甩手,走開。


  還有幾點亮光。還有一些人在寫短小漂亮的代碼。但他們顯得越來越稀有,尤其是在最近熱衷於寫優雅、短小、漂亮的代碼的人過世的時候。Dennis Ritchie (C語言的創始人)會告訴你可以用小程序做大事。他強調說:算法是你要解決的問題的核心。創造漂亮和精心設計的東西,值得人們永遠研究,就像 Thompson 版的正則表達式算法!
  也許只有像我這樣的年齡和天生的壞脾氣的人才會這樣的抱怨,但這些年來很多系統都讓我痛苦。它們寫的如此的醜陋,設計的如此糟糕。也有亮點,但少之又少。無怪乎,現在的孩子都不願意去研究計算機科學。以前我們對各種算法的固有的美麗的追求,現在變成了在鍵盤上的一痛亂敲,輸入成百上千行代碼,期望編譯器能編譯通過。Lisp, Smalltalk 或 APL 等語言的優雅哪裡去了?甚至 Fortran 也比現在的許多受人追捧的那些爛編程語言優雅的多。為什麼沒有人回去研究那些面向算法的語言、去改進它們?
  我曾經對我的孩子說,這麼多好的語言如今只剩下C語言,這真是悲哀。不錯,一些特定領域還有一些很漂亮很小的語言存在,但會成為主流嗎?不會。這就是一場災難。有些東西,比如 Python,如果它不把一個面向對象的系統嵌入到體內,也許它會很不錯。唉。
  (譯者注:
lasagna,字典的解釋是,“烤奶酪肉餡麵條:通過烘烤帶有一層層的番茄汁和填有如奶酪和肉餡等調料的麵糰而製成的菜餚”,但這解釋我聽起來更像是月餅沾大醬。這裡暫且用一個比較形象的東西:千層餅。)



分享到:


相關文章: