軟體技術環境變化快速,每天都有新的語言、新的框架、新的技術出現,「持續學習」成為了軟體工程師無法逃避的宿命。軟體工程師該學什麼?用什麼方式學?如何從百忙的工作中安排時間,有效學習?
十月份 ALPHA Camp AMA 活動,邀請三位優秀的課程助教與校友,與校長 Bernard 對談,分享身為軟體工程師的他們如何持續學習,並透過 Side Project、鐵人賽大量練習,不斷精進自我,走在成長的道路上。
活動講者介紹
資深工程師 Sam:第十屆 ALPHA Camp 實體班校友與助教,畢業後前往香港當工作至今三年多,目前在加密貨幣公司 Crypto.com 擔任資深軟體工程師,負責後台系統的開發與新產品的 POC。 Sam 助教專訪:如果對現實不滿,就做點甚麼改變它
前端工程師 楚玄: ALPHA Camp 課程助教,資工研究所畢業後,在 AI 新創公司 Appier 擔任前端工程師,注重 UX 和 DX,喜歡把突發奇想的點子用網頁實現出來。
後端工程師 水源:2019 年 ALPHA Camp 課程畢業校友,曾經是行銷人,目前在高雄新創公司 WeMo 擔任後端工程師,負責組織夥伴操作系統開發。水源轉職心得文:從行銷人到 WeMo 後端工程師的 Wayne
軟體工程師如何決定要學什麼技術
軟體工程師持續學習很重要,但「學什麼」是面臨到的第一個問題。三位講者分享,可以從「工作」、「內部團隊」、「社群」進行學習:
從工作中學習
三位講者皆表示,大部分的學習、約 80% 都來自於工作中學習。會針對所負責的新專案,或為了尋求更好的實作方案,評估需求後決定 tech stack,學習新技術及新工具。
從內部團隊學習
水源分享,透過公司內部團隊共學,也是很好的學習方向。他所在的公司,會固定舉辦各個團隊的技術分享會、讀書會,讓夥伴分享自身經驗、資源等。水源認為,有時候自己摸索,不如跟大家一起走,會學得更快。
從社群中學習
除了從公司及身邊同事進行學習外,也可以利用社群資源,向世界各地頂尖開發者學習,掌握最新技術資訊。例如,可訂閱技術論壇的週報或月報,獲取程式語言新知,或追蹤知名開發者的 Twitter,了解目前熱烈討論的技術與工具。
軟體工程師的學習方法與時間規劃
擁有學習方向後,接下來的問題是「如何安排時間,進行有效率的學習?」講者提供兩種學習方式:
方式一:以工作為導向,進行針對性的學習
水源認為,從工作專案中學習,有針對性的學習專案所需技術,對他而言是較有效的學習方式。
由於新創公司步調快速,每天要做的事情很多,他習慣每天提早半小時至一小時先到公司,準備專案接下來所需的技術。有針對性的學習,也能避免學了很多卻用不上的處境。
另外,從專案中學習也是學最快的方式,當碰到特別的技術,可以請教資深夥伴,快速獲得回饋並成長。
方式二:以興趣為導向,自主安排時間與空間學習
楚玄則分享,他偏好「以興趣為導向」的學習。他在學習技術相關的新知時,不會特別去訂定目標, 因為有壓力的學習反而對他造成反效果。因此他不會安排特別的學習計畫,而是自主安排時間及空間,針對有興趣的技術或工具進行學習。
Bernard 校長補充:由此可見,其實沒有最正確的學習方法。每個人維持動力的方式都不同,要去找到最適合自己的學習型態與方式。
軟體技術變化快速,重點在於規劃時間作有效學習
軟體工程師利用上班時間學習,是正常的嗎?Sam 分享,他所在的團隊會鼓勵邊上班邊學新技術,他自己每周學習時間約占 30%。
為什麼會鼓勵上班時間學習?他解釋道,「軟體開發環境變化太快,邊做邊學很自然。」由於每天都有新技術出現,工程師不太可能一直追上,只有當專案有需要時,才會進一步了解新技術,因此上班學習,對軟體工程師而言,其實是蠻正常的一件事。
水源則補充,「重點不是上班學習,而是如何規劃上班時間作有效學習。學習只是手段,重點在於最後的產出。」他建議如果有學習需求,可以跟主管溝通自己預計花費的學習時間,方便估算成本,主管同意後會放手讓自己去成長。
軟體工程師如何大量練習?透過 Side Project、鐵人賽快速累積經驗
掌握一門新技術的重點在於實踐。透過大量練習,能快速累積經驗、將技術進行內化。以下介紹練習技術的三種方式:
透過專案實作,嘗試新技術
水源分享自己練習技術的方式,大部分還是經手公司專案,用專案進行實作。當談到「用公司專案練習,會不會有風險?」
他的作法是,在嘗試時會先跟主管提案想使用的新技術及原因,並告知新技術的風險,讓主管快速評估。若主管評估沒有問題,他在嘗試時,也會先用測試環境或測試專案來實驗,確保不會對公司產品造成意外的失誤。
參加鐵人賽,撰寫系列技術文章
鐵人賽是專為技術人所舉辦,挑戰連續 30 天發表技術文章的活動。楚玄在今年參加鐵人賽,發表系列文章:你所不知道的各種前端 Debug 技巧,成功堅持了 30 天持續撰寫技術文章,更特別準備了滿滿的 Demo。
楚玄坦言,一開始想主題蠻難的,因為要連續寫 30 天的文章。最後他的主題選擇了瀏覽器 Debug,撰寫文章時,有一半是利用他原有的知識,另一半則是邊寫文章邊學習,每天會花好幾個小時看文件。
他特別為鐵人賽準備 Demo,一方面是方便他人理解,另一方面是自己也能實際試驗。Demo 做得多了,集合起來就變得非常豐富。
透過鐵人賽 30 天持續鑽研特定主題、閱讀文件、實作練習最後撰文分享,好處有許多:不僅能加深技術知識,培養堅持的習慣,也是在發揮自己的影響力。
做 Side Project,體驗與他人協作
作 Side Project 是軟體工程師應用技術、貢獻影響力的方式之一。講者分別探討以下三個 Side Project 相關問題:
- 如何規劃要做什麼 Side Project?
- Side Project 做到什麼程度,才算夠了?
- 非本科系轉職工程師,如何利用 Side Project 突出自己?
如何規劃要做什麼 Side Project?
楚玄分享,可以從自己的需求開始。
比如他自己寫了一個 PDF 線上編輯器,正是因為自己常常有編輯 PDF、在 PDF 簽名的需求,卻發現大部分網路上提供的免費 PDF 編輯器,都需要先把 PDF 上傳到別人的伺服器後才能編輯下載,有資料安全疑慮。於是他決定自己製作,後續將 PDF 編輯器分享給身邊好友,也都獲得良好的反饋。
另一個楚玄助教一戰成名的 Side Project:用 React 刻 XP
Sam 則談到,可以參與 Open Sourec Project,不僅是很好的 Side Project,還可以練習與他人協作。像是他在該專案中,負責去撈取所有加密貨幣資訊,把資訊統整後,作成類似 Library 的東西。
Side Project 做到什麼程度,才算夠了?
楚玄分享,可以問自己能不能把 Side Project 放到履歷上來判斷。Sam 認為,取決於從 Side Project 學到了什麼,像是如何使用 legacy documentation 完成作品,或體驗到如何與他人進行協作。
非本科系轉職工程師,如何利用 Side Project 突出自己?
從行銷人轉職軟體工程師的水源,將 Side Project 做為求職策略之一。他做過一個 Side Project,透過使用 D3.js 製作前端顯示數據的 Dash Board,可應用在電商網站,呈現來客數、銷售金額等數據呈現。
透過這個 Side Project,將知識背景、技能進行融合,能向面試官傳達:自己不是一般的工程師,而是具有商業及行銷觀念的工程師!最後他也順利取得 Offer。
Yenting 助教好文分享:好的 Side Project 和作品集如何做?給新手工程師的懶人包
軟體工程師技術學習 Q&A
活動最後,三位講者針對網友提問,一一進行解答:
如何評估技術學習成果?
Sam 認為,評估自己是否有真正學會一門技術,需要能跟別人講出「自己為什麼學習該技術」、「用該技術達成了什麼目的」。能夠與他人分享,也能解答他人的問題。
學習技術時,會設定學習範圍嗎?
Sam 說明,軟體工程師可以先以滿足 PM 的需求所需用到的技術,來設定學習邊界。
他解釋道,知識永遠都不會有停的一天。在學習階段,如果有新的知識出來可以先看過,先知道有這個技術。如果看完真的很有興趣,再進行學習,或是等到真的要用時,再拿出來複習。
想觀摩他人的程式碼進行學習,有什麼篩選標準找到適合觀摩的範例?
楚玄分享,可以挑自己正在做的工具、套件或專案,去觀摩別人的程式碼,觀察對方實現功能的方法跟邏輯,與自己有什麼不同。另外也可以去看自己有在使用的工具或框架,它的程式碼是怎麼寫的。
學習技術新知(如框架、設計模式)與實作 Side Project 的順序?
水源分享,「框架」及「設計模式」這兩者特性不同,學習方式也會有差異:
- 框架:比較像工具,有相關文件可以很快學習上手
- 設計模式:比較像抽象的心法,適合有一定經驗的工程師再進行學習
在練習框架時,他會先思考自己對什麼主題有興趣。假設是電商網站,他會看能不能用 Next.js 這個框架,做出一樣好的電商網站。
如果是設計模式,他則認為比較適合資深或有經驗的工程師去碰,因為有些技術是需要先累積一定失敗經驗,才知道為什麼應該要這樣做。
因此,水源建議在學習時,首先要釐清該學什麼,如果沒有方向,可以請教資深工程師。實作 Side Project 時,要有比較強的目的性,才能知道自己可藉由 Side Project 增長哪些技術及經驗。
進行 Side Project 遇到困難,有哪些管道能求助?
Sam 分享,如果是自己的 Side Project,問問題可能比較困難,只能利用 Google 或詢問身邊同事來解決問題。
但如果是參與 Open Source Project,可以把遇到的問題直接丟在 GitHub 的 Issue 頁面,所有參與 Open Source Project 的人都看得到,他們都很樂意協助解決問題。
Bernard 校長補充道:有滿多技術社群願意回答問題,但提醒大家,要注意如何「把問題問的更精準。」
如何把問題問得精準?胡立文章分享:那些可以問得更好的程式問題
軟體工程師如何找尋一起學習技術的夥伴?
水源分享,他在 AC 社群拋出議題,就可以找到有興趣學習的夥伴。例如他認識了一個同樣在高雄的 AC 助教,有感於高雄是分享沙漠,他們決定自己開讀書會,學習前後端技術,大家集思廣益學習,學得更快,也不會有那麼多挫折。
另外也可透過參加鐵人賽、發 PR 去仰慕的 Side Project 等方式,找尋學習夥伴。
結語
軟體工程師想在快速變化的環境不被淘汰,持續學習很重要。但學習只是手段,重點是要釐清學習動機,思考自己想透過學習達成什麼的目標。持續學習的範圍,除了技術面之外,軟實力也相當重要,技術只是基本,溝通與協調能力會決定能否與他人順暢協作。
工程師如何持續學習?釐清學習目標,兼顧硬實力與軟實力的培養,才能持之以恆成長,往更理想的職涯邁進。