星期日, 2月 11, 2007

Emacs的文化衝擊

There's nothing wrong with static type systems.
You just have to realize that when you use them, you're building hardware, not software.
-- Steve Yegge


ESR曾經說, 即使妳不用lisp, 妳也該學習lisp, 因為學習lisp會讓妳成為更好的Progammer.
這幾天玩弄Emacs下來, 我不得不說, 如果妳是Programmer, 即使妳不用Emacs作為編輯器,
妳也該瞭解Emacs, 因為瞭解Emacs會讓妳瞭解什麼是好的軟體設計.

***

Emacs是一個環境, 妳不是在"用"一個Emacs, 而是你"進入"了Emacs, 妳活在Emacs的國度裡.
隨便打開一個*scratch* buffer, 輸入(message "hello") 然後 C-M-x , it's EVALUATE!!
如果以其他系統的角度來說. 你已經做好了你的第一個Emacs plugin.
改好你的.emacs , M-x eval-buffer, 新的設定已經載入了.
RESET? 不, 好的"""軟體"""系統不用reset.
Ok, I'll say, Hardware plugs, Software's spirit is: Evaluate, and it's done.

***

我喜歡Python的introspective跟豐富help, 只要能打開python的直譯器, 我幾乎很少需要書籍或線上文件.
Emacs的系統也是一樣, 我原本不能理解當vim user在強調keystroke時, Emacs User那種不屑/不在意的態度.
我現在能理解了, Emacs擁有非常高明的help系統. 忘記了keystroke, 妳還有GUI, 即使妳像我一樣不使用Emacs的GUI,
Emacs的help系統會讓妳忘了為什麼需要GUI. M-x apropos跟C-h C-h是好朋友,
妳忘了keystroke, 妳可以鍵入長指令查keystroke, 妳忘了長的指令, 妳可以用keystroke查詢,
妳什麼都忘了, 只要妳還記得 M-x apropos或C-h, 還是有辦法記起來.

而一旦defun被eval, 他就能夠立即的被啟動, 回傳的值也立刻能在mini-buffer裡看到,
所有自定義的function妳只要能記得開頭的字母, 也都隨時可以按tab兩次顯現,
喔, docstring, help, 使用etags查詢某個function還能即時探索該function在emacs的elisp code,
所有動作都不必離開Emacs, introspective至如此,夫復何求?

***


Systems should never reboot.
Great software systems are introspective.

我現在很清楚的瞭解他指的是什麼了, 如果妳不能理解, 建議你玩玩Emacs.
Emacs是Dynamic的典範, 是超越了時代的設計,
我很難想像這是一個80年代開始發展的系統.
我以往從來不在意Emacs或者Vim的所謂編輯器聖戰,
原本覺得那是意氣之爭, 但即便對某些人是意氣之爭,
但認真去瞭解Emacs還是教了我很多,
僅在數天之內, 我便開始瞭解聖戰為何而戰.
Vim可能符合了這一代人對軟體,對編輯的期望,
但那是現在, 軟體的歷史還年輕的很, 而Emacs的戰場還在未來.
是因為有了堅持跟夢想, 才會有了這個不流血的戰場.
在可見的未來, Emacs的聖戰將會繼續打下去.

沒有留言: