資料工程師的修行 — 從自學到持續精進

YL-Tsai
twdsmeetup
Published in
16 min readOct 6, 2023

--

Enzo | Sr. Data Engineer @ 17LIVE.Inc

活動主辦單位:Taiwan Data Science Meetup 台灣資料科學社群

摘要

本次講座邀請了在 17LIVE 擔任 Senior Data Engineer 的 Enzo 來分享他的資料科學/資料工程自學歷程、求職與面試經驗;以及如何從一位商管與教育背景出身,透過自學進入資料科學的世界,成為一名資料工程師後,如何規劃自己的技能樹、如何在工作中持續學習、如何自己創造學習環境,如何讓學習更有效。

  • Part 1 — 講者的跨領域自學歷程
  • Part 2 — 求職與面試前準備方針
  • Part 3 — 工作後的自學
  • Part 4 — 講者的資料工程師路線圖
  • Part 5 — 怎麼讓學習更加有效

講者介紹

Enzo 目前在 17LIVE 擔任 Senior Data Engineer,是一位非典型工程師,商管與教育背景出身,透過自學進入資料科學的遊戲世界,選擇“資料工程師”開始他的修行之旅。 他是個熱愛學習和樂於分享的人,經常出沒在社群與研討會,曾在 PyCon APAC 2022、PyData Taipei 2020 擔任講者。最近開始經營 Instagram(@enzo.data.career),致力於整理 #數據工程#資料科學 的知識乾貨,同時會分享 數據人的 #職涯發展#成長思維

Part 1 — 講者的職涯旅程

講者背景 — 講者投影片 [1]

以我自己的背景為例,其實我自己高中時不愛唸書然後大學就只申請上了一間私立科大,當時也不太清楚自己未來要做什麼,畢業後進了小型接案公司,領著低薪做 Web/App 的開發,兩年半後發覺自己渴望有更多時間學習,果斷結束正職,申請研究所回歸學生生活!

然而當時並沒有選擇資工/資管所,主要是考量那個狀態下的考研補習與時間成本較高,原本的工作環境,憑藉過去軟體開發基礎跟一股對教育的熱忱,申請到了「教育科技」研究所就去念了!

這個階段的自己,去外面參加社群,接觸到好多優秀的同儕,內心其實相當沒有自信。

講者的數據職涯 — 講者投影片 [2]

我的背景故事講在前面,是希望可以給大家一些信心,像我這樣的出身,一路透過自學,最後也能翻轉進入資料圈,成為一名資料工程師,以下就會詳細分享中間自學的心路歷程以及工作後的持續成長心法。

講者的數據職涯與里程碑— 講者投影片 [3]

時間回朔到研究所開學前半年,當時的時空背景「人工智慧」越來越受到關注,整個大環境都吹起「資料科學家是最性感的職業」的一股風氣,而我也開始在下班和假日的時間自學,透過大量的網路資源釐清背景知識,然後藉由大量實作、練習來加深印象,相信很多人都是透過 Python -> 數據分析 -> 機器學習 -> 深度學習 ,這條路開始慢慢進階。

正式回到學校後,由於系上並沒有開太多數據相關的課程,我就有跨資工系去修 data mining 以及一些偏向數學 & 機器學習理論的課程;並且保持自學,想辦法在課堂的作業、報告中應用,結合所學技能,包裝成小專案,讓自己累積更多相關經驗。

碩一下學期,我注意到國泰人壽 CAP 的實習機會,很想要報名參加,但以自己的學經歷來說,其實相對沒那麼有優勢,所以那時候就不會特別想要去跟別人競爭熱門職缺,去擠那些比較硬的那種研發/技術單位。我的策略是去申請一個比較需要跨領域技能的業務部門(人力資源部),要懂技術也要懂數據分析,還能夠與團隊協作溝通 ,最後我就順利拿到第一份的實習機會。

接下來過程中也去參加了一個大數據競賽,那是跟社群的一些朋友決定組隊參加的,那時候是參加中華郵政主辦大數據分析及應用的比賽。

當時印象深刻的是,原來上億筆的資料下載下來,要從你的電腦把它打開是一件多困難的事情,剛好我們組內有夥伴已經在業界做資料工程的經驗,那時候才認知到原來不只是做分析、做模型,還有資料工程師這個重要的角色。

第一份實習結束前,我看到他們又有招募第二屆的實習生,我就直接跟部門主管爭取,提出想要繼續實習的機會,很幸運地,這次就真的進到半年前很難進入的數據部門,開始接觸更多技術的專研。

回顧這一路上的結果,其實都是自己有策略地在佈局和準備,我大致歸納出的心法是:

  • 釐清知道自己想要什麼、需要什麼,製造機會想辦法主動去爭取。
  • 不斷累積 side project / 競賽 / 實習經驗,讓自己的履歷 / 作品集增添光彩。
