寫在程人頻道訪談之後…那些在 AppWorks School 學到的事
(本文所有內容禁止媒體引用)
首先要聲明,我並沒有在畢業之後直接成為軟體工程師。
因此,在這篇文章中,不會出現一般程式培訓單位心得或公關文常見的「成功轉職」故事,當然也就沒有投稿到 AppWorks School 的「校友心得」Medium 專區,單純就在 School 這幾個月的心路歷程做些回顧,以及這段經驗在畢業之後帶來的幫助,希望可以在常見「原本如何如何,轉職後變人生勝利組」的方程式外,提供培訓營心得的另一個思考面向。
還要特別感謝程人頻道「程人茶水間」系列的主持人 Alice,我終於在穿梭各大旅遊 Podcast 之後,第一次被非旅遊主題、而且是「工程師」取向的 Podcast 節目訪問啦!
在 AppWorks School 的日子可說佔據了我 2022 大半年的時間,而隨著後面經歷的事情越來越多,也讓我開始對這段經驗有了更深入的反思...
報名
時間拉回 2021 年 12 月,那是 AppWorks School 第 16 屆的報名期間,早在第 15 屆報名甫截止就開始準備的我,在剛開放報名時就火速交了當作論文在寫的 Google 表單,每一個問題都以「分段短文」回覆,並經多次檢查拼音、用字、文法後才送出,還附上一份包含所有問題回覆的 PDF 檔案:
繳交報名表單後很快便收到了面談邀約,共有線上與實體兩者可選,因為原本就住在北部、也想去 AppWorks School 看看現場環境,便選了現場面談,面談結束當晚還參加由後端班小賴老師主講的「一日軟體工程師|程式開發的真心話大解密」活動。(殊不知 School 過不到一個月就從基隆路搬到仁愛新生路口的福記大樓,跟現場面談的地方完全不一樣)
當時的面談共有兩關(現在的流程已調整,細節以面談邀約信為主),分別是為時 20 分鐘的「技術面談」與另外 20 分鐘的「行為面談」,與真正工程師的面試流程有些相似。
技術面談
因為培訓營主要的目標學員是沒有程式背景的轉職生,雖名為「技術面談」,這個關卡不會要求應徵者寫程式,資料結構、演算法通通都不用會,LeetCode、Codility 一題都不用刷就可以寫,題目就是一些邏輯推導,與坊間的智力測驗相似。
這是我人生中第一場「技術面談」,還沒有任何經驗的我犯了一個大錯:把它當筆試在寫。正因為只在意有沒有找到正確解答,沒有與面試官討論與思考的過程,導致卡關時還是只能埋頭苦幹,最終是面試官之一的 Wayne 看我卡太久而主動給提示,才在作答時間結束以前找到第二題的答案,另一位面試官 Steven 則是完全沒有互動到。
這可說是技術面談中最糟糕的情況(感謝 School 沒有因此把我刷掉),日後逐漸跟更多工程師社群接觸時,我才逐漸發現技術面談注重的是「過程」而不是「結果」,面試官要的是合作起來愉快的人、而不是可以寫對最多題目的人,因此,面對未來的技術面談,我整理出了下列要點:
- 先確認題目:就像工作時,要先跟產品或專案管理專員確認需求。
- 可先提出暴力解:若暫時無想法,可先用不考慮時間與空間複雜度的暴力法解題,再逐步思考減少大 O 值的方法。
- 考慮邊角案例(corner case / edge case):對於特定極端狀況,自己的解法是否能夠處理?若不行,要如何優化解法?
以上要點是在經歷培訓營第 19~22 週「週五短講:編程面試」整理出的小心得,總之,核心要點就是「要有與面試官溝通、討論的過程」。
行為面談
相較於毫無經驗的技術面談,行為面談相對較好準備。為了展現決心、同時避免出現雙方都不知道要接什麼話的尷尬時段,我先行準備了一份面試簡報,把學習程式的動機、過去做的努力與未來規劃都做了簡單描述。面試官是負責招生業務的 Carolyn 與江江,兩人都非常親切,不過因為 20 分鐘的面談其實能聊的非常有限,還沒能把所有準備的問題問完,面談時間便結束。
行為面談最重要的是展現決心,School 最不希望收到的就是「單純覺得軟體工程師好像很自由、比較好賺」就想來上課的,因此務必要掌握下列三大要點:
- 為了轉職,你做了哪些準備?有遇過什麼挫折?又是怎麼處理的?
- 你期待從 AppWorks School 課程中學到什麼?為什麼是選 AppWorks School 而非線上課程、其他培訓單位或研究所?
- 你在從 AppWorks School 畢業之後的規劃是什麼?
不管是填寫報名表單或行為面談,School 最重視的就是「你是否已經想清楚為什麼要轉職」,或者從 School 角度來看,就是「為什麼值得把這免費的培訓資源給你,而不是給別人」。在上述三點之外,報名表單填的每一題也都要很清楚自己在寫什麼,讓 School 感受到自己強大的決心,有助於降低收到感謝函的機會,但如果真的沒有錄取也不用灰心,只要持續自我精進、讓 School 感受到自己有一次比一次好,還是有機會在後續屆數的招募中獲選,透過二刷、三刷才加入培訓的學員大有人在。
我仿照一般求職流程,在面談結束後一天內寄出感謝信與補充資料,再過了超過一個月後,才終於接到 School 的確認電話,並於隔天收到入學邀請,成為 School 的準學員!
不過,我並沒有進到第一志願「後端班」,而是到了第二志願「前端班」,但反正前後端遲早都要會,從前端開始下手也未嘗不可。
申請 AppWorks School 秘訣
歷屆學長姊的相關文章很多,也都寫得非常詳細,這邊針對申請的不同階段做個小小總結:
- 書面審查:卯起來當論文在寫。
- 技術面談:過程重於結果、討論重於答對。
- 行為面談:展現出自己個人規劃清晰、又有執行力。
在 School 最珍惜的事
記得最開始認識、報名 AppWorks School 時,我對於從這裡畢業的想像就是「寫程式變超強,原本不會的東西都可以敲敲鍵盤生出來」,但後來實際走過整個培訓流程後,才發現跟原本的想像有非常大的落差,甚至可以說原本的想像有些不切實際。
或許我並沒有只靠這近半年的培訓,就成為什麼功能都可以信手拈來生出來的大神,但在 School 的日子,還是有幾個點讓我格外珍惜,也是我十分推薦透過 AppWorks School 入門程式領域的主要原因:
讓我們有面對未知的勇氣與能力
記得在加入 School 前,我只要看到不會的,一律以「等我學到那邊再來看」為由暫時躲避,然而,在 School 的生活卻是「每天都在面對不會的東西」,每項任務的期限又非常短,導致我們每天都在瘋狂撞牆。這樣的學習方式或許效率不比有人一步一步帶來得高,但不管是在學術界或業界,都不可能永遠只用學過的工具,面對不會的東西是必然,而能夠面對、拆解、處理這些難關,才是我們能在這瞬息萬變的環境中,走得長久的關鍵能力。
軟硬體資源非常充足
自從 AppWorks School 搬到福記大樓後,容納空間大幅增加,大教室每人都會被分配一臺個人螢幕,所有人只要自備 HDMI 線,就可以雙螢幕操作,不喜歡在大空間工作的人也可以另找空會議室,這些會議室也是我們平常用餐、交流的場所。School 在上班日的開放時間到每晚十點半(以前在基隆路時甚至無限制,據說很多人會直接在裡面待到隔天天亮),假日白天也有開放,如果有需要用 School 的資源開發專案或讀書,都可以趁在學時間多加利用。
導師從頭到尾都是同一位
在培訓營期間,每個班別都會有自己的「導師」,給予技術上與軟實力上的協助,這位導師從遠距第一天到畢業那一天都會是同一人,不會因為階段不同就換老師,因此不會出現銜接上的問題,每個人自始至終的狀況都能被清楚掌握。這樣的好處在於,我們不會因為階段不同就要重新適應新老師,不會出現新老師把舊老師教過的東西重講一次、或新老師以為舊老師教過而跳過的情況。可以把這位導師想成中小學導師、而非大學導師,每天朝九晚六幾乎都會跟我們在一起,與學員的關係十分密切,甚至畢業當晚的狂歡、自主舉辦的畢業旅行也都會邀請導師一同前往。
向心力超強的同儕們
在駐點集訓的這段期間,我們每個上班日都會在 School 一起待上至少九小時,還常常因為要趕專案進度,打完下班卡後再待到晚上十點多、甚至假日也到 School 繼續奮戰,彼此相處的密切程度大概只有高中一起準備大考的同學可以比擬。School 並不是「有繳費就能加入」的培訓單位,單純覺得寫程式比較好賺就跑來上課的人並不存在,大家都有著相似的目標、強烈的動機,每當專案開發的過程卡關時,大家會一起想解決方法、一起協助彼此完成任務,而到了「跨班協作(Co-work)」環節,我們更有機會與不同班別一起合作,不管身在什麼班,都有機會認識全屆學員,視野不會只侷限在自己的專業。
個人專案作品有非常大的發揮空間
個人專案是轉職生找工作的利器,在某些培訓單位,所有人都會製作相似的作品、或只負責專案的其中一小部分,但在 AppWorks School,所有人的個人專案都由自己一手包辦,要開發哪些功能、進度如何安排、用什麼方式實現,全部都可以自行發揮,也因此,每個人的專案內容、技術亮點都不一樣,可以有非常大的個人特色。然而要留意的是,因為在 School 還是會有共同的指定練習專案「STYLiSH」,倘若在履歷的作品集中有放、且跨班協作的亮點不明顯,還是不免會讓某些廠商「看到 STYLiSH 就知道是 AppWorks School 來的」,因此,個人專案或跨班協作的亮點務必要多加強調。
採用 SCRUM 流程進行開發
從跨班協作環節開始,我們都會採用軟體業非常常見的敏捷式開發 SCRUM 流程,以每週為一個短衝(sprint),定期召開「計畫會議(planning meeting)」、每日「站立會議(stand up meeting)」、短衝尾聲的「回顧會議(retrospective meeting)」到整個專案完成時的「展示會議(demo meeting)」,或許因為團隊成員只有導師跟學員,跟業界真正在跑的 SCRUM 還是會有些許落差,對於完全沒跑過敏捷式開發的人來說,已經能從中感受到其運作方式。
以 Git Flow 進行團隊協作
Git Flow 是軟體開發非常常見的協作方式,我們在駐點開始的當天下午就是在熟悉其運作流程,先在本機端建立好自己的分支,再透過發 PR (pull request) 的方式把專案交給導師(跨班協作則是小組負責人),導師或小組負責人確認過沒問題後便會合併(merge),我們再用 git pull
指令同步回自己的本機,有時還會用 git rebase
整理分支。在 School 採用的 Git Flow 流程相對簡單,只有 main/master、develop、feature 三種分支,上線前最後測試使用的 release 分支與上線後緊急修復時用的 hotfix 分支都不會出現,但基本上已經能夠讓我們掌握團隊協作與分支管理的方法。
沒有忽略資料結構、演算法的重要性
培訓營的學員跟本科生比起來,最容易讓人詬病的就是「沒有教資料結構與演算法」,但在 School,因為有週五短講(Friday Talk)與求職階段的讀書會,每個人都一定會認識資料結構與演算法的相關概念,或許並沒有辦法像資工系學生那樣花一整個學期、用非常嚴謹的方式從學術角度切入,至少聽到別人討論某種演算法的時間複雜度、空間複雜度要如何用大 O 符號衡量時,不會完全聽不懂。
有提到「測試」觀念
測試是許多初階工程師會忽略、甚至完全沒有聽過的概念,但要確保程式碼有品質、好維護,絕對不能只讓網頁會動就好,不管是手動測試、或者自動化測試,School 都會介紹,不過因為難度較高、也並非每家公司都會有這樣的流程,我們若要真正學會相關操作,還是有賴後續自行學習。值得一提的是,School 在第 19 屆起新增自動化測試班別,另有目標客群為本來就有軟體測試工程師經驗的「自動化測試在職專班」,不管是轉職生或在職工程師,都有機會在 School 學習自動化測試。
企業參訪與媒合
AppWorks School 是 AppWorks 加速器生態系的一環,會跟相關單位如台灣大哥大、91APP 等有較多合作是一定的,但這並不代表我們會被綁在這些公司。參考歷屆參訪的企業,幾乎都是已經有一定規模、不至於沒聽過的新創團隊,例如我們這屆參訪的 KKday、第 17 屆參訪的 ViewSonic & WeMo、校園培訓計畫(Campus Program)第 1 屆參訪的 Hahow 等,相信都是很多初階工程師嚮往的地方,招聘週(hiring week)的媒合夥伴也多半如此,不過這並不代表我們要進入這些公司就可以走捷徑,還是要走完各自的招募流程。
校友一樣有好康
從 School 畢業之後,我們跟 School 的緣分並不會就此結束,就業狀況會持續被追蹤,至少直到我們找到第一份工作為止,若求職過程不順利,也可以在約定時間回去 School,由具有獵頭與人資經驗的校務給予協助。此外,School 還會定時與不定時舉辦各類講座與活動,內容包含設計模式、資料結構、演算法、求職經驗分享等,只要時間有辦法配合都可以免費參加。記得在畢業後不到兩個月,我就回去聆聽跳槽到某知名美商的前導師分享刷題與面試經驗,內容非常充實,可以透過他的 Medium 文章略知一二。
個人網誌分享內容幾乎未被要求更動
為了避免不小心揭露過多內部資訊,我在 Medium 與 CoderBridge 部落格分享的內容、以及在程人頻道錄音的音檔都有先給 School 審核過,讓我十分意外的是,大概 99.9% 以上都沒有被要求更改,有些我原本以為會被退件的文章,全部都可以原汁原味公開發布。參考其他學員投稿於 AppWorks School 的 Medium 文章,也都非常真實,讓外界得以透過非 School 的官方宣傳認識這個機構。一個民間單位願意做到如此公開透明,相信也必須要累積非常好的口碑才有這本錢。不過,百聞不如實際走一遭,網路上再多的分享,都不可能是在 School 生活的全貌,若想真正了解 AppWorks School,就放膽報名吧!若有幸獲選,必定會有更深刻的感受,還有機會看到非 School 人永遠無從發現的驚喜。
完!全!免!費!
這應該是許多人會選擇報名 AppWorks School 的關鍵原因,跟許多收費動輒六位數的培訓單位相比,這裡真的是徹頭徹尾不收學員任何一毛錢,甚至部分必要開銷也都有補助,且不需要繳交保證金(部分給工程師的進階課程除外)、順利就業後也不用繳交特定比例的薪水。而我覺得最神奇的地方在於,這裡雖然不收費,但是論設備、論服務、論口碑、論轉職成功率等,School 跟其他同性質的培訓單位相比可說是有過之而無不及,脫離學生身分後還可以有這麼棒的資源,實在非常難得。
在 School 受訓要注意的事
在 AppWorks School 的整體經驗是非常棒的、在畢業後會回味無窮的,不過這並不代表整體的過程是「上完課就成功轉職」這麼簡單、順利,還是有幾點要特別留意:
越級打怪,而非循序漸進
如果你習慣的學習方法是「由淺入深、循序漸進」,把一個觀念弄懂再往前走,那在 School 一定會過得非常痛苦(因為我當時就是這樣)!School 安排的進度飛快,每天作業要應用的觀念與技術都頗為複雜、且環環相扣,除非理解能力特強,我們不可能把當中的所有相關概念都摸到精,常常都是成果有做出來、導師合併作業後就繼續往下走,沒有時間消化、吸收,因此常常會有「紮實而不精實」的空虛感,我們或許會開始懷疑「這樣的學習方式真的好嗎?」,但在這段期間,School 要培養我們的是「解決難題的能力」,而不是「確實掌握好一項技術的能力」,前者遠比後者來得重要許多,尤其在真正離開 School 之後,這樣的感受更為深刻。
極度爆肝、極度血汗
記得在入學前,曾看到 School 官網寫說駐點後每週要投入的時間超過七十小時,相當於一天要至少投入十個小時,連假日也不例外,這真的是沒在唬爛。雖然平日表定打卡時間是朝九晚六,但幾乎不太可能真的晚上六點就離開(就算有,也只是換地方繼續奮戰),待到晚上十點不是什麼稀奇的事,回家後弄到凌晨、甚至天亮都是家常便飯。如果是以上班每天工時八小時、每週四十小時的標準來看,這樣的生活無疑是會被檢舉到爆、離職率超高的血汗勞動環境,然而,神奇的是,實際自主退出或被退訓的人非常少,同儕間那股強烈決心的氛圍會帶領我們撐過這一切。當然,要忙裡偷閒做一些跟 School 進度無關的事也不是不行,只是可能會出現非常強烈的罪惡感,畢竟幾乎每天都不在進度上。
進度永遠落後的焦慮感
這在前三週半的「指定練習專案」尤其明顯,因為 School 沒有任何教學,只在簡單講過任務目標後就讓大家各自發揮,花很多時間摸索、撞牆還是沒有任何進展是正常的,除了超級大神之外,每個人平均會落後大約兩天的進度,狀況不順利的可能會落後將近一週,這時難免會很恐慌、開始自我懷疑、開始失眠、甚至開始萌生逃避念頭,這都是很正常的,此時同儕就是非常重要的一群夥伴,大家會一起思考、一起討論、或者…一起焦慮,無論如何,大家都在同一艘船上,請務必堅持下去,因為在後續個人專案、甚至從 School 畢業之後都還是可能面對相似情境,趁此機會建立好面對這些困難的心態,對後續職涯發展來說非常有幫助。
前期無暇顧及程式碼品質
因為前期都在趕、趕、趕,連要達成基本功能都無法在表定進度上繳交,基本上不太可能還有餘裕回頭思考如何把程式碼寫得更簡潔、更易維護、更易擴充,這也造成我們不太會把「指定練習專案」的程式碼呈現在個人作品集中,如果以求職來說,這樣的作品確實吃虧,但到了個人專案,就會開始有「重構」時間,最晚從那時開始,就要開始回頭去顧程式碼的品質,讓其他人、以及一段時間後的自己看到這些程式碼時,會覺得是舒服、可理解的。維持程式碼品質是一門很深的學問,從 School 畢業之後都還是要持續精進。
將會損失至少半年的薪資收入
雖然說 AppWorks School 的課程全程免費,但這將近半年的時間還是得全程投入,專案開發的負荷量之大,我們不太可能同時還有其他工作,因此,對於上班族來說,勢必會損失這近半年來的薪水,這段期間的健保、國民年金、餐費、交通費、房租等支出都得自行吸收,畢業後也未必會立刻找到新工作,若希望畢業後的求職期間有更多等待與選擇的機會,建議至少準備好九個月到一年的生活費,將會更有餘裕。
附近的飲食選擇不多
School 所在的建築-福記大樓位於仁愛新生路口,斜對面是大安分局、距離一個路口就是仁愛帝寶,週遭的平價飲食選擇相對有限,最近的只有八方雲集新生仁愛店,其他多半要到濟南路、甚至三創一帶才有比較多小吃,或者往南到新生市場一帶,大概都需要約五分鐘的路程,在豔陽高照的夏天會「吸收不少維他命 D」。
在 School 上課的這段期間,我最愛去的是新生南路一段 132 巷的菲立斯自助餐,不用 100 元就可以吃得很有飽足感,口味也很不錯,課程後期只要不知道要吃什麼幾乎都會光顧;若往北走,推薦濟南路二段的季然食事與忠孝公園附近的 lulu lin 原型飯包,價格中位數約落在 130 元,雖不是特別便宜,在臺北市中心已經算是美味又能吃飽的好選擇。
就業媒合不等於就業保證
我曾經以為 AppWorks School 的「招聘週(hiring week)」能讓應屆學員在畢業前就拿到工作機會,直到課程中後期才知道,「招聘週」只是最前面的第 0.5 關,學員在畢業前頂多能完成應聘小作業、並完成第一次面談,若與面談廠商緣分未到,媒合期間全部槓龜也是有可能的,尤其這些廠商都是我們最開始找工作時的接觸對象,許多人對於面談可能仍不是那麼熟練,因此會有一定比例學員在畢業後向外投遞才找到工作。不過因為我們這屆的畢業時機:2022 年第三季景氣已經逐漸走下坡,據說在景氣較好的時間點,招聘週也非常熱鬧,有不少人都得以透過就業媒合活動,順利找到畢業後的第一份歸屬。
轉職生的侷限性
如果留意所有「非本科(尤其非理工科系畢業生)轉職工程師」的文章與經驗分享,可以發現就算不是 100%、也有 99% 都是轉為「軟體工程師」,幾乎不會有硬體工程師、韌體工程師、演算法工程師、人工智慧工程師、資安工程師,更沒有影像處理工程師、通訊工程師等,而在各類軟體工程師中,轉職生最常做的不外乎就是前端、後端、iOS、Android 這類網頁或手機應用程式開發。
原因無他,就是要學這些東西的門檻越來越低,各類線上課程眾多,甚至 YouTube 上隨便找都有完整的免費教學影片,手把手帶我們做出各類專案,相關廠商也有很大一部分不會看學歷,這無疑給了許多非本科人當技術職的機會(搞不好某些單位中,非本科工程師的比例還比較高),但正因為入門越來越容易,要降低自己的可被取代性,就要學得夠深、還要有思考,非常推薦〈當我們在學程式時,要學的到底是什麼?〉這篇文章,裡面提及許多學習程式的心法。
另一方面,若比較資工或電腦科學相關科系必修科目與培訓營的教學內容,可發現兩者有非常大的落差,前者著重「素養」,教線性代數、資料結構、演算法、作業系統等;後者教「工具」,技能著重 Git、網頁或手機應用程式對應的程式語言及框架等,其實求職網上各家公司技術職的能力要求會以後者居多,非本科生並不怎麼吃虧,甚至可能比因為分數到而就讀的本科生學習動機更強,但不可諱言的是,就算人資與公關始終不明講,依然有部分頗具規模的公司會看學歷,這也使得一些轉職生在就業一段時間後,選擇回到學校補足學歷。
從 School 畢業之後
一如全文開頭所說,我並沒有在畢業後直接轉職成軟體工程師,而是在從 School 畢業後三個星期回到校園,展開我的碩士生活。
會有這樣的發展其實連我自己都始料未及,畢竟這次考研我也只是抱著姑且一試的心態,並沒有像許多考生泡補習班、寫考古題,甚至被通知上榜時還一頭霧水,搞不清楚發生什麼事。原本打算從 School 畢業後直接找工作的,但剛好遇到景氣不佳的一年,讀碩又一直是我的人生清單之一,有幸得以錄取喜歡的校系,一推一拉之間讓我睽違四年再度當起全職學生。
這種感覺非常不真實,記得最剛開學在校園裡行走時,甚至一度懷疑自己是不是在做夢,尤其在離開學校一段時間後,更深深感受到當學生的時間有多麼寶貴,不管是課內、課外的資源都更為珍惜。
沒當工程師的我在做什麼?
其實就跟一般研究生一樣:修課與咪挺,只是以學習內容而言,學校所教的跟在 AppWorks School 所學有非常大的落差,內容有難度更高的人工智慧(雖然可以呼叫套件、套模型)、通訊網路、資料庫理論等,不再如轉職班幾乎都是純實作,但也因為有在 School 經歷面對大量未知的鍛鍊,接觸這些未曾涉獵的領域時,我不再感到害怕,反而開始逐步建立學習這些知識的方法。
回到校園而沒有進入職場的最大代價是收入超低,別人最糟一個月也有三萬多元(有些高手年薪可能逼近或破百萬),我在無實習、無打工的情況下,一個月只有不到一萬元的學習津貼,也未必每學期都有得領,但好處是我得以有更多的探索機會,透過修課、旁聽或社團,與本科系的同學們接受相同訓練,尤其當我跟大學部資訊本科同學交流的過程中,思維方式也會逐漸改變,他們的年紀或許比我小,但在資訊領域,這些學弟學妹們才是我的老師。
如果重新參與一次培訓,我會...
在進入 School 前,我是個剛考完研究所,花了很多時間試圖理解資料結構、演算法,卻連操作 JavaScript 的文件物件模型(DOM)都有困難、API 完全不會打的超級菜鳥,導致入學後常常進度嚴重落後、老師講的有聽沒有懂、每天都在瘋狂鬼打牆。現在回想起來,假設在入學前有先做以下準備,或許在 School 的日子不至於這麼崩潰:
熟練 Git 操作
版本控制可說是專案開發的基本功,我們在「指定練習專案」與「個人專案」階段都會大量使用,然因專案開發就已經進度落後,開學後並沒有時間進一步做更細緻的版本控制,到頭來還是只會 git add
、git commit
、git push
、git clone
、git pull
、git log
、git branch
、git checkout
,以及同步(sync)時會使用的 git rebase
,遇到 vim 時只會用 :wq
退出,但若對於 git revert
、git reset
、git cherry-pick
等指令有更多掌握,整體的 commit 將能更為細緻,若要給其他人進行代碼審查(code review),對於審查者來說較為友善。
學會打 API、處理 Promise
對於前端班來說,串接後端 API 可說是日常,要如何去後端拿資料、處理 Promise 都是基本到不能再基本的基本功,在「指定練習專案」階段,切版後的第一個任務就是透過 School 寫好的 API 去拿電商網站商品資訊,這理應是五分鐘內就能完成的反射動作,我卻可以直接卡關超過半天,完全拖到後面對 API 回傳資料進行後續處理的時間。現在回想起來,如果在入學前就先學會處理 Promise,必能在入學後大幅提升處理後端資料的效率,把時間用來雕磨較為細緻的功能。
學習基礎 React
即便知道入學後會以 React 開發個人專案,當時的我只打算照著 School 安排的進度走,到真正開始進入 React 環節後完全在鬼打牆,連 prop、state 觀念都沒有、JavaScript 陣列方法中的 .map()、.filter() 也都一頭霧水,導致當時要用 React 實現最基本的功能都有非常大的困難,花了非常久的時間才適應 useState、useEffect、useRef 的使用方法,完全沒有辦法進入到更複雜的狀態管理(如 useReducer + useContext)、效能提升(如 useCallback、useMemo)等,手上掌握的工具有限,做出來的東西也就有其侷限性。
習慣面對未知
相較於上述的「預習某些技術」,習慣面對未知的重要性可說是在前三點之上,因為這才是工程師的日常!記得在培訓營初期,我在遇到毫無頭緒的任務時,只會出伸手牌、問其他人要怎麼處理,經過不斷地摸索、磨練,才慢慢從中期開始培養出自己先釐清問題、思考解決方向、尋找可行方案的能力,提問時也不再只是伸手牌,而是可以先說明自己找過的資料、嘗試過的方法與思考方向,並向前輩諮詢意見,通常只是有一個小地方沒想通,只要前輩一指點,問題就解決了。日後不管在研究所、或者在業界,面對困難時其實也都是如此,我們不再是國高中生,得依靠老師一步一步教我們怎麼做,更不用說前輩也未必做過,「思考解決方案」就是我們發揮價值的時候。
從「凸顯技術亮點」角度構思個人專案
雖然從入學前就知道會有「個人專案」環節、也知道此專案與求職息息相關,但我當時並未意識到個人專案的重點是「凸顯技術」、而非「呈現內容」,導致後來的作品只有基本的 CRUD (create, read, update, delete) 這類基本功能,其他花比較多時間都是在準備跟撰寫呈現內容,屬於靜態網頁(static website),並不利於求職時凸顯技術。
構思個人專案主題具有一定難度,如果真的完全沒有想法,復刻一個既有網站也是選項之一,例如我們有同學復刻 Yourator、Hahow、Discord 等,沒有真正動手做不會知道建立這些網站有什麼難關。
結語
根據 AppWorks School 官方數據,歷年畢業生約有 90% 進入軟體相關產業,我在誤打誤撞下成了另外的那 10%,無法分享過往宣傳文常見的「轉職成功心路歷程」,但即便如此,我依然非常感謝這段經驗,透過高壓、高強度的壓迫,推著我快速向前,或許常常因為腳步沒踩穩而跌跌撞撞,但也因為撞得夠多次而不怕痛,日後面對不同任務時,不再因為未知而感到害怕,反而會自主尋找那些略有想法、卻不是那麼有把握的挑戰。
感謝 School 所有校務與導師在培訓期間提供的幫助與鼓勵、感謝前端工程師 Homer 屢次在我嚴重撞牆時提供即時救援,更要感謝程人頻道一直以來的陪伴,這段期間過得很苦、很崩潰,卻也因為如此,培訓營的經驗才會如此刻骨銘心。
我沒有因為 AppWorks School 而轉職成功,但依然推薦 AppWorks School 給想投身軟體業的每一位。