數據領域 Side Project 實戰攻略,增加你的求職優勢

本文作者 Milana 大學就讀斯拉夫語系,後來成功轉職踏入資料領域至今三年多,曾任資料分析師、資料工程師,亦有在業界擔任面試官的經驗。

本篇文章以 Milana 個人經歷及職場見聞出發,提供給尚未做過或即將開始製作 side project 的讀者全局觀,分享製作 side project 四步驟——專案發想、資源評估、開始實作、作品呈現的技巧與提醒。文章後半部則根據此四步驟,分享 Milana 在初入資料領域時,製作 side project 以協助 NGO 營運,並將此作為求職作品集的經驗為範例,供讀者對照參考。

根據職缺客製化 Side Project,增加求職競爭力

製作 side project(業餘專案)的動機多元,每個人都可能因為各種原因而有意無意地開啟一個專案。有些人可能是為了學習新的技能或深化現有技能,有些人可能是對特定領域或主題感到興趣而想要去實踐心中的想法。還有一群人,是以求職為目標,讓 Side Project 成為找工作的助力。

對於缺乏實務經驗的求職者來說,side project 能夠顯著提升求職競爭力,因為這不僅展現了求職者實際應用技能的能力,同時也在履歷中呈現了主動學習的態度,使自己在求職過程中脫穎而出。

針對求職的情境,side project 所呈現目的性是相當重要的。面對百百種的職缺,要如何讓面試官覺得這份 side project 是為這份職缺量身打造的,則需要先分析職缺、確立專案要解決的問題或是要展現的技術,再考慮資料取得的途徑,最後思考專案的呈現方式。

透過這樣的整體思考,你能夠為你的 side project 提供更有深度的內容,同時也有助於提升在求職過程中的競爭力。

免費點我下載數據技能路線指南

以找數據工作為目標製作 Side Project,從發想到實作的過程

若你的目標是找到數據工程相關的工作,並製作一個可以放在履歷上面的 side project,我認為可以將製作 side project 的過程分為四個階段:專案發想、資源評估、開始實作、成品呈現。

接下來,我會先分別介紹這四個階段的內容及身為過來人的建議,再根據我以數據工程求職為導向,製作 side project 的經驗,分享這四個步驟具體的實踐過程。

專案發想

  • 建議從數據工程師的職位描述中找到企業看重的技能,並思考如何透過專案展示這些技能。
  • 靈感可以來自於生活中、工作中或他人遇到的問題,並解構這些問題,提出相應的解決方案。
  • 列出專案所需的資源類型,例如:伺服器、資料源、使用的程式語言、儀表板的選用、資料的儲存…等等。

很多人都將專案發想視為是一個由開發者自我發想的階段,但其實發想的人不一定要是開發者,也可以是需求者。就如同做產品開發一樣,一個產品的促成,除了供給也要有需求才有開發的必要。所以這邊建議各位也可以試圖從需求面去發想 side project,找到需求者,根據其需求作為 side project 的製作依據。那麼,做出來的 side project 將更有產品規劃的思維及說服力。

資源評估

  • 資料來源儘可能使用免費的開源資料與資源,包括公家機關的資源(如政府資料開放平臺)、開源數據平台(如 KaggleWorld Bank)或他人授權給你的資源。
  • 找尋可用資源後,我們需要評估製作專案所需的時間、困難度、資源分配、成本,製作專案的架構圖,並且將資訊同步給需求方(如果有的話)。

    • 專案時程的評估:可將專案拆解成好幾個研究項目,依據數量多寡和自身每天可用的時間為基準,再回推回整個專案所需的時間。
    • 資源分配考量:資源效能如何、需不需要花費、資源收費機制是什麼、需求端是否可接受…等。
    • 可製作視覺化的專案架構圖:將專案或產品資料流畫出來,畫出每個資料節點需要運用到的資源,除了讓自己清楚專案需要哪些資源,也讓後續在實作時不會迷失掉做的方向。

開始實作

  • 建議在實作過程中可以記錄自己遇到的瓶頸,以及在遇到難題時使用的替代方案。
  • 若有需求方,可以主動階段性的跟需求方反覆確認需求,避免最終呈現的結果與需求端的期望不符。例如:可以與對方定期約會議做簡單的進度同步,抑或是約好階段性的驗收等等。

