接下來會針對職涯部分,依序介紹「學習方法、履歷撰寫方式、面試準備方向」等文章。即便是從日本環境的角度撰寫,道理還是大致相通。
本篇首先介紹的是「學習方法」,技能方面較偏向後端技術,未來求職可以作為參考。
以下正文開始。
那些能夠根據指示完成工作,對不同程式語言大多能夠上手的工程師,有時會發現他們在這種環境下,反而成長停滯不前。
他們熱愛技術,也熱愛創造,卻發現自己的成長受制於環境。
在這些的環境中,將可能導致成長停滯:
簡而言之,這是一個能夠穩定工作,但停滯不前的職場環境。
由於業務上已經能足夠獲利,因此不需要追求更多的成長。
當然,這種生活方式也是一種選擇,如果認為這樣過也不錯,那就不需要再繼續往下閱讀。
本文將提供一些方向,給喜歡拓展技術,並且樂於創造的工程師,同時卻也對現狀感到困惑的人。
以下內容,基本上是目前我所身處的環境中,經常會談論的 基礎
內容。
雖然不能說是完全理解,但這些詞彙和概念,都是經常出現在對話中的內容。
作為一名工程師,不能只是瞭解框架和追求趨勢,更需要的是強化基礎能力。
有些以 GoF 為代表的設計模式,如多線程編程模式,函數式編程模式。不論是哪種物件導向的語言,都可以應用 GoF 的設計模式。
如果是多線程編程,可以試著了解 CyclicBarrier、CountDownLatch 等。
如果是 Java,那麼參考 java.util.concurrent 套件中的實作應該會有所幫助。
如果是函數式編程,可以學習 LoanPattern 或在 Scala 中使用 mixin 的 CakePattern,以及 Monad 等。
依循這些模式的程式碼,不僅能夠實現預期功能,也能寫出更好的風格,同時提高靈活性和穩健性。
在當今的時代,即便是開發應用程式,通常也需要處理網路連線相關問題。瞭解協議的特點,以及 HTTP(瀏覽器)的規範,並優雅地完成實作。
此外,還有近期不斷發展的 Immutable Infrastructure(不可變基礎設施)和虛擬化技術。 學習 docker、kubernetes 和 CloudFormation 等工具,例如錯誤監視系統、統計訊息管理等中介軟體和服務。
藉由理解這些領域的知識,將有助於提升開發速度,並加強穩健性。 一旦能構思出理想的基礎設施配置,對於建構在這之上的應用程式也會有不同的見解。
現今,有許多優秀的工程師選擇公開程式碼。(真是美好的時代啊⋯⋯)
GitHub 上許多知名框架的程式碼,也是以開源方式進行開發。
透過閱讀我們熟悉的框架程式碼,瞭解其中的機制、思維,以及程式碼風格。
如果是 Java,試著閱讀 JDK 類別的程式碼也是不錯的選擇。
和至今所寫的程式碼相比,說不定能發現更好的寫法,此外也有機會學習到,符合框架理念的類別分割方法等內容。
使用雲端系統以迅速啟動服務,已經變成常態。
根據不同情況,可能需要具備雲端系統相關的知識。試著瞭解有哪些可利用的服務,並實際動手使用看看吧。
由於能夠以小時為單位租借,投資知識的費用只需要數百日幣,能以相當低的成本取得新知識。
如果連這筆金額都無法投資,那對工程師自身的成長又能投注多少熱情呢?
不論哪種雲端服務, AWS、GCP 或 Azure 都可以。
如果可以,除了基本的 EC2 等伺服器實例,也可以試著使用特定功能的雲端服務。
以 AWS 為例,還有像是 CodeBuild 和 CodeDeploy 等的 CI 環境,以及 CloudFormation 等服務。並且提供了多個儲存選項。為什麼提供多個選項呢?在什麼情況下,使用這些服務能夠提升開發速度?為了成為能夠提供建議的工程師,瞭解這些知識是有必要的。
如果能夠深入瞭解,這將成為一種優勢。
在這個時代,使用雲端服務已成為常態,並且將會是工程師必備的基本知識。
在 GoF 等設計模式中,定義每個類別的角色,如果想實作成一個應用程式,將會在程式中產生大規模的數據流動。
過去主要關注應用程式中的封裝結構,但最近開始思考伺服器以外的架構。架構是程式碼的基礎,如果基礎穩固,即使是尚未成熟的工程師,也能夠編寫易於維護的程式碼。
在建立應用程式系統的過程中,為了擁有更廣的視野,開始學習架構模式吧。
在公司開發,通常需要多人合作進行。
若希望能最大化開發團隊的產出,和提高個人開發能力相比,更重要的應該是改善團隊流程。雖然不是必備知識,但學習敏捷開發以及思考如何應用,將有助於提高團隊和自身的表現。
面對每天增加數十億件數據的系統,至今為止的傳統架構可能已無法應對這種情況。雖然這取決於業務需求,但瞭解大數據處理,將能夠帶來一些優勢。
多數情況下,使用 BigQuery 或 RedShift 等工具可能就已足夠,但對於 Web 應用程式伺服器來說,必須注意延遲的問題。解決延遲並實現可擴展的架構,將使系統更為突出。
此外,瞭解專門用於大規模處理的環境,如 Hadoop、HIVE、ECS、Spark 等框架,也將有所幫助。
儘管也能自行操作來驗證,但要進行大規模數據實驗仍有一定難度。因此,透過學習來改變環境,尋找能夠提供這些設備的公司,或許是提高自身工程師水平的一條近路。
在雲端服務中,提供能夠輕鬆使用機器學習數據的服務。
此外,還有可執行機器學習的基礎設施,這些也能夠自行建立。
視情況也會使用到 GPU 處理或 FPGA 等技術。
雖然統計和機器學習,可能不同於工程師具備的技能,但我認為這是目前流行的技術組合之一。
順帶一提,我自己本身不太會這些(>_<)。
利用區塊鏈技術的虛擬貨幣,如 Bitcoin(比特幣)、Fintech(金融科技)等,以及個人化廣告技術、EC 電子商務和各種媒體的推薦引擎、搜索引擎等。
技術水平 + 商業應用,對於工程師來說,是一個充滿挑戰的環境。這有助於提升工程師的技術水平,瞭解哪些環境能夠最大化個人技術價值,對於自身成長是有必要的。
由於技術不斷在進化,光是提升基礎知識,可能還是會有不足的部分。
為了成為更強大的工程師,我們需要擴展技術的視野,以下提供一些追蹤資訊的方法。
研討會可能不會深入探討技術細節,通常會提供一些使用案例。
透過這個場合,能夠建立對未知領域的基本概念,有機會瞭解之前不曾聽過的知識內容。
若想要更深入瞭解,就必須自己動手操作,但參加研討會對於獲得新知識和技能來說,也是一個不錯的機會。
此外,有些研討會可能設有交流會,可以和平時不會接觸到的工程師進行交流,甚至找到轉職的機會。人脈關係是非常重要的。
一些知名人士經常會在 Twitter 上發布訊息,這些訊息通常會談論到最新技術。
因此透過關注這些 Twitter 帳戶,即可掌握最新的技術動態。每個領域都有一些知名的人,可以一點一點累積,慢慢擴大關注人數。
最新資訊通常會記錄在官方網站上。包括 AWS 的新服務、GCP 的新服務、其他框架的開發進展、ISSUE、Pull Request 的處理情況、未來的願景等等。
也許不會馬上導入這些最新服務,不確定什麼時候會需要使用,但定期查看官方文件將有助於累積知識。
此外,Google、AWS、Microsoft 等公司網站上,還提供雲架構的相關解釋,構成管理的概念說明,以及開發流程和管理方面的資訊。不僅提供有關雲服務的知識,還提供提高基本知識的文章,因此有空時也可以翻閱看看。
這部分與閱讀開源程式碼有關,但 GitHub 有個頁面能夠查看趨勢。
不一定是閱讀開源程式碼,也能透過查看星數多的專案,閱讀 README 等內容,瞭解有哪些產品正在被開發,以及掌握目前的趨勢,這將有助於提高對技術的構想與感知能力。
頻率不用很高,偶爾查看或許就會有有趣的發現。
最近的趨勢頁面,經常會出現受到大眾歡迎的文章內容,這導致探討核心且有趣的文章不容易排行在上位,但可以透過追蹤自己喜歡的作者,即可在時間軸頁面查看更新的文章。
我自己也有在 Qiita 上寫文章,建議可以試試看w
我一直希望能夠為有幹勁的工程師,創造一個有利於成長的環境。
建立一個能讓有幹勁和實力的工程師,充分發揮其價值的系統。
如果有任何問題、評論或需要提供方向,歡迎隨時留言,我會進行答覆。
希望提供這些想法給願意實際執行,而非只停留在空想的人,讓他們在學習上有個方向。
此外,如果有其他方法或想法,請在評論或引用等方式分享!