Hacker 一詞同時指涉兩種人:寫程式的人利用程式的人

兩種駭客,同一套問題解決手法#

儘管這兩群人的終極目標不同,他們使用的問題解決技巧卻高度相似。因為理解程式設計有助於漏洞利用、理解漏洞利用也有助於寫程式,所以許多駭客兩件事都做。

  • 程式漏洞利用中發現的 hack,通常是以電腦自身的規則、繞過安全機制,而且是用從未被預期的方式。
  • 程式設計上的 hack 同樣是以新穎巧妙的方式運用電腦的規則,只是最終目標換成效率或更短的原始碼,未必牽涉安全性妥協。

駭客本質上就是「為問題找到一個聰明而違反直覺的解法」——無論那個問題是「如何繞過防護」還是「如何把程式寫得更漂亮」。

為什麼「優雅」值得追求#

任何一項任務,理論上都有無限多種程式可以完成它,但其中絕大多數又臃腫、又複雜、又髒亂。少數留下來的解法則是小巧、高效而乾淨——具備這些特質的程式被稱為擁有優雅(elegance),而通往這種效率的聰明創新解法就叫做 hack。程式設計兩端的駭客,同時欣賞優雅程式碼的美,以及聰明 hack 的巧思。

為什麼商業世界不在乎優雅

在商業世界裡,「產出能動的程式碼」的重要性遠高於漂亮的 hack 與優雅。由於運算能力與記憶體呈指數成長,面對擁有 GHz 處理週期與 GB 記憶體的現代電腦,多花五小時只為了讓程式碼稍微快一點、稍微省記憶體一點,在商業上根本不划算。

時間與記憶體的最佳化,除了最挑剔的使用者之外沒人會注意;但一個新功能是可以拿來賣的。當底線是錢的時候,把時間花在最佳化的巧妙 hack 上就是說不通。

因此,對程式設計優雅性的真正欣賞留給了駭客:那些不以獲利為終極目標、只想從老舊 Commodore 64 上榨出每一分功能的電腦愛好者;那些必須寫出極小又驚人的程式碼、以擠過狹窄安全縫隙的漏洞利用作者;以及任何欣賞「追尋最佳解」這個過程與挑戰的人。

由於理解程式設計是理解「程式如何被利用」的先備條件,程式設計自然就是本書的起點。