如何提升你寫程式碼的效率並且強迫你仔細思考。
本文並不是關於Emacs與Vi論戰的文章。 我主要是想解釋為什麼(深入)學習一個低層的文字編輯器對任何軟體工程師來說都應該是最重要的事情。 我個人喜歡Emacs因為我覺得它常用的快捷鍵(common shortcuts)比較容易記憶。 但是隨後你會發現,其實選擇哪個編輯器無所謂,只需要去學去用就行了。
像Emacs這種編輯器看起來很古老,但是卻很有效率。 它的快捷鍵的設定充分考慮到了你的手放在鍵盤上的位置,以及最常用的那些鍵是哪些,並據此做了優化。 這些編輯器能讓你以難以想象的效率完成工作,同時它們還強制你去思考自己在做的事情。 它們不僅讓你變更更有效率, 它們還讓你理解你在做的事情而不僅僅是無腦的寫寫程式碼(writing code with crappy CRLF)。
熟悉你的工作環境
我發現軟體/網頁應用開發人員常常願意花時間去熟悉他們所使用的程式語言與框架。 這當然很好。 這會讓你隨著時間的推移而越來越有效率。 但是, 有些情況下, 僅僅在開發環境開發新的功能還遠遠不夠。 你越熟悉軟體程式碼,你越能夠設計,編碼併為產品新增進更多的功能。 然而,大多數時候,事不如人所願。總會有各種各樣的管理或技術上的原因導致你無法為產品增加功能。 很明顯,若你們公司的文化是隻有那幾個開發主管有許可權為產品增加新的功能,你的開發過程將很受限(而你也許應該換份工作)。 當然,大多數時候, 這並不是你無法為產品增加功能的原因。 大多數時候,只是因為你對生產環境不熟悉而造成不想在該生產環境下工作(或者其他人不想你工作。)
當然,熟悉工作環境不僅僅意味著熟悉MS Windows。 還意味著熟悉你的版本控制系統,熟悉你所使用的釋出工具,掌握伺服器配置(例如Apache或Nginx的配置),熟悉程式語言的配置,熟悉linux配置與Linux日誌系統。
你應該知道的,所有這些工具的配置檔案都是文字格式的,你常常需要直接登入到伺服器上編輯他們。 在這種情況下, 你沒有辦法使用任何一款熟悉的帶圖形介面的文字編輯器。 這時只能使用Emacs或Vi了。
總之,若你像熟悉你的工作環境,你需要熟悉Emacs或Vi。 任何對你的Vagrant,Docker,Linux伺服器以及工作環境中其他任何東西的的配置操作都需要開啟一個文字檔案然後編輯它。 大多數時候,甚至提交一個變更都會要求你使用非圖形介面的文字編輯器來編輯提交資訊。
若你想把事情做好,請學習使用Emacs或Vi。
提升你的能力以使自己變得很有影響力
作為一名軟體工程師,影響力來源於你能否想出可擴充套件的解決方案,能否在很短的時間內找出解決問題的好方法,寫出的程式碼是否具有可維護性,等等一系列的事情。 有一點可以確定,那就是找出聰明的解決方案依賴於你的大腦而不是你的鍵盤和滑鼠。 這就是我的觀點。 像Nano,Emacs,Vi這類非圖形化文字編輯器開發於70年代。 當時軌跡球與滑鼠尚未流行,因此當時所有的工作只能通過鍵盤來完成。 而這種無滑鼠的哲學一直流傳到了今天, Emacs 和 Vi 完全無需滑鼠也能用,這就是它們的優勢!
想一想。 你每天有多少次將手從鍵盤移動到滑鼠或觸控板? 的有上千次吧? 每次你將手從鍵盤移開到滑鼠你都需要關注於游標所在的位置。 然後等操作完後,你還要把手放回鍵盤。 這些動作每個大約要花費半秒鐘的時間吧。 那麼讓我們假設每次你使用完滑鼠然後將手放回鍵盤要花一秒鐘的時間。 這意味著你一天浪費了1000s(16分鐘),一個月就是333分鐘(5小時), 每年就是2天半。
作為一名程式設計師,這些時間你應該用來增強你的影響力而不是TMD用來尋找你螢幕上的游標的。 學習Emacs意味著要學習許多的快捷鍵,然後用這些快捷鍵去完成任何事情,例如搜尋與替換,移動游標到函式的下一行,跳轉到任意行,將游標移動到檔案末尾,等操作。 學習Emacs會強迫你使用鍵盤而不是滑鼠/觸控板。 假以時日, 你會變得更有效率並且更加適應鍵盤操作。 很快你就不會再想使用滑鼠了,你會強迫自己去學習所鍾愛的圖形化編輯器的常用快捷鍵了。
三思而後行
你根本不在意一年省出那麼兩天半?還有其他好處呢。
使用新出的圖形化文字編輯器和IDE很明智。 我個人也常常使用Atom 以及 PhpStorm。 它們提供了許多便利的功能例如可以很方便的在函式,類之間跳轉,很方便的進行單元測試, 整合了版本控制系統, 預覽markdown等。 而且雖然像Emacs和Vi這樣的編輯器也能提供這些功能,但是你不得不花無數的時間來配置各式各樣的外掛。 然而使用滑鼠去點選這些功能卻並不明智。 在我看來最好的一個例子就是大多數圖形化編輯器都會提供的樹狀檔案檢視。
在你的程式碼左邊列出樹狀檔案檢視是一項蠻有用的功能,但僅限於當你根本不知道你要找的是那個檔案時。 然而事實是,大多數時候,人們使用這種方式開啟所有專案中的檔案,即使他們其實知道要開啟的檔案地址。 這樣,這些開發者(我的大多數同事)每次需要看其他檔案的程式碼時,他們需要將手移動到滑鼠,檢視樹狀檔案列表,點選目錄,找到再找到要開啟的檔案。 你是不是經常這樣幹? 這意味著即使你的大腦已經知道了要找的程式碼存在哪個檔案中,你依然需要瀏覽樹狀檔案檢視從中找到存放程式碼的檔案。 這對我來說毫無意義。
Emacs與Vi並沒有樹狀檔案檢視工具。 你需要使用快捷鍵和命令來開啟新檔案或buffer。大多數時候,這些編輯器都提供了檔案路徑自動補全功能,該功能允許你只輸入一部分字元然後按下tab鍵就能找到要找的檔案。 總之,由於需要輸入要開啟的檔名的開頭幾個字母,這就強迫你一直想著這個檔案並將注意力一直放在你要尋找的東西上去。 這樣你的注意力就不會被滑鼠和樹狀檔案檢視皮膚所分手了。 這對你有好處,而且,我相信再用過一陣子類似 Projectile
這樣的專案管理工具後, 你不會再想去用樹狀檔案檢視了。(我安裝完Atom之後的第一件事情就是為切換顯示樹狀檔案檢視功能新增一個快捷鍵)
再強調一遍, 認真想一下。 從樹狀檔案檢視種瀏覽病找到一個檔案要花多長時間? 根據要找的檔案是否靠近與當前編輯的檔案,這個時間從5秒到10秒不等吧。 你一天又要開啟多少次檔案呢? 10次? 20次? 就假設是15次吧。 這樣一天下來你要花2分鐘來尋找那些你已經知道如何呼叫以及在哪裡的東西。 一年下來那就是10個小時。
以其浪費時間再尋找那些你已經知道位置的檔案上面,還不如停下來開始學習Emacs呢。
嘗試它然後你會愛上它
Emacs還有其他優勢,例如它可以開啟像dump或日誌這種巨大的檔案,而Sublime和Atome開啟這種巨大的檔案會崩潰。 網路檢視編輯器常常會有記憶體洩露的問題,而它沒有這個問題。 你也很難對那些現代編輯器做出微調以極大地提高你的工作效率(例如,我就經常使用大量的Emacs外掛)。
而你最好去嘗試一下它,我相信你很快就會愛上它的。
Emacs和Vi支援多平臺。 Windows, Mac OS 以及 Linux上都能使用。
- 去Emacs官方站點找到適合你平臺的Emacs版本。
- 去EmacsRocks上觀看一些視訊入門。
- 使用Melpa包管理器來新增一些外掛。
- 學習使用快捷鍵提升效率。
最後, 歡迎克隆我Github上的個人配置,該配置是偏向於網路開發的。