[2023 15th鐵人賽] Day13 - 工程師邁向下一階段的學習方法

發佈時間

原文連結:エンジニアの次のステップへの勉強法 - Qiita

接下來會針對職涯部分,依序介紹學習方法、履歷撰寫方式、以及面試準備方向等文章。即便是從日本環境的角度撰寫,道理還是大致相通。

本篇首先介紹的是「學習方法」,技能方面較偏向後端技術,未來求職可以作為參考。

以下正文開始。


那些能夠根據指示完成工作,對不同程式語言大多能夠上手的工程師,有時會發現他們在這種環境下,反而成長停滯不前。 他們熱愛技術,也熱愛創造,卻發現自己的成長受制於環境。 在這些的環境中,將可能導致成長停滯:

  • 缺乏互相討論新技術資訊的工程師
  • 工作對於技術水平需求不高
  • 改善週期緩慢
  • 缺乏整合開發流程的人

簡而言之,這是一個能夠穩定工作,但停滯不前的職場環境。 由於業務上已經能足夠獲利,因此不需要追求更多的成長。 當然,這種生活方式也是一種選擇,如果認為這樣過也不錯,那就不需要再繼續往下閱讀。

本文將提供一些方向,給喜歡拓展技術,並且樂於創造的工程師,同時卻也對現狀感到困惑的人。

前言#

以下內容,基本上是目前我所身處的環境中,經常會談論的 基礎 內容。 雖然不能說是完全理解,但這些詞彙和概念,都是經常出現在對話中的內容。 作為一名工程師,不能只是瞭解框架和追求趨勢,更需要的是強化基礎能力。

如何提升工程師的基礎能力#

學習設計模式#

有些以 GoF 為代表的設計模式,如多線程編程模式,函數式編程模式。不論是哪種物件導向的語言,都可以應用 GoF 的設計模式。

如果是多線程編程,可以試著了解 CyclicBarrier、CountDownLatch 等。 如果是 Java,那麼參考 java.util.concurrent 套件中的實作應該會有所幫助。 如果是函數式編程,可以學習 LoanPattern 或在 Scala 中使用 mixin 的 CakePattern,以及 Monad 等。

依循這些模式的程式碼,不僅能夠實現預期功能,也能寫出更好的風格,同時提高靈活性和穩健性。

理解基礎架構和網路知識#

在當今的時代,即便是開發應用程式,通常也需要處理網路連線相關問題。瞭解協議的特點,以及 HTTP(瀏覽器)的規範,並優雅地完成實作。

  • TCP
  • HTTP Protocol
  • DNS
  • Routing
  • Middleware

此外,還有近期不斷發展的 Immutable Infrastructure(不可變基礎設施)和虛擬化技術。 學習 docker、kubernetes 和 CloudFormation 等工具,例如錯誤監視系統、統計訊息管理等中介軟體和服務。

藉由理解這些領域的知識,將有助於提升開發速度,並加強穩健性。 一旦能構思出理想的基礎設施配置,對於建構在這之上的應用程式也會有不同的見解。

閱讀開源軟體的程式碼#

現今,有許多優秀的工程師選擇公開程式碼。(真是美好的時代啊 ⋯⋯) GitHub 上許多知名框架的程式碼,也是以開源方式進行開發。 透過閱讀我們熟悉的框架程式碼,瞭解其中的機制、思維,以及程式碼風格。 如果是 Java,試著閱讀 JDK 類別的程式碼也是不錯的選擇。 和至今所寫的程式碼相比,說不定能發現更好的寫法,此外也有機會學習到,符合框架理念的類別分割方法等內容。

體驗雲端環境服務#

使用雲端系統以迅速啟動服務,已經變成常態。 根據不同情況,可能需要具備雲端系統相關的知識。試著瞭解有哪些可利用的服務,並實際動手使用看看吧。 由於能夠以小時為單位租借,投資知識的費用只需要數百日幣,能以相當低的成本取得新知識。 如果連這筆金額都無法投資,那對工程師自身的成長又能投注多少熱情呢? 不論哪種雲端服務, AWS、GCP 或 Azure 都可以。 如果可以,除了基本的 EC2 等伺服器實例,也可以試著使用特定功能的雲端服務。

以 AWS 為例,還有像是 CodeBuild 和 CodeDeploy 等的 CI 環境,以及 CloudFormation 等服務。並且提供了多個儲存選項。為什麼提供多個選項呢?在什麼情況下,使用這些服務能夠提升開發速度?為了成為能夠提供建議的工程師,瞭解這些知識是有必要的。

如果能夠深入瞭解,這將成為一種優勢。 在這個時代,使用雲端服務已成為常態,並且將會是工程師必備的基本知識。

學習架構模式#

在 GoF 等設計模式中,定義每個類別的角色,如果想實作成一個應用程式,將會在程式中產生大規模的數據流動。

  • Layered Model(階層型架構)
  • DDD(Domain-driven design = 領域驅動模型)
  • Clean Architecture 整潔架構
  • Cloud Architecture 雲計算架構
  • Microservices Architecture 微服務架構

