沒有熱情就不夠格當開發者嗎?

許多研究都指每週 40 小時是最有生產力的工時,不過 Malcolm Gladwell 在《異數:超凡與平凡的界線在哪裡?》(Outliers, the Story of Success)中也提到,要邁向成功需要一萬小時的練習。而我的合氣道教授則說,練習愈多你就會變得愈強。
評論
評論

原文為《Is There Any Room for the Not-Passionate Developer ?》,作者為自由開發者 Philippe Bourgau,INSIDE 獲授權編譯。

作者依自身軟體開發的經驗,加上整理比爾蓋茲、Peter Thiel 等各大名家曾經提過的理論及其中的矛盾,試圖找出軟體設計生涯中該付出的努力、熱情以及私人生活的平衡。

在《工作大解放:這樣做事反而更成功 》(Rework)這本書裡,Basecamp 的  David Heinemeier Hansson 和 Jason Fried 說要「開除工作狂」,但《從 0 到 1》的作者 Peter Thiel 卻說絕佳的工作條件,(比如像 Google)是需要超過十倍的技術力來支撐的,沒有其他捷徑。

比爾蓋茲則是在 1983 年的時候說過:

你必須覺得這個產業很好玩。你得晚上回到家還找電腦雜誌來看,否則你的波長會跟不上(在微軟的)這些人。

所以我們該相信誰?你的人生一定要活在程式設計中才能當個好的開發者嗎?

許多研究都指每週 40 小時是最有生產力的工時,不過 Malcolm Gladwell 在《異數:超凡與平凡的界線在哪裡?》(Outliers, the Story of Success)中也提到,要邁向成功需要一萬小時的練習。而我的合氣道教授則說,練習愈多你就會變得愈強。

John Somnez 在《Soft Skills: The software developer’s life manual》一書中,一樣強調努力的重要性。儘管他認同「聰明工作」就夠了,但也承認他比尋常付出了更多努力,才在職涯中創造了驚人的改變。

在一場對談中,Ruby on Rails 首位創作者,知名程式設計師 DHH(David Heinemeier Hansson)也曾和連續創業家 Jason Calacanis  一同探討 工作和生活的均衡。 Calacanis 認為創業必須全心投入,而最後他們倆都同意「熱情」才是最重要的。

以我個人的經驗來說,當我做自己熱愛的事時,我會:

  • 更有生產力
  • 覺得充滿活力而非被工作淹沒

我周遭的優秀開發者個個都充滿熱情,而且每週工作超過 40 小時。我也觀察到,熱情和努力是發展未來技能的關鍵指標。

但是一個充滿熱情的人要怎樣在每週工作超過 40 小時的狀態下,依然維持生產力?

在  《Pragmatic Thinking and Learning: Refactor Your Wetware (Pragmatic Programmers)》一書中,Andy Hunt 提到了我們平常在背景執行的 R-mode 工作之外,還要找一些空閒來做一些「跳出框架」的創意方案。

加入一些創新點子來維持活力

極限開發法鼓勵大家維持 可持續 的開發步調,《無瑕的程式碼 番外篇:專業程式設計師的生存之道 》(The Clean Coder)作者 Robert C. Martin 又叫我們每週工作 80 小時才能保持「專業」。

對我來說,持續在一個專案上做結對程式設計(Pair Programming)6 -- 8 小時就是極限,超過的話,造成的瑕疵就會大於做出的貢獻,讓我變成「 淨負生產力程式設計師 」(Net Negative Producing Programmer)。但如果我同時做一點業外專案,那我一天可以堅持寫程式的時間就會變多。

我猜有熱情的人大概就是這麼做,他們會在主要的工作之外安排一些不同的主題來點綴。

  • 他們看關於程式設計的書。
  • 他們有自己的業外專案。
  • 他們會讀程式設計的文章。
  • 他們可能還會寫程式相關的部落格,他們可能會參加、舉辦或是主講一些聚會。

大部分的時候,做這些都不是為了完成更多工作,而是為了學到更多。我發現身邊的傑出程式設計師都充滿熱情,而且盡力去增進自己的技術,同時也注意到純粹過勞的工作狂通常生產力都不高。

為人父母的挑戰

我認為比爾蓋茲 1983 年的那段話還是沒錯。如果你沒有熱情,那程式設計師很難做得久。

保持熱情的好處在於,我們可以擁有一個活力四射的工作環境,充滿變化和新奇。但反面來說,要跟上這樣的節奏可不容易。

當開發者愈來愈有經驗,就會開始對麻煩的工作失去耐心,然後想要擁有:

  • 強大的程式語言和技術。
  • 有效率的工作環境。
  • 聰明的同事。

