【DevOps】程序員(Dev)的運維(Ops)課後心得

Odd-e 拆叔之神奇的 DevO̸p̸s̸  課程,學習「開發人員的維運」和「維運人員的開發」之課後心得。

前言

先說結論:

這是一堂開腦課程。

         與之前上過的 Daniel 的開腦課程不同,拆叔的 DevO̸p̸s̸  課程會讓你懷疑自己是開發(Dev)或維運(Ops)人員嗎?質疑自己過往工作能力與方法,才恍然大悟自己工作是多麼沒有效率。人生都浪費在沒意義的工作上,真的有意義的工作反而沒時間做。

 


 

什麼是 DevOps?

        如同「10 個經濟學家會有 11 個意見 」一樣,詢問每個瞭解 DevOps 人,答案都會不太相同。從 2009 年提出 DevOps 後,又冒出 NoOps、OpsDev、DevQAOps、SecDevOps...... 等。結果最後變成:BusDevTestQANetSecSysNetOps

        其實一開始 DevOps 這名詞用來解決開發(Dev)團隊與維運(Ops)團隊協作不順暢而提出的概念,現今團隊劃分更細緻,重點應該是如何達到各團隊間有良好的「溝通」與「協作」,別被名詞嚇到了。

 


 

DevOps -eq Dev

        什麼是開發(Dev)?什麼是維運(Ops)?現在系統越來越複雜,功能與職責拆分越來越細,導致出現開發(Dev)團隊與維運(Ops)團隊,這兩個團隊要緊密協同合作。

        另外,很多人誤會維運(Ops)是使用自動化工具,所以花費過多精力學習使用 Docker、Ansible、Jenkins ... 等顯學工具。工具很重要,這些工具可以輔助你快速完成一些簡單作業自動化,但複雜的自動化還是要透過 Shell,而課堂中使用的就是 Bash。舉例來說,Shell 有如 Java,Docker 或 Ansible 等工具有如 Spring 框架,如果你說你很瞭解 Spring 框架但不熟悉 Java,我們很難相信你是 Java 開發高手。同理,只會各種自動化工具而不清楚 Shell,我們也很難相信你是 DevOps 專家。

        一個 Java 開發專家寫好程式的關鍵是 Java 語法,但只瞭解 Java 語法能成為專家嗎?同理,維運專家核心能力是 Shell,但這樣稱的上維運專家?

        如果維運(Ops)人員重點核心能力是寫好 Bash,那和開發(Dev)人員有何差異?一個寫 C#、Java... 之類的語言,一個寫 Bash、PowerShell... 之類的腳本,其結果都是開發(Dev)。

        要做好 DevOps,除了公司團隊溝通協作外(文化層面),重要的是個人工程實踐的能力也相當重要。不管是 Agile 或 DevOps,若建立在團隊每個人強大實力下,其效果更佳有效。何謂實力?別被工具或框架迷惑了,別當只會設定自動化工具的維運(Ops)人員。維運(Ops)人員核心技術是 Shell,如同 Java 開發人員核心能力是 Java,就是寫 code,所有寫程式該注意的地方維運(Ops)人員都該注意,包含職責分離或重構... 等技巧。一切都是開發,做不好開發維運工作也無法做好。

        DevOps 小至維運,大至組織結構與文化,論述範圍與方法非常廣泛。別忘了若沒有良好個人實力,談組織文化也枉然,因為瓶頸是團隊實力不夠。

 


 

Bash 之美

        拆叔一直說這堂課只有 1/4 時間寫 Bash,教導如何寫好 Bash 與其應用。然而大家一致認定 Bash 是貫穿這堂課的核心技能。如何透過「重構」,達到「職責分離」、「複用性」、「可讀性」,所有程式開發需注意事項,都能用於撰寫 Bash 上。

        Bash 可以幫你一鍵部屬外,拆叔還示範一鍵網頁截圖存檔,一鍵開啟 zoom 並發訊息給成員開會。將繁雜功能封裝起來,簡化日常工作流程,將花費時間較長或重複性高作業自動化,讓我們將心力與時間花費在有價值的工作上,剩下的全部自動化吧。       

        不管你在那個平台上,不管使用 Powershell 或任何 shell,核心概念都是不變的,就是寫 shell 配合各種工具而已。

 


 

心得

        後續使用 Vagrant 與 Ansible 工具,談到微服務與 Docker,還有強大的火力展示,剩至還有很多獨門絕技,這些我就不劇透了。

        透過自動化簡化工作與生活無謂的浪費,這些都基於強大的 Bash 實力外,重點在於你夠不夠「懶」。當每個工程師都有強大的個人實力,將精力與時間投資在有挑戰與有價值的工作,將繁雜重複的工作自動化,熟練的將各種工具組合運用,這家公司會有極強的戰力。

        當維運(Ops)能力變強後,空出時間後,漸漸可以往 T 型或梳型人才邁進。當團隊成員都是 T 型人才,可將業務、開發、測試與維運人員組成一個 TEAM,一同協作來減少溝通成本,提升開發質量。

        把平常在做的事情自動化,這是一門技術,也是專業開發與維運人員應具備的能力。

 


 

感想

        這門課看到過往的自己不成熟之處,彷彿被否定過往工作風格,看到真正的高手做事方法,瞭解專業人員應具備心態與技術,彷彿有種豁然開朗一樣,再次開腦,讓我這井底之蛙看到世界。我不知道未來的我能做到多少,但有條道路,讓我能確定方向往前進。

        課後讓人反思,到底高手們想些什麼?心態上、技術上、做事方法上、學習上到底有什麼差異?高手們看到事情本質並專磨到精,日復一日從不懈怠,樂在開發所以樂在工作,又因為掌握將工作化繁為簡能力,多出來的時間可以挑戰有價值的工作或享受生活。

        建議工作多年的開發人員或維運人員上這門課,一定能給你的想法、工作方式與心態大幅改觀。

        如果你只是想來學習某種工具或自動化,這門課會讓你失望,不建議來上課。如果你想被喚醒,推薦來參加,一定有滿滿的收穫,外加幫你把心裡那把火點燃。

        雖然這麼說,除了開腦外,但這堂課含金量也非常高,課程中有非常多獨門技術(Google 關鍵字也搜尋不到),每個練習都會有意想不到的驚喜。