過去主要關注應用程式中的封裝結構,但最近開始思考伺服器以外的架構。架構是程式碼的基礎,如果基礎穩固,即使是尚未成熟的工程師,也能夠編寫易於維護的程式碼。

在建立應用程式系統的過程中,為了擁有更廣的視野,開始學習架構模式吧。

學習開發流程#

在公司開發,通常需要多人合作進行。 若希望能最大化開發團隊的產出,和提高個人開發能力相比,更重要的應該是改善團隊流程。雖然不是必備知識,但學習敏捷開發以及思考如何應用,將有助於提高團隊和自身的表現。

學習大數據處理#

面對每天增加數十億件數據的系統,至今為止的傳統架構可能已無法應對這種情況。雖然這取決於業務需求,但瞭解大數據處理,將能夠帶來一些優勢。

多數情況下,使用 BigQueryRedShift 等工具可能就已足夠,但對於 Web 應用程式伺服器來說,必須注意延遲的問題。解決延遲並實現可擴展的架構,將使系統更為突出。

此外,瞭解專門用於大規模處理的環境,如 HadoopHIVEECSSpark 等框架,也將有所幫助。

儘管也能自行操作來驗證,但要進行大規模數據實驗仍有一定難度。因此,透過學習來改變環境,尋找能夠提供這些設備的公司,或許是提高自身工程師水平的一條近路。

通過機器學習獲取額外知識#

在雲端服務中,提供能夠輕鬆使用機器學習數據的服務。 此外,還有可執行機器學習的基礎設施,這些也能夠自行建立。 視情況也會使用到 GPU 處理或 FPGA 等技術。

雖然統計和機器學習,可能不同於工程師具備的技能,但我認為這是目前流行的技術組合之一。 順帶一提,我自己本身不太會這些。

瞭解技術以外的趨勢,尋找能發揮技術的機會#

利用區塊鏈技術的虛擬貨幣,如 Bitcoin(比特幣)Fintech(金融科技)等,以及個人化廣告技術、EC 電子商務和各種媒體的推薦引擎、搜索引擎等。

技術水平 + 商業應用,對於工程師來說,是一個充滿挑戰的環境。這有助於提升工程師的技術水平,瞭解哪些環境能夠最大化個人技術價值,對於自身成長是有必要的。

追尋新技術的五種方法#

由於技術不斷在進化,光是提升基礎知識,可能還是會有不足的部分。

為了成為更強大的工程師,我們需要擴展技術的視野,以下提供一些追蹤資訊的方法。

參加研討會#

研討會可能不會深入探討技術細節,通常會提供一些使用案例。 透過這個場合,能夠建立對未知領域的基本概念,有機會瞭解之前不曾聽過的知識內容。 若想要更深入瞭解,就必須自己動手操作,但參加研討會對於獲得新知識和技能來說,也是一個不錯的機會。

此外,有些研討會可能設有交流會,可以和平時不會接觸到的工程師進行交流,甚至找到轉職的機會。人脈關係是非常重要的。

在 Twitter 上關注最新資訊#

一些知名人士經常會在 Twitter 上發布訊息,這些訊息通常會談論到最新技術。 因此透過關注這些 Twitter 帳戶,即可掌握最新的技術動態。每個領域都有一些知名的人,可以一點一點累積,慢慢擴大關注人數。

查看官方文文件#

最新資訊通常會記錄在官方網站上。包括 AWS 的新服務、GCP 的新服務、其他框架的開發進展、ISSUE、Pull Request 的處理情況、未來的願景等等。

也許不會馬上導入這些最新服務,不確定什麼時候會需要使用,但定期查看官方文件將有助於累積知識。 此外,Google、AWS、Microsoft 等公司網站上,還提供雲架構的相關解釋,構成管理的概念說明,以及開發流程和管理方面的資訊。不僅提供有關雲服務的知識,還提供提高基本知識的文章,因此有空時也可以翻閱看看。

查看 GitHub#

這部分與閱讀開源程式碼有關,但 GitHub 有個頁面能夠查看趨勢。

不一定是閱讀開源程式碼,也能透過查看星數多的專案,閱讀 README 等內容,瞭解有哪些產品正在被開發,以及掌握目前的趨勢,這將有助於提高對技術的構想與感知能力。 頻率不用很高,偶爾查看或許就會有有趣的發現。

查看 Qiita 的文章#

最近的趨勢頁面,經常會出現受到大眾歡迎的文章內容,這導致探討核心且有趣的文章不容易排行在上位,但可以透過追蹤自己喜歡的作者,即可在時間軸頁面查看更新的文章。 我自己也有在 Qiita 上寫文章,建議可以試試看 w

結語#

我一直希望能夠為有幹勁的工程師,創造一個有利於成長的環境。 建立一個能讓有幹勁和實力的工程師,充分發揮其價值的系統。 如果有任何問題、評論或需要提供方向,歡迎隨時留言,我會進行答覆。 希望提供這些想法給願意實際執行,而非只停留在空想的人,讓他們在學習上有個方向。 此外,如果有其他方法或想法,請在評論或引用等方式分享!

15th 鐵人賽目錄傳送門:https://ithelp.ithome.com.tw/users/20135558/ironman/6290