寫程式碼要用 Vim,因為越難入門的工具回報越大
編者按:現在的技術界有一種傾向,將軟體/應用操作簡單化,使用者能輕鬆上手。但是工具是否強大,取決於它能否靈活地滿足使用者的各種需要。有些工具雖然很難入門,學會了便能對自己的操作有更深的層次的瞭解,能賦予創造和表達更大的自由度。本文編譯自Quartz的原題為“Forget easy-to-use design. Choose something hard instead”的文章。
Vim是一款文字編輯器,基於上世紀70年代開發的vi。 試過的人都公認說難,就連程式員都覺得光是退出程式都不那麼簡單。但是Vim的用途很廣,不管你用的是Mac還是Windows,軟體都是已經自帶的。而且,只要掌握了使用方法的人,很可能會逢人就安利不止。
“這簡直就是最好用的文字編輯器,跟漢堡店In-n-Out的漢堡一樣讓人滿意。”
我就是Vim“神教”的信徒之一。現在我也要來安利一下。但是,我只是用Vim為例子,我要安利的不單是這款軟體,而是各種“難用”的技術工具。
Vim是從vi發展出來的一個文字編輯器, 在程式碼補全、編譯及錯誤跳轉方面,編輯功能特別豐富,很多程式員都使用Vim。Vim和Emacs並列成為類Unix系統使用者最喜歡的編輯器。 Vim的第一個版本釋出於1991年,最初簡稱是為Vi IMitation,後來功能不斷增加,正式名稱改成Vi IMproved。Vim是一款自由軟體。
現在技術界有一股潮流,工具好不好,似乎都取決於是否易用。照這樣的思維,最好的軟體就是無需說明書,無需解釋,無需教程,你只需要按1或者0。簡單到這種地步,五歲的娃娃也可以很快上手應用自如了。
這樣的標準聽起來很理想, 但是“簡單”不是沒有代價的,而且五歲孩子可不聰明,簡單易用的工具,可想而知,肯定不是靈活的。如果一款軟體將所有操作都簡化成一個按鈕,那麼這個按鈕在設計的時候,就需要對使用者的操作做出很多假設。如果這些假設不符合你的具體情況的話,只能算你運氣不好。
舉一個很明顯的例子。智慧手機和膝上型電腦就有很大的不同。在智慧手機的應用裡,比如Whatsapp,長按連結就會複製連結。那麼,這個操作背後的假設就是——Whatapps的開發者想的是,如果使用者長按連結,他們可能是想複製連結。但是事實可不一定如此。或許我長按是想分享連結到其他應用呢?或者我只想複製連結中的一部分內容,還有可能我是想將連結儲存到稍後閱讀清單裡。這些操作在筆記本上都很簡單,但是在手機上,有時反而很麻煩。
問題就在於開發者覺得“易用”的設計,他們想象中的使用者需求,以及使用者真正的需求不總是吻合的。使用者長按文字可能是想分享,怎麼就複製了呢?Word也是如此,又是它總是自動縮排,改都改不了。如果軟體開發者總是習慣於幫使用者做決定,根據自己的假設來設計軟體或應用的功能,這樣的不匹配只會越來越普遍。
這也是複雜工具的優勢所在。與其想辦法、花時間找最簡單易使用的工具,倒不如花點時間掌握最強大的工具,然後精準地實現自己想要的操作。
世界上最難用的文字編輯器
Vim是什麼?為什麼那麼難用?
Vim是一款文字編輯器。編輯文字聽起來不是什麼難事,所以要說文字編輯器難用,估計很多人會不解。文字嘛,敲敲鍵盤,字就出現在螢幕上了,這能有多難?
但是Vim的操作沒這麼簡單。你用Vim輸入文字的時候,敲了鍵盤,字母不一定會出現在鍵盤上。
沒錯,因為它是一款“模式編輯器”,vim的模式可以有多種編輯狀態,最常用的是普通模式,輸入模式,檢視模式,命令模式,普通狀態是vim的預設模式,所有鍵盤的按鍵都是你可以使用的快捷鍵,使用Vim處理文字的時候,鍵盤不再用於輸入字元,而是輸入 vim的各種命令。這樣,使用者非常快速做各種改動。所以Vim常常是用來改程式碼。
Vim裡使用的命令很多都很簡單,但是語法很強大,有動詞、名詞和修飾詞。字母d代表“刪除(delete)”,w代表“單詞(word)”。如果你鍵入dw,就可以刪除一個單詞(delete a word)。你可以加上修飾詞,比如數字5, 鍵入d5w就能刪除游標後的5個字。如果你操作失誤,可以按下u來撤銷(undo),然後鍵入i來進入輸入模式(insert),做正常的文字輸入。y代表的是“yank”(拉),用於複製,yw就可以複製一個單字。
實際使用起來如下圖。
通過這樣的語法,使用者可以組合出無數種命令,實現具體且非常複雜的操作。在不熟悉的人看來,這些操作可能很炫酷。只要敲幾個鍵,你就能把好幾句話從一段移到另一段;從游標處把下一個句號前的內容一下刪除,然後重寫句子;兩個單字換位置;兩段合為一段,等等。完全不用碰滑鼠就能實現很多此類操作。
學會使用難入門的工具有什麼好處?
就我個人來說,學用Vim給我的工作帶來了天翻地覆的改變。在我使用比較熟悉的時候,我覺得自己之前輸入和編輯文字,就像騎小孩子用的自行車一樣,後輪兩側裝著小輪子,跑得穩當,但是又慢又笨拙;就像彈鋼琴,但是一次只按一個琴鍵,根本沒意識到自己可以彈和絃,可以一次按下好幾個鍵。甚至,我就像柏拉圖洞穴隱喻中生活在山洞裡的人,只能看到現實的影子,就以為影子是現實本身。
“洞穴隱喻”——設想有這樣一個大洞,通過一個長長的通道與外部世界相連,整個通道能夠擋住任何陽光進入洞內。一組囚徒背對著出口,面向遠處的牆壁。他們的四肢被套上了枷鎖,並且他們的頭頸也被固定住,無法轉動,因此看不到他人,實際上也看不到自己身體的任何部分,而只能夠看到面前的牆壁。他們在如此的環境下終其一生,不知道其他任何東西。在洞穴中,他們身後有一把明火。他們不知道自己和明火之間隔著與人一般高的土牆,在牆的另一邊,人們頭頂東西走來走去,東西的影子被火光投射到囚徒面前的牆壁上,人們的嘈雜聲也迴響到牆壁那邊囚徒們的耳朵裡。柏拉圖說,這樣一來,囚徒們一生中所感覺或經驗到的唯一實在就是這些影子和回聲。 在此情況下,他們自然而然地會以為這些影子和回聲成了全部的現實,他們能夠談論的,就是這種“現實”以及對這種“現實”的經驗。
這麼說似乎消極了點,但是事實確實如此。掌握了Vim之後, 不斷是在寫程式碼,還是在用文字表達自己的時候,感覺都更自如,更得心應手。
而Vim並不是什麼新事物。幾乎計算機普及以來就一直存在了。Vim是最早開發出來的一款文字編輯器。在滑鼠普及之前就有了,所以沒有滑鼠,才更顯出它的高效。Vim來自軟體開發的早期,當時的程式設計人員面對有限的計算能力和靈活程度,只能靠使用起來略為複雜的工具來應對。Vim確實很難上手。
放在今天看來,文字編輯這樣簡單的工作都可以這麼複雜,可能難以想象。這是因為,開發Vim的人沒想著做簡單易用的工具,而是把決定權都交給使用者。Vim的開發者考慮的是如何做出最好的工具,功能足夠強大,能夠解決使用者處理任務需要的工具。在Vim的例子中,開發者覺得計算機的文字處理主要是編輯,而不是加入新字元。因此,Vim的預設模式是普通狀態是編輯模式,可以剪下、移動、操縱文字。如果使用者無法接受敲了d,螢幕上卻沒有出現的字母d的情況,那開發者就不能做出這樣的軟體了。只有假設使用者願意接受的情況下,這樣的軟體才有使用者基礎。
找到你自己的想法
使用Vim編輯是成年人學習的一項技能。這種技能想要學會並不簡單,但是正如學烹飪,學修電器,學會拒絕他人一樣,一旦學會,長期看來益處很大。當然,不是所有難學的技能都值得學習,有些程式很難用,很難上手,但是設計得也很糟糕、不實用。在學習Vim的過程中, 我意識到,很多“易用”的工具,用多了只會讓自己越來越傻。
現在新興的易用型軟體,有很多會降低我們的工作/學習效率。簡單的工具一般會自帶假設,中斷使用者的思考過程,為了使用的流暢,犧牲的是效率的最優化。而讓大家退避三舍的難用工具Vim,熟悉之後卻能讓我更自如地表達自己,降低了實現自己腦中所想操作和實際操作之間的阻力。我可以快速寫出自己腦中文字的幾個版本,非常靈活。如果我不喜歡Vim現有的操作,我可以增加其他使用者做的特徵,或刪去自己不喜歡的功能,或者花點時間做出最適合自己的工具包。其實也不是這麼難,你可以看看科學作家迪希特(Jay Dixit)的這個演講,他也沒有程式設計經驗,但是他根據自己的工作習慣和節奏,把Vim的對手工具,Emacs定製成最適合自己的版本。
所以,我們可以嘗試接受複雜的工具:如果能學R語言或者Python,為何執迷於Excel?如果能用自制的Anki卡片,為什麼要買做好的記憶卡片?我們不應該指望軟體幫我們把事情通通完成,而是應該充分應用自己的大腦。
編譯組出品。編輯:郝鵬程