標籤:

什麼是 Dirty hack?

最近看到一個開源的工程,某一塊代碼寫得不是很完善的時候,會說這是Dirty hack,究竟Dirty hack真正意思是什麼呢?


以不符合設計原理 / 不易維護 / 不易調整 / 不夠健壯 / 不夠美觀的方式解決問題。

比如水管連接處生了銹開始漏——

  • 把水管系統整個重新布置成沒有接頭的管線,叫做 refactor
  • 按原樣把銹掉的水管換新的,叫做 proper fix

  • 把水管拆下來用防滲膠帶纏住螺絲紋再裝回去,叫做 patch
  • 叫你女朋友先把漏水的地方捂住然後下面放個臉盆接漏水,叫做 monkey patch
  • 用電焊把接頭焊起來,叫做 hack

  • 用口香糖塞住漏縫然後用水泥把接頭澆築起來,結果因為那一大坨太重,下面不得不放一根木棍撐著,叫做 dirty hack

Dirty hack 不一定總是壞事,如果你沒有臉盆、電焊、管鉗、女朋友、新水管和防滲膠帶,而這套水管系統反正就快整個報廢了的話。


獲得頁面的字數統計


我覺得上面的例子非常生動,但有點脫離軟體開發的場景了。

Dirty hack,首先是hack。

hack就是用非常規的手段搞定(不是解決)某個問題。

比如說有段代碼是這樣的:

a/b

當b為0的時候,這段代碼就會報錯。

正確的fix是避免b為0。

hack就是這樣:

try

{

a/b

}

dirty hack就是在這段代碼下面寫上:

catch{}


上面兩位仁兄都用「隱喻」的方式把dirty hack做了很好的詮釋了。

我覺得簡單點說,dirty hack首先是hack,這說明它不能算是正規的問題解決方式(不是fix);

其次是dirty,說明它屬於不夠優雅,看起來要麼有點繞,要麼是為了解決一個問題導致引入其他問題的拆東牆補西牆的錯誤的問題解決方式。


假設一個女的得了直腸癌,移植一段正常直腸叫 fix,在肚子上開個口再掛個袋子叫 workaround,人工直腸叫 hack,在陰道上打個洞叫大便從那裡出去才叫真正的 DIRTY HACK ~~~


正好最近碰到一個問題可以舉例,寫的一個小程序,原來是讀取測試結果(專用格式)每日生成測試報告(excel格式)的,所以直接取的系統時間,有新的結果會覆蓋掉原來當天的,之前一天的作為歷史數據。

新的臨時需求是,有一堆結果,需要生成完整的報告,因為是臨時使用,所以直接dirty hack,方案是每次讀取一個結果,生成報告之後,直接用API調用修改系統時間,調後一天,這樣就可以順利生成報告了,哇哈哈。


推薦閱讀:

TAG:Hack |