編寫傻瓜式的代碼
在過去的幾個月里,我研發(fā)了一種編寫代碼的方法。每當(dāng)我寫一個新函數(shù)、類或方法時,我就問自己:「這段代碼足夠傻瓜式嗎?」如果不夠傻瓜式,就說明沒完事,我盡量使其傻瓜式一些。
但是,傻瓜式的代碼不代表「無法運(yùn)行的代碼」。傻瓜式的代碼應(yīng)該完全按照預(yù)期的方式運(yùn)行,不過,是以盡可能簡單、直接、「傻瓜式的」方式。
任何人能編寫它,閱讀它的任何人都應(yīng)該能夠理解它。它不應(yīng)該使閱讀代碼的人思考代碼本身,而是思考手頭的問題。不應(yīng)該花太長時間,不應(yīng)該太復(fù)雜,最重要的是,不應(yīng)該嘗試更聰明的方式。它應(yīng)該能夠搞定工作,僅此而已。
傻瓜式的代碼是什么樣子呢?這取決于它正試圖解決的問題。拿元編程注1做例子,哪種語言經(jīng)常被視作復(fù)雜和「具有妖術(shù)」。問自己「這段代碼足夠傻瓜式嗎」就意味著「不允許元編程嗎」嗎?不一定,真的。在一些特定情況下,通過元編程就可以用最簡單的方式解決某個問題。但是,也有很多情況是不需要元編程的,解決方案之上的額外包袱,有礙于理解代碼本來的樣子。
目標(biāo)是甩掉包袱,削弱它,直到誕生出最傻瓜式、但可運(yùn)行、測試通過的代碼。
記住這里說的「傻瓜式」:「it works」還不夠好。過于復(fù)雜、「看看這個更聰明的技巧」、過度抽象、難以閱讀的代碼,也能運(yùn)行且通過了測試。這不是我想要的。它必須是傻瓜式的:不聰明、不復(fù)雜、不難于理解。
除了稱為「傻瓜式」,最終的代碼也被稱為「優(yōu)雅」、「干凈」和「簡潔」。但是「編寫傻瓜式的代碼」不像「編寫優(yōu)雅的代碼」那樣不可捉摸,前者貌似更容易達(dá)到,使得這種方式對我更有價值。除此之外,我發(fā)現(xiàn)從「編寫傻瓜式的代碼」入手較為容易,最終得到優(yōu)于其它方式的、優(yōu)雅的解決方案。
不是每一個優(yōu)雅的解決方案都是直接的,但是,每個定義的「傻瓜式」的解決方案都是、且都應(yīng)該是優(yōu)雅的。
注釋
元編程是指某類計算機(jī)程序的編寫,這類計算機(jī)程序編寫或者操縱其它程序(或者自身)作為它們的數(shù)據(jù),或者在運(yùn)行時完成部分本應(yīng)在編譯時完成的工作。多數(shù)情況下,與手工編寫全部代碼相比,程序員可以獲得更高的工作效率, 或者給與程序更大的靈活度去處理新的情形而無需重新編譯