講者的職涯精進我略— 講者投影片 [4]

我本身也是一個愛參加社群的人,以參加社群來說,有不少好處如下:

  • 更好的學習體驗 — 雖然官方文件或網路文章已經有非常多學習資源,但是讀書會或是工作坊會讓你和人有更多的交流而不是單方面的閱讀,有更好的學習體驗。
  • 獲得連結 — 承上,和人交流時,就可以認識其他同樣在資料圈的夥伴,並理解他們工作現場的狀況和挑戰是什麼,而不單單是從網站上的工作描述,可以知道最一線、最真實的工作狀況,也能為後來的求職埋下希望的種子。
  • 廣泛的認識市場 — 在社群中容易認識不同職務的人,或者同職務不同產業的工作經驗,這對於職涯探索上有很大的幫助,一來能夠確認目標職位真實工作的樣貌,二來也能夠探索其他職位或產業是否才是自己真正所想要的。

Part 2 — 求職與面試前準備方針

講者的求職準備方針— 講者投影片 [5]

參加相關競賽

市面上會有相當多的資料科學相關競賽,如果你關注的是商業面向,那麼就必須專注在

  • 企劃的合理性
  • 從數據中挖掘出 insight

另一方面,如果關注的是系統面向,那麼就必須專注在

  • 對你整個系統的架構有規劃,提出各個方案和優缺
  • 畫出流程圖
  • 甚至可以做出可以動的 prototype

把學習記錄寫成部落格、 Github 筆記

只要有相關的學習,盡可能把其寫成部落格或筆記,我看過的例子則是機器學習馬拉松,每天都有一個 notebook,需要持續 100 天,如果每個都有練習完整走過一遍,那就會有相對紮實的實力,而相關的文章 / Github 在求職的時候都能夠成為一個有代表性的證明,能夠更說服面試官究竟是怎麼自學的。

開始實習 / 正職

職場還是相對現實的,人資/用人主管還是希望有招募到有工作經驗的人選,所以如果能夠先拿到敲門磚,之後再切入自己想要的目標職務,也是很好的方式,畢竟職場是多人同時競爭的。以我的例子來說,選擇實習的時候,我知道一開始沒有辦法跟別人可以有這麼好的競爭力,那我先從一個人資部門的實習缺,但是他可以讓我去做技術,或者是資料科學的應用,那我覺得先有這個敲門磚之後,我後來轉到數據部門實習,就變得合情合理,而不會一開始就被刷掉。

客製化專案

我不會一開始就狂灑一大堆公司,然後寄一樣的履歷。說我會自己先篩選過我想要我特別感興趣的公司,不論是對產品/產業/工作內容,我會研究的更深入然後想辦法先拿到面試機會。

拿到面試機會後,透過自己深入對目標公司做的功課,提出一個專案,並把它做成一個可以動的 prototype,這樣準備可以來展現,積極的態度、有辦法段時間 pick up 對應的技能,同時也能掌握面試的節奏。

Part 3 — 工作後的自學

不同階段的自學 — 講者投影片 [6]
知識焦慮的實際解方 — 講者投影片 [7]

工作後的自學,會更加廣泛,也會更加困難,學生時代的課程是被定義好的,而工作之後不會有人和你說該學什麼,現代社會更是有常見的知識焦慮,我提出兩個聚焦方式:

解決問題

現在大家有全職工作的時候,可以主動關心自己的專業領域有什麼樣的新技術/工具可以解決目前團隊遇到的問題,或者優化現有的制度流程,這可以提升自己的能力,並且也和工作高度綁定,同時也能提升自己的競爭力。

提升競爭力

探索自己專業領域的就業市場,領頭羊企業用的技術是什麼、領先的技術是什麼、廣泛被討論的技術是什麼,可能是現有的技術,效能有所提升,或者是全新的觀點以及工具,那麼如何收集就業市場上的趨勢呢?

可以從需求調查開始,例如我要走的是資料工程領域,那麼對於自己有興趣的公司的資料工程師職位,可以先收集 5 ~ 10 個工作描述 (JD — Job Descriptions),細細的分析哪些是大家都有提到的必備項目,哪些是補充項目, JD 會充滿關鍵字,這些關鍵字能夠提升該學什麼來提升自己競爭力的線索,也能開拓新的機會。

這樣做的好處是能夠廣泛(全局)地的了解自己的職位在市場上普遍來說需要什麼技能,更不容易因為自己在單一的公司就職而被限縮眼界。

知識焦慮的實際解方 II — 講者投影片 [8]

而 JD 也能體現出該職位的核心技能,以及該公司可能需要的一些特別技能,各個 JD 的交集技能就表示市場上對於該職位來說,必備的技能,是必須優先滿足的,如果自己這方面處於劣勢,也必須補足,而每一份 JD 可能會有一些與核心技能的差異,可能就代表著是該公司特別需求的,就可以再做考量是不是自己想要精進的方向。

