推薦序
進入雲端時代後,硬體也從原子變成位元,使得用程式的描述方式進行軟體開發,轉變成更下層的平台建置、運維管理、甚至是硬體控制都成為可行。從前層次分明的程式設計師、運維工程師、伺服器/ 網路管理工程師之間的界限越來越重疊,這也使得程式設計師不得不跨足到Opeartion 這一塊,這也是DevOp 這一個工作興起的原因。
當程式設計師跨足到運維時,最大的優點就是利用程式設計師的邏輯,但光有邏輯還不夠,能層層架疊的Stack,讓每一個層次能不互相依賴,最大的功臣就是每一個層次所架起Stack 的抽象化,而抽象化要真正能實作,就是層次功能的輕量化。
輕量化是目前資訊業的趨勢,就以純位元的架構來說,當Docker 取代了虛擬化成為資源佈署的單位,當Heroku、Google App Engines 取代了傳統的Platform 之後,上層的程式也開始流行輕量化。用JSON 表示資料,用快而輕的編譯器、這些都再再顯示我們已經習慣用更小的積木來堆成巨大的產品,當然這些積木本身已經設計十分精良,足以承受非常大的任務。
開發語言本身也有輕重之分。從前一直流行的LAMP 架構,在面對輕量化的趨勢,慢慢也讓工程師有點頭痛。Ruby 一直是目前主流網站使用的語言,快速架設及快速原型,讓工程師能專心在程式的邏輯而非瑣事,自然成為主流。
但本書最大的特色,對我來說反而不是用什麼軟體或是什麼設計,而是作者極嚴謹的思考習慣。從系統選擇(Windows 還是Mac ?)、shell 選擇(使用了zsh 而非預設的bash)、工具選擇(vim 或sublime text)開始,每一個步驟都為接下的開發打下最好的基礎。有了這個嚴謹的思考習慣,以及什麼事都要做到最方便的原則之下,接下來的Sinatra、Rake、Jenkins、以及自動化的Chef(筆者本身則是更愛Ansible),就順理成章了。
一個好的程式設計師,不是一天能產生多少行的程式碼,而是這個程式碼真的有沒有寫到最符合需要。當你在每一個細節都非常非常苛求時,相信你最後完工的程式碼也會具有相當的品質。這本難得的好書,真的在每一方面都做到了,著實不容易。
胡嘉璽