不幸的是,當你為人父母,你可能只想有份穩定的薪水來養家,還有一些自己的時間來陪孩子。

這時候就開始有點棘手了。你既不能跳槽到很酷卻高風險的新創公司去做出一番事業,你也沒辦法熬夜擠時間出來增進你的技能。雪上加霜的是,儘管你擁有 10 年的工作經驗,懂得各種語言和技術,你的履歷表上要是沒有亮眼的關鍵字,很多公司連看都不看一眼。這簡直就是開發者版本的創新者窘境(The Innovator's Dilemma),你就像那些老牌公司一樣要保證自己不會被新技術擠出市場。

缺乏熱情和養小孩,這兩點應該能解釋人們停止當個開發者的部分原因,而且我馬上就想到這種現象帶來的兩種後遺症:

  • 我們常常要重新發明像輪子一樣基本的要素(就是你,那邊那個在開發 .js 框架的)
  • 隨著老手的離去,我們可能會在沒有意識到的狀態下,忽視了一些可以讓我們更有效率的人際互動流程。

開發者享受 CI/CD 價值!運用 Amazon EKS 整合 GitLab 創建自動化部署

企業如何在 Amazon EKS(Elastic Kubernetes Services)上使用 GitLab 創建自動化部署,減輕人力負擔,提升專案服務運作效率?
評論
評論

所謂現代化智慧 IT,所有工程師最希望的境界,莫過於只要輕鬆點幾下設定,系統就會自動跑起來,管理者再也不用隨時待命在機台旁邊,從此工作悠哉又快樂!儘管這樣情境還沒到來,但隨著敏捷式開發的流行,除了 DevOps 人員,有越來越多開發者將 CI/CD 概念融入到工作流程當中,例如從 build code、執行 unit test、到部署應用程式。

打造第一個在 AWS 上的應用程式

上述種種反覆步驟自動化執行,也就能提昇服務品質、主動通知開發人員以減輕人力負擔,讓專案服務能持續運作。

其中,GitLab 是執行 CI/CD 常用的工具之一,也是開發者使用程式碼儲存庫的地方。為了讓 GitLab Runner 在雲端快速實踐 CI/CD,《AWS 開發者系列》透過影片分享,如何在 Amazon EKS(Elastic Kubernetes Services)上使用 GitLab 創建自動化部署。

以下節錄工作坊影音內容,幫助開發者快速理解如何運用 Amazon EKS 的高可用性且安全的叢集,將修補、部署節點、更新等關鍵任務,全部做到自動化設定。同時影片也會示範 Amazon EKS 搭配 GitLab 如何展開自動部署,幫助工程團隊實踐 CI/CD 價值。

Amazon EKS 對容器管理輕鬆簡單、維運省時省力

容器化服務越來越興盛,當容器(Container)越來越多,在複雜的微服務(Microservice)系統環境之下,運維團隊的管理成本可能相對會增加不少,為了有效調度容器部署, 導入Kubernetes 無疑是近年企業熱門的話題之一。

建構 Kubernetes Cluster 流主要可區分兩大塊,一是安排容器調度的Control Plane、另一則是容器運行時需要用到的 Worker Node。

Control Plane 裡面涵蓋有儲存狀態的 ETCD、CoController manager 、Scheduler 的調度管理、甚至是操作時進行互動的 APIServer,若是自己創建 的 Kubernetes Cluster ,需要自己安裝這些元件,後續仍需要對 Control Plane 進行相關管理、維護、升級工作。為了減少上述 Components 的繁複維護,在透過 AWS EKS 代管的 Kubernete Control Plane 部可以獲得以下三大好處。

透過 AWS 增加雲端技能 在組織發揮影響力

Amazon EKS 一鍵式部署,展現三大優勢

第一,Amazon EKS代管的 Control Plane實踐了跨AZ的高可用部署,使用者不需要擔心單一節點故障的風險。

第二,Amazon EKS 支持至少四個 Kubernetes版本,持續跟進每季 CNCF 的發佈,同時 EKS 也完全符合上游 CNCF 規範。

第三,部署 Amazon EKS 之後,可直接使用 AWS 平台上現成的服務工具,在安全性管理、網路設定方面,可以做到無縫整合。

最後 AWS 台灣解決方案架構師也提到,若想在容器環境進行 CI/CD 及應用程式的管理,可以進一步透過 IaC 整合部署 Amazon EKS 叢集,透過使用 Console、把 EKS 變成 Cloudformation 的模板、使用 AWS 所開發出來的 eksctl.io、或指令是採用 AWS CDK 可以讓開發者用自身熟悉的語言,在 AWS 平台整合 CI/CD 工具進行維運及部署 EKS。

了解 Amazon EKS 整合 GitLab ,獲得三面向價值

對開發者而言,想把 Amazon EKS 整合到 CI/CD 工具之一的 GitLab 平台上,可以看到那些實際的優勢?

在 DevOps 開發者示範工作坊當中,GitLab 資深解決方案架構師指出,GitLab 使用到 Kubernetes 技術,主要有三種搭配方法,包含 GitLab Server、GitLab Runner、以及創建 Deployment Environment。

本次示範教學會主要聚焦在 GitLab Runner 如何採取 Auto-scaled 方式進行 Build、Test、Package Apps;以及在 Deployment Environment 運用 Kubernetes 技術,做到 Auto Deploy、Review App。

正因為 Amazon EKS 能夠在 DevOps 過程提供所需要的彈性計算資源,幫助開發者在 GitLab 平台上面獲得以下三個層次的優勢:

  • 在 GitLab 內建的部署工作流程當中,自動生成整套 CI/CD 最佳實踐腳本。
  • Review App 過程,從 Merge Request 中可直接訪問應用程式 /App 的 UI 介面,並且根據 Git branch 名稱、專案名稱,自動生成 Review App 的 URL,以及在 Merge 前的最後防線進行 Approval 檢查。
  • 加速 CI/CD 流水線,GitLab Runner 運行時候還可藉由 Amazon EKS Cluster 進行 Auto-scaled 的支援。

Amazon EKS 整合 GitLab ,需要兩大流程

影片最後,GitLab 資深解決方案架構師示範如何把 Amazon EKS 整合至 GitLab 執行 Auto Deploy,主要可分為兩大區塊流程,第一部分聚焦在 Amazon EKS cluster 的設置,第二部分則執行 Auto Deploy 設置。

第一塊可拆分為四個階段,首先教學怎麼創建 EC2 節點的 EKS cluster,第二階段示範把 EKS Cluster 連接到開發者的 GitLab Instance、Group 或 Project,下一步則使用 Cluster Management Project Template 創建一個 Cluster Management Project,以及最後一階段透過 Cluster Management Project 自帶的 Helm Chart,安裝在 Cluster 所需要的內建 App。

第二塊執行 Auto Deploy 設置,針對需要部署的 App 創建一個 GitLab Project,接著再把 gitlab-ci.yml 添加到 Project,並從 Web IDE 選擇及導入 Auto Deploy 的 CI 模版,讓 GitLab 自動生成最佳實踐的整套流水線。

幫助開發者更了解 Amazon EKS 整合 GitLab 的 QA 系列

Q:使用 Amazon EKS 之後,如何更有效率或優化資源去配置 Worker Node 的機器數量,以及如何有效空管開發維運的成本?

A:Kubernetes 除了本身有 HPA(Horizontal Pod Autoscaling)可根據使用程度自動調整資源流量,另外也能延伸使用 AWS Auto Scaling 方案,針對可擴展資源去設定自動擴展管理。另外在成本管控,雖然 Amazon EKS 會收取額外管理費用,但可透過 AWS 平台的 Calculato r計算每個 EKS 的價格,你會發現自動化部署及管理的費用,相對工程師人力的成本更加便宜。

Q:越來越多客戶考慮把現有 Application 變成容器部署,大多是爲了加快部署的效率,那麼變成容器模式之後,對 CI/CD 的工作流程有什麽影響嗎?

A:運用容器技術最直接的效果,可以讓應用程式的環境更一致化,例如 testing 環節、stage production,讓容器避開一些差異問題。至於 CD 部分要 delivery 一些 usage 不太一樣的時候,容器會幫忙做配置,所以 CI/CD 對容器的效益是相輔相成的。

Q: 客戶在開發流程漸漸會把 Infrastructure 變成代碼或文檔,是不是可以把程式碼跟現有的應用程式的 CI/CD 流水線整合在一起,達到一套完整的 CI/CD 部署流程?

A:觀察目前市場作法,主要分成兩個階段去做整體部署。如果規模比較小的團隊,會把 Infrastructure 代碼跟 App 代碼分開,在管理上會比較靈活;如果企業規模比較大,會有另外一個 Infrastructure 團隊來控制部署事情,這種情况之下,APP 的項目會生成一個 APP package,主要做到 delivery 這個階段爲止。而 Infrastructure 的項目會指定把需要版本的文檔,部署到他們的 Kubernetes Cluster。

填寫表單 找到適合的快速上雲服務與工具!