在工作中持續學習 — 講者投影片 [9]

再來從資源的方面進行思考,因為時間和精力是有限的,如果你無法花下班或者是週末的時間學習,那最理想的方式就是,把想要精進的技能/工具在工作(上班)時累積,那會是最有效率的。

以下也說明如何透過以上三個行動,來協助自己在工作中也能進行自學:

  1. 主動爭取、自願投入 — 對於想要學習的技術,先釐清在何時會使用到,解決的痛點為何,如果團隊 / 同事有遇到相應的痛點,就會是導入的時機,這會需要依靠先前的市場調查以及對於技術背後解決的問題進行了解,當機會出現就主動爭取。
  2. 與主管 / 團隊目標對齊 — 主動跟你的主管提說我我發現一個技術其實可以對我們現在團隊有什麼幫助解決什麼問題並且自主研究,和主管 (團隊) 商討規劃成這一季的主要目標 / OKR,但要切記,這必須跟團隊或者是你的主管的目標來做對齊,而不是只考慮自己想要使用這個技術、單方面的研究興趣。
  3. 準備成本 / 效益提案 — 提 proposal 時,也要評估這個東西要花多少時間研究,對於我們如果整個架構要換掉會有什麼成本,如此一來結合效益、成本的提案,會讓你的主管更能夠接受你在工作中去投入執行。

Part 4 — 講者的資料工程師路線圖

資料工程好比水利工程 — 講者投影片 [10]

首先要說明資料工程是什麼,其實可以透過水利工程來類比,水利工程會涉及水的管理、控制、利用、有效地收集水源,儲存,過濾,輸送,供應源源不絕的水資源給每個人使用。

而類比到資料工程則是,涉及資料的管理,控制和利用的工程技術,透過有效地收集資料,儲存,過濾,輸送,供應源源不絕的資料流給企業內部及外部使用者,發揮出資料的價值,例如支持決策和業務 / 建構 AI 系統 ,或其他需要資料價值的應用場景。

資料工程師的職責 — 講者投影片 [11]

再來是資料工程師的職責,資料工程師需要為組織提供可信、正確、完整、穩定、且容易使用的資料和資料服務,並支持組織的數據需求,促進業務、決策、產品順利執行。

網路上也能夠找到許多的說明,而大致上資料流可以被切分成幾個階段,分別是資料來源、資料儲存、資料處理以及資料輸出,整體而言則需要資料架構的支持,這也是資料工程師所負責設計和實作。

講者的資料工程師技能路線圖 — 講者投影片 [12]
講者的資料工程師技能&工具路線圖 — 講者投影片 [13]

縱向維度先拆分成 General / Specific

因為很多的工具或技能,背後都有一個對應的問題,所以我建議,要先去瞭解這個技能是為了解決什麼問題,再去找適合的工具。

例如說,我們知道要做工作流程管理,必須解決不同 ETL task 之間執行順序和相依性,為了滿足這些需求,那麼就很容易查詢到當前最熱門的工具是 Airflow

橫向維度的話則是拆分成 Beginning / Basic / Advanced

舉例來說,如果需要了解大規模容器管理的技術 (例如 k8s) , 那麼對於容器是什麼就必須有一些基本的理解,因為其知識可能具有加成性,照著順序來學習和理解,會有比較穩固的基礎。

Beginning

還是要從最基本的正式語言開始,那我覺得 SQL 其實反而比 python 來得更多公司會考,SQL 不管是分析資料還是 ETL/ELT,都是相當通用的技能。

Git 可以幫助你在準備你的專案或者是作品的時候來得更有 Engineer 的樣子而不是給一個壓縮檔案或雲端連結,同時也可能學習軟體工程師的協作技術。

基礎的資料概論跟網路概論,還是要了解,會幫助你後續的這個學習更加的順利,這對於資料傳輸,以及容器化的技術,甚至大規模的容器化管理,都能夠發揮到作用,因為這些技術都涉及網路傳輸。

Basic

批次資料管線

身為資料工程師通常會從建立資料管線流 (data pipeline) 開始,第一次的搭建通常一天進行一次 update 就好, 根據這個條件,能不能把資料從資料源到最後的輸出 ( 例如給儀表板使用或者 ML Application 使用的資料 ),整條 pipeline 一天更新一次,並且提供穩定、容易使用的資料會是一個 getting start 。

資料庫 / 資料倉儲

接下來,怎麼儲存這些資料?

你可能會使用到資料倉儲 / 一般的database ,那麼就要去了解不同資料庫/資料儲存服務的特性及優缺點。

工作流管理