成品呈現

  • 如果 source code 沒有機敏資訊,可以分享在你的 GitHub 上。
  • 製作一份簡報,內容包括問題發想、實作過程以及結果呈現。
  • 若是互動式的作品,還可以提供成品連結。這樣的 side project 展現過程不僅能夠強化你的技能,同時也為潛在的雇主提供了清晰而具體的展示。

數據工程 Side Project 的實戰流程分享

以下將分享本人製作數據工程相關 side project 的經驗,供各位參考。

專案發想

確認數據工程的 JD(Job Description)提到的技術要求

首先,當初我做 side project 的動機是來自於想要從數據分析師轉職成數據工程師。所以當時的我基於這點,便以企業開的 JD 作為 side project 的發想依據。

就數據工程師這個職位來說,JD 通常會包含多種技術要求,這些要求可能因公司和具體職位而有所不同。這些資訊除了各大人力資源媒合平台有提供以外,自己也可以針對感興趣的公司或職缺先調查一番。以下是我從人力網站上搜集的一些常見於數據工程 JD 中提到的技術:

  1. 資料庫管理系統:

    • SQL(Structured Query Language):能夠熟練使用 SQL 語言進行資料查詢和管理。
    • NoSQL:對非關聯式資料庫(如MongoDB、Cassandra)的經驗。

  2. 資料處理和轉換:

    • ETL(Extract, Transform, Load)工具:例如 Apache NiFi、Talend、Apache Airflow。
    • 資料轉換工具:如 Apache Spark。

  3. 資料倉儲:

    • 熟悉資料倉儲的概念和實作,可能包括 Snowflake、BigQuery、Redshift 等。

  4. 程式語言:

    • Python、Java 或其他相關語言,視公司的技術堆疊而定。

  5. 雲端技術:

    • AWS、Azure、Google Cloud Platform(GCP)等雲端平台的使用經驗。

  6. 版本控制:

    • Git:能夠使用 Git 進行代碼版本控制。

  7. 資料安全性和隱私:

    • 懂得保護敏感資料,了解資料安全和隱私的最佳實踐。

  8. 即時資料處理:

    • Kafka、Flink 等即時資料處理框架的使用。

  9. 監控和維護:

    • 熟悉系統監控工具和技術,例如 Prometheus、Grafana。

找需求方合作,從需求面出發製作 side project

其實了解數據工程的 JD 有哪些技術要求後,便可以開始做 side project 了。

但是這樣做很容易忽略一點就是,我們會因為太著重於 JD 中描述的技術力的展現,而忽略了這個 side project 是用來解決問題的本質。導致做完之後,我們說不出專案為何而做或是專案的價值在哪。

在面試的當下,這一方面會顯得自己的專案很像套公版,另一方面如果面試官不是技術背景人員的時候(例如不是 RD 部門的主管),更是會聽不懂這個專案的價值在哪。

所以,我認為製作 side project 時,除了要考量技術展現以外,還有就是要清楚地知道:

  1. 為何而做
  2. 可以應用在哪些場域
  3. 價值是什麼

當時我便開始思索要如何開始我的 side project,要找什麼樣的題材才可以既滿足 JD 上的需求,又能夠貼近需求端,並且具有完整的故事性呢?

於是,為了達到上述目的,我便找上 NGO 尋求合作的可能,以他們的需求作為專案內容。

透過上方的網站,我用爬蟲爬取台灣所有 NGO 組織的名錄及信箱,再針對規模較小的 NGO 發送邀請信(之所以選擇規模小的 NGO 主要的考量是大型 NGO 已有數據團隊),並在信中表明來意,以及可提供的數據工程協助,洽談合作專案。

小提醒:如果溝通對象並非技術背景人員,必須試著將自己會的技術轉換成非技術人員聽得懂的說法,而非直接將技術單詞丟給別人理解。這同時也是一個很好的練習,你可以想想:當在職場上遇到跟自己先備知識不同的人時,如何能有效溝通?

資源評估

邀請寄出後,很幸運的我拿到了大約 10 個可能的合作機會,依據資料、架構可行性以及專案目的性,最終我選擇了 3 個專案進行實作。

以下將針對其中一個專案《LINE Chatbot 語音影像資料收集》,分享專案評估的過程

在做專案評估時,我們需要去釐清需求面,包含想要達到怎樣的目的、呈現、原因,再來依據需求評估資源的可行性及配置。所以就此專案在前期評估時,大致可分成兩個層面:

需求方:了解其背景及需求

  • 組織業務:協助流浪動物領養、收容所犬隻行為矯正、開發送養管道
  • 需求:製作 LINE 聊天機器人,透過與使用者互動的過程,收集貓狗聲音資訊,以協助後續聲音分析之用
  • 未來展望:希望收集一定資料後能做貓狗聲音情緒辨識,幫助加速犬隻行為矯正過程及領養追蹤

開發方:技術及執行

一、技術涵蓋

  • 資料庫管理:SQL
  • 程式語言:Python
  • 雲端技術:Heroku
  • 資料 API 串接:LINE API, Google Drive API, Flask
  • 版本控制:Git

二、執行

  • 產品架構圖:包含資料該如何傳送、傳送的場景該如何設計、整體 user journey 的規劃

▲ 產品架構圖範例(製圖:Milana)

  • 資源配置:依據畫出來的產品架構圖,開始想想該使用哪些資源達成上述規劃:

    • 架設 App:需要有伺服器進行架設。伺服器選擇使用 Heroku,原因是當時的用量在方案內免費。App 開發的程式選擇用 Python 寫。(編按:Heroku 已於 2022 年停止提供免費方案,讀者可參考其他如 Vercel、Netlify 等服務的免費方案。)
    • 驗證綁定流程:用戶進入產品的流程後,需要檢驗是否填寫過綁定表單。使用 Heroku 上的 Postgres DB 暫存用戶即時回傳的表單內容,用以即時判斷用戶是否已綁定。
    • 對不同身份的 user 、用戶傳訊的內容,需給予不同回應:使用 Python、Flask 進行 LINE API 資料導入及串接
    • 能及時將 user 傳的檔案上傳至 google drive 上:需要串接 google drive 的 API
    • 需要將 user 回應的訊息及錯誤 log 批次上傳到 google drive 上:使用 Heroku Scheduler 對上傳到 google drive 的工作進行排程
    • 需要做 code management,以便後續由組織內部人員維運:使用 Git 做原始碼版本控管

專案達到目的是基本,更細緻的專案會兼顧方案和工具的考量。 要達到目的的做法有非常多種,但是隨著需求不同、工具的特點不同,在選擇上也會直接地影響整體專案執行上的效率高低。此時還是需要釐清這之中的取捨,去評估哪一個服務是最適合的,說出來的成果才會更具說服力。

開始實作

一、使用 Heroku 提供的免費伺服器以及 LINE Developer 提供的 LINE Messaging API 架設 LINE 聊天機器人。如:Cloud Application Platform | HerokuMessaging API

二、在 Heroku 上建置 SQL 資料庫作為資料接收的地方:Heroku Postgres | Heroku Dev Center

三:使用 Python 在 LINE 聊天機器人中建置圖文與互動式按鈕

▲ 專案中的 LINE Chatbot(製圖:Milana)

四、使用 Flask 接收用戶在 LINE 機器人上的影音與互動行為,資料分別回傳至雲端 與 SQL 資料庫:Welcome to Flask — Flask Documentation (3.0.x)

五、將 SQL 資料庫內的資料透過 Heroku 排程器定期上傳至雲端,建置 log 檔與每份影音 的相關詳細資訊:Heroku Scheduler | Heroku Dev Center

▲ 專案程式碼範例(製圖:Milana)

六、使用 Git 進行開發版本控管:GitHub: Let’s build from here

成品呈現

在本專案中,我最終選擇使用簡報與影片這兩種說明方式呈現出來。如果 source code 並不會帶到組織的機敏資料,建議也可以一同附上 GitHub。

連結是本專案的去識別化簡報分享。

在呈現數據作品的同時,更重要的是從中獲得深刻的洞察,而這可能引發對未來改進的思考,進而賦予這個 side project 額外的附加價值。例如以數據工程師來說,可能會是:怎麼去改善現有的資料流程提供更穩定的資料服務、如何改進資料品質支援更複雜的分析項目。

思考 Side Project 的價值:重在質,而不在多

在我當面試官的經驗中,發現大多新鮮人都會有一種迷思,認為作品集只要多、技術力夠高超就足夠了。但當一問到,這樣的技術該如何應用在公司、能夠創造什麼價值時,大多面試者都支支吾吾答不出來。

儘管創造自己的 side project 可以成為面試亮點,但若缺乏對整體概念的把握,反而難以突顯個人特色及專業性。

因此,想做 side project 為自己的履歷加分的人,不妨先問問自己以下幾個問題:為什麼而做?想要解決什麼問題?價值是什麼?

先讓自己有個明確的目標,分析需求、問題,再來針對需求想出解決方案,為每份 side project 創造獨一無二的價值。