關於我參加軟體工程師的專題班的那些事
前言
這故事要提到我的職涯計畫,以前是在金融業做 Data Scientist 和 RPA (Robotic Process Automation),那時候也有開發一些全端的網站應用。而當我接觸網站開發的那一刻起,我心中就對這塊充滿好奇心。
當時,我提出以儀表板方式呈現各部門使用 RPA 的情況,並簡單地進行了一個概念驗證(POC)。當主管看到這個儀表板時,對此印象深刻,甚至還請旁邊的其他同事來評估我所開發的網站。那時候,我內心充滿了成就感,也因此對轉向網站開發產生了興趣。
我平常使用的語言是 Python,開發的框架大多是 Flask、FastAPI 並搭配 Postgres。為了加深自己對於網站開發的技能,也對於現行軟體課程評估了一番,最後決定參加六角學院的軟體工程師企業專題班。
關於課程
課程主要使用 Node.js 搭配 Mongo DB 開發,這兩個也是我沒有接觸過的技術,下定決心要好好新技術,提升自己的職涯競爭力。
這個課程主要是完成專題為導向,大致上可以列出四點:
- 約三個月完成網站開發專案
- 從零開始規劃網站線稿圖
- 短時間內學習新技術
- 與其他工程師遠端協作
我想額外提到,每週五會有線上直播課程,每週一與專題教練對齊開發進度。由於課程的技術也會應用到專題上,因此也會更有動力在每週五晚上去聽老師的課程。而週末就會進行衝刺開發,也是為了在禮拜一可以跟教練同步我們做的進度。
專案簡介
我們的專案名稱是「超人幫手」,座右銘是「讓您在生活中擁有超人的力量」。我們希望提供一個平台,讓使用者可以輕鬆地找到需要幫助的任務。同時,我們也希望讓使用者感受到自己像超人一樣有能力去幫助別人解決問題,實現自我價值的提升。
Live Demo :https://superhandy-frontend.zeabur.app/
GitHub Backend:https://github.com/erik1110/SuperHandy-backend
GitHub Frontend:https://github.com/erik1110/SuperHandy-frontend
綜上所述,這是一個任務媒合系統,提供需求者「案主」與提供者「幫手」進行媒合。而我們開發的時候有四大功能:
- 地圖搜尋任務
- 技能評價
- 聊天室
- 會員點數加值
關於小組
我們組有五位工程師,後端包含我有兩位,前端有三位,我覺得我們組的開發效率、遠端協作與雙向溝通都很不錯。
平時我們在禮拜三、日的晚上會有小組大會議,這是大家一起參與,而這時候聚焦在整個專案的里程碑。例如前期一起規劃網站的架構、中期討論網站的大功能、後期討論前後端 API 介接的開發進度等等。
而後端會議通常會在日下午,有點算是晚上的會前會,我們會彼此討論後端的進度或是需要協助的部份。因此我自己盡量將份內的進度壓在日下午以前完成。
開會方式透過 Discord 的語音聊天,如下圖
(後端搞小圈圈還開一個後端小屋 🤣)
選擇技術
每個人時間都有限,大家平常也都需要上班,因此我們列出這次專題可能會用到的技術列表,每個人都會對想學的技術進行評分點數(一個點數為 4 個小時),最後加總的點數大約落在 15 上下,代表這段時間可以學習的技術點數。(很像小時候玩線上遊戲,一開始的技術點數不太足夠,我們只能投資最想要的部分)
如下圖,這次我以學習 Node.js 、規劃資料庫環境為主,其他次要的包含第三方登入、金流串接和部署雲端。
經濟學課本的第一句話:「資源有限,慾望無窮」,想要在短時間內完成多個技術學習難上加難,還可能會鼯鼠五技,不如在一開始先圈列好最想要的技能,並且透過量化方式來評估自己的時間可以事半功倍。
規劃 API
終於來到規劃 API 的階段,透過線稿圖去構思可能會有哪些功能。這時候列出表格相當重要,首先教練希望就登入、使用者帳號先做好,因此在列出的同時,也可以同步開發。
基本上欄位至少需要包含角色、頁面群組、 API 名稱、API 路徑、方法,其他欄位是依照我們專案需求,例如進度、優先度等等。
在規劃 API 的同時,我們也同步列出 Mongo DB 的 collection
開發階段
前面紙上談兵告一段落,接下來進入實戰階段啦😆 我們大概從五月中旬陸續開發,後端可以先從建立 MongoDB 和 Swagger Docs 開始,熟悉 Node.js 的寫法著手。這邊要提到的是如果平常每週的直播課有跟著,並且寫回家作業的話,ㄧ開始使用 Express 建立 Node.js 會很快上手。
而後端的任務,就是將 API 列表中逐一實現到 Swagger Doc
後端開發功能大概的依序是:
- 登入註冊寄信
- 使用者資訊
- 首頁
- 刊登任務
- 找任務
- 系統通知
- 聊天室
- 金流串接
- 第三方登入
這個階段教練檢核標準基本上是要看兩個角色是否可以進行互動,以我們專案需求來說,我們設計的任務系統包含「幫手」接任務、「案主」接任務。因此大致上我們完成到第五點就是本專案最主要的功能,後續 6~9 點是加分功能。由於開發時間有限,主要功能如果沒有先開發好,就算有加分功能也是白搭。
而我認為這次專案最難的地方也就是刊登任務,我們的需求是要做需求單據的系統,其中單據會有相當多種的狀態,並且還會有草稿區、下架模式。
補充說明,其實在前一個階段,我們也將這個考慮並著手規劃以下表格。而這張表也是要跟全組一起共同討論,因為這也關係到前端要怎麼呈現畫面。由於我們先定義好每個 status 的意義,在寫刊登任務相關功能就可以按照這張表進行開發。
協作工具
下圖是我們有利用到的協作工具,而專案簡報是使用 Canvas。
心得分享
經過這次的專案開發,除了認識一群工程師們好朋友,我們也完成很棒的 side project,讓我有滿滿的收穫和成就感。由於在每次與教練進度會議的時候,提前加入會議亦可以看到其他組的進度。有些其他組的組員可能剛好公司專案進行就會比較沒有時間開發、常常加班或是特殊情況,導致進度上較為落後。因此我真的很感謝組員們各各很罩,大家的進度都非常神速,也會互相 cover 和講幹話。
另外我想提到的是,平常上班都這麼辛苦了,為什麼大家下班還要進修並增進技術呢?我認為有兩點:
- 時間規劃:有多少人會記得在每年年初自己訂下的目標,而年底的時候能真的完成與實踐呢?我覺得能做到這點的人不多。因此,參加一門規劃好的課程,依照進度按表操課,並且有一群夥伴互相提醒切磋,我認為是相當不錯的方式。
- 提升自我:大家無非是想要提升技術,更重要的是提升職場競爭力,未來在面試時可以拿出 side project。透過實際去開發作品來應用技術,這些技能才會是自己的看家本領和真功夫。
感謝看到這篇文章的你,若不嫌棄可以鼓鼓掌給作者加油打氣,謝謝 😆
If you find my article helpful, please consider giving it a thumbs up or expressing your appreciation with a like or comment below. Thank you for your support!