管理任務上下游關係或可以平行執行,且在你設定的時間點執行,自動化不斷的更新資料,像是 Airflow 或其他等價的技術。

虛擬環境 / 容器化

現在比較不流行透過下載一包安裝檔,然後在你電腦使用者下進行安裝,因為大家的電腦環境可能不同,很容易遇到各種安裝錯誤,比較流行的是你透過一個 Docker image 你就直接把服務建起來,那你就會相對的遇到比較少的問題。

這在幫助你在研究一些新工具的時候快速搭建,而不是在前面 configuration 就花很多時間。

Advanced

串流資料管線

在資料即時性的要求更高之後,你就會開始接觸到 streaming data pipeline 需求,以即時呈現業務指標或提供 ML application 推薦名單

效能與成本優化

隨著服務的儀表板,或者下游使用的資料越來越多,會逐步累積一些需要被優化的 Task,而這些 Task 的執行時間通常直接跟花費正相關,就需要做優化和調整,以降低成本。

大規模 DAG / 容器化管理

隨著服務的儀表板,或者下游使用的資料越來越多,工作流可能也會變得更複雜,可能有上百個 DAG 要跑,你要怎麼管理這些大規模的 DAG ?

容器的話也一樣,有非常多的 container 然後要讓他自動擴展的話,該使用什麼樣的 solution 以及對應的 best practice ?

如何運用關鍵字 — 講者投影片 [14]
現代數據架構— 講者投影片 [15]

善用一些關鍵字進行搜尋,例如 data engineering mop road map / modern data infrastructure 都可以幫助我們搜尋到很正確的一些資源,那如果你覺得你不確定,會建議在加上年份 (e.g. 2023),就會找到整理的很棒,又很近期發表的文章。

這些文章通常會探討這個領域技術的發展,不過你會發現並不是每一項都真的需要,或者是一天到晚為了新技術而導入;但你還是不能不認識這些,而應該要去探討,為什麼推出這樣的技術、為什麼變得熱門、是不是能改善現有的一些架構或者是效能瓶頸,這都是我們必須要了並跟上時代的。

Part 5 — 怎麼讓學習更加有效

記憶留存比例的學習金字塔 — 講者投影片 [16]

上圖的是記憶留存率的金字塔,只透過上課、閱讀、影音的方式,學習效率其實有限;若你能藉由實作、輸出跟分享,會是對學習效率更有幫助的一些方法,以我自己為例子,我近期開始經營 IG 來整理一些我覺得不錯的資訊,用淺顯易懂的方式整理分享給大家,另外像今天的演講,我也來盤點了我過去的經驗做輸出,在進行這些分享的同時,其實也是在幫助自己成長。

外部驅動力 — 講者投影片 [17]

你還可以透過外部驅動力來幫助自己成長

  1. 組團 — 你可以組團跟別人約定,因為有承諾,所以會形成一定的社交壓力逼自己前進,像是讀書會或者是找學伴,定期跟他們聚會分享,逼迫自己也要有所進度
  2. 公諸於世、答應別人 — 把你的行為或者是你的目標工作跟你的好朋友說 / 在社群說,讓大家知道我就是要做,會有文章、會有演講,大家一定要來看、來聽,就是對外講出去,讓大家給自己有壓力,那你就會更認真的準備。
  3. 找 Mentor / 教練 — 找相對比你有經驗的人做的教練來幫你指引正確的方向,避免自己誤入雷區,減少試錯時間
  4. 獎勵機制 — 給自己一些獎勵機制,讓自己可以做得更開心。
行動呼籲— 講者投影片 [18]

如果你現在還是學生,你通常有更多的時間做準備;那如果你不是的話,你是有正職工作的上班族,想要轉職成工程師的話,準備的方向就會不一樣,但不管怎樣你都要有策略的做規劃,才能在競爭激烈的求職市場脫穎而出。

另一方面則是對於已經進入這個領域的人,你就要開始盤點自己的這個職能的路線圖,然後知道自己有什麼技能要補強,然後盡量想辦法把它放在你的工作中來做正當的學習,這樣就可以不用這麼辛苦;找出自己學習更有效率的節奏與方式,可以嘗試練習輸出然後多練習分享。

工商時間 — 講者投影片 [19]

最後,如果你對以上內容有任何問題,或是有哪部分想要進一步討論的話,歡迎追蹤我的 IG 帳號:enzo.data.career,來與我互動,那以上就是今天的分享內容,謝謝大家。

筆手 : Joe Tsai

校稿:Enzo, Andy
👉 歡迎加入台灣資料科學社群,有豐富的新知分享以及最新活動資訊喔!
https://www.facebook.com/groups/datasciencemeetup

--

--

YL-Tsai
twdsmeetup

Machine Learning Engineer with 4y+ experience | Exploring the data world | Recommendation, Search, Ad System.