充實又有趣的三個多月!
我與 AppWorks School 的相遇
嗨大家好~ 我是 AppWorks School Campus Program Batch #1 的 Tim 林彥廷,筆名「卡尼多」😀
畢業於國立陽明交通大學資訊工程學系,職涯初期打算先做⼀名後端⼯程師。
很榮幸能在這邊和大家分享我在 AppWorks School 的點點滴滴!
想當初,還蠻幸運的,在我正頹廢、無聊滑臉書的時候,無意間滑到了 AppWorks School Campus Program 的招生宣傳文,當時心想:「咦?難道臉書演算法是在指示我去了解一下這個 Program 來解救一波自己的頹廢嗎?」
不仔細一看還好,仔細一看天啊不得了!這個 Campus Program 是專門為資訊相關科系的大學和研究所學生設計的,跟我過去所認知的「AppWorks School 協助很多人成功轉職為軟體工程師」不太一樣,居然也有這麼一個 Program 是給資訊相關科系的!
除此之外,上面還提到說這個 Program 可以協助我們利用課餘時間累積實作經驗、熟悉業界實務、認識新創生態,並在探索志向的過程當中累積技術即戰力。這正是當下狀態的我所渴求的!更誇張的是,這個 Program 居然全程免費!
那時候想說說明會的時間我剛好有空,加上招生宣傳文上也有提到現場有提供餐點,於是乎,抱著聽聽看的心情,參加了說明會。沒想到聽完了以後,讓我對這個 Program 的內容深感興趣,因而開啟了我這段酷旅程😎(從來沒這樣想過,原來滑臉書也是一件很酷的事情)
申請過程
第一步就是填寫申請表單。
我當初在申請的時候有幾題是屬於比較開放式的那種,像是你有哪些程式語言使用上的經驗、你想多了解軟體開發領域當中的哪一塊及為什麼、分享課外活動的經驗以及從中學到了什麼,所以在寫表單的過程當中,你會更加清楚自己為何想要申請這個 Program,當你發現越填表單動機越明確,那就代表這個 Program 是非常適合你的。
有一題甚至要我們錄個一分鐘的自我介紹影片,可能上傳到 YouTube,然後再貼影片連結到表單上面。這個部分在我們那時候是 optional 的,但究竟有沒有做會不會影響到錄取與否呢?我是不敢拿這麼寶貴的機會開玩笑啦,所以最後還是錄了😂
很快地,填完申請表單的隔天,就收到了面談邀約,超開心的!這個面談的目的,是為了更深入了解申請者的學習歷程以及對課程的期待。點郵件裡面的連結,登記完可以出席的日期和時段以後,就離進去這個 Program 不遠囉,剩下就是去 School 面談這一關了,當天帶著輕鬆的心情面談即可!
關於面談,有一點想提醒一下,雖然是輕鬆的面談,但別忘了事先準備好想問的問題啊!(那次我忘記準備,被問到的時候,居然還反問說其他面試者都怎麼問,當下就覺得完蛋了😂)
所以該做的基本準備還是要做的!
P.S. 接下來我會一一介紹每一階段大概都在做什麼,小標後面的時間是我們那時候的,可能會跟新的 schedule 不太一樣哦~
入學準備任務 (11 days)
4/1 禮拜五傍晚快六點的時候,收到了一封標題前面是「AppWorks School」的郵件,當下既期待又怕受傷害,到底會是封錄取信還是感謝信呢?
點開一看:「太好了,是入學邀請啊!」
興奮之餘,還是謹慎地讀了一下內容,深怕這只是一場夢啊!
上頭有些任務要在入學前完成,就照著做吧!其中有個任務可能會需要花些時間去研究 —— 完成 AWS 相關設置,建議可以在一邊設置的過程當中,一邊簡單用文字記錄下來,這樣之後如果想做一樣的事情,就可以看自己之前寫的東西快速重建了!(真的蠻建議這麼做,可以是 HackMD,可以是 Notion,甚至乾脆弄一個屬於自己的部落格,因為你可能在 School 期間會因為踩到某些「坑」,而讓你想砍掉重練你的 EC2 Instance,有了自己整理的設置過程,拿來參考很快就能重建,也就比較不會覺得那麼煩躁😂)
除此之外,School 還很貼心地提供「學習指引」給我們大家,希望我們在入學前這段時間鞏固一些基礎,這樣比較能順利銜接開學後的課程,因為開學後會直接開始實作「based on 那些基礎」的專案!(很扎實,但也能很快讓你變厲害的那種)
學習清單裡面有些是 Treehouse 的資源,咦,那不是要錢嗎?不用擔心!AppWorks School 非常貼心,開學後可以憑收據向 AppWorks School 請領一個月的月費,超賺的!
所以說,教學影片還不看爆嗎?
個人指定專案實作 (4 weeks)
這個階段可謂穩固基底的黃金階段!
一開始會要我們搞定 EC2 環境,並在裡面裝好 Node.js、MySQL、NGINX。這個任務如果過去沒接觸過的話,得花上不少時間和精力去研究,而且常常會不知道自己在做什麼。這時就可以多問問身邊的同學和導師,永遠要記得,在 School,當你請求協助,總會有人伸出援手的,而且你並不孤單,大家都是站在同一陣線上的!
當你搞定好環境,這時候又會面臨到另一項挑戰:你必須根據 STYLiSH (進去之後你會琅琅上口的電商網站 project) 的設計稿,建所需的 MySQL 資料庫並用 Express 撰寫相關的 API,最後部署到 EC2 上面。這可能跟過去在學校寫作業的方式不太一樣 —— 沒有一個非常明確的 spec 要你做什麼,而是你要自己根據設計稿去構思該怎麼設計資料庫的 schema 和怎麼開後端的 API。我覺得這是個人指定專案實作當中非常有價值的一個部分,如同 Jamie 之前在一場 AMA (Ask Me Anything) 講座分享到的:「業界並不像學校,什麼問題都 well-defined,我們要學會自己去定義問題!」這是一個很好的機會去訓練自己這一 part。
此外,還會接觸到怎麼在 Express 上面做圖片上傳、申請 SSL 憑證以啟用 HTTPS、串接 TapPay 金流服務、Authentication 以及導師會帶大家體驗 code review 的流程。
前兩週是後端,第三週開始就要用 React 來做前端。
一開始有個 React Workshop,會透過實作簡單的 todo list app 來帶大家認識 React,像是怎麼使用 React 的 useState 和 useEffect。雖說是「簡單」的 todo list app,但如果是第一次接觸 React 而且過去習慣用 JavaScript 去操作 DOM Element,那會有一段小陣痛期😅(不過熟悉了以後就會發覺到 React 的魅力所在!)
Workshop 完了以後勒?沒有錯,就要開始使用 React 然後照著設計稿去刻前端。這是一趟不輕鬆但會越做越有成就感的艱辛旅程。
首先跟前端比較沒有關係,要為前端 project 設置 linter 及 prettier,讓自己能寫出具有一致風格且乾淨整潔的程式碼,這是個好機會來養成寫 code 的好習慣。接著就是用 create-react-app 及 react-router、styled-components 刻 STYLiSH 的頁面,如果過去比較沒碰過前端切版的話,很可能一個頁面就得花上一整天的時間,不過放心,越做會越上手的!最後就是部署到 EC2 上面啦,可能會踩到一些坑,就讓大家親自去體會囉~
還有第四週呢!第四週除了繼續刻前端頁面,還會要大家把前後端串在一起,也就是前端能 call 前兩週做的後端 API 來拿到它想要的資料。這個任務困難的點在於,你之前開的 API 或許根本不符合你前端的需求,所以你得不斷在前端、後端之間來回修改,直到兩者可以順利串接在一起為止。提個外話,過程中除了可以磨練耐心之外,你也會深刻體會到開發團隊彼此溝通的重要性:你看,自己一個人包前後端都這麼辛苦了,更何況是前後端分離的團隊開發協作模式!
總而言之,這個階段撐過來以後,真的會發現到自己的巨幅成長,不是開玩笑的!(再次提醒,過程雖然不輕鬆,但你總是能請求協助的)
團隊專案實作 (1 week)
在「個人指定專案實作」最後一個禮拜的星期五晚上,校長 Shirney 突然宣佈一個新活動 —— 第一屆 AppWorks School 校園計畫黑客松。當下真的有被嚇到,才剛結束充滿挑戰的專案實作,沒想到又有新的挑戰迎面而來,完全沒喘息的機會啊😂
這個黑客松競賽禮拜五晚上宣佈,然後下個禮拜一要上台報告 proposal,再下個禮拜一就要上台 demo,對於剛完成「個人指定專案實作」的大家來說,聽到的時候真的會覺得哇天啊,好想先休個息啊😂
這是一個團隊合作的專案,我們那時候的任務是:要在導師幫大家寫好的 STYLiSH 範例 code 上加上新功能,在那之前還要解決一些 bug,最後會根據功能完整度、整體介面呈現、綜合技術難度、綜合表現及協作來做評分。導師會預先幫大家分好組,所以禮拜五一宣佈完畢,大家就跟組員坐在一起開始討論,想加什麼功能都可以,天空才是你的極限!(我們這組最後結合了 LINE Bot,感覺如果你想結合 machine learning 的東西導師們也會很樂見的)
這個機會還蠻寶貴的,而且如果你出去面試,通常都會被問你過去有沒有團隊開發的經驗,這時候你就可以分享你在 School 團隊專案過程當中的點點滴滴,所以這個部分要認真投入啊!
最後 demo 的時候就能看到大家創意的發揮,還挺有趣的~
專題研討 (1 week)
專題研討是什麼?簡單來說,導師會要我們大家分組去深入一些特定的主題,也就是「Dive into Topics」。
我們那時候有六個主題:(1) 前端、(2) Load balancing + Auto Scaling、(3) Message Queue、(4) GraphQL、(5) NoSQL Database + Database Management、(6) Monitoring。每個主題的名額有限,先搶先贏!主要的進行方式就是禮拜一的時候選定主題,在接下來的幾天好好去研究,禮拜五的時候每個主題會抽一位學員上台 share,每個主題大概 25 分鐘這樣。那因為每組由誰上台當天才會知道,所以每個人都要事先準備好能上台 share 25 分鐘的內容,沒準備好被抽到就尷尬了,所以大家都不得不好好去準備😅
我覺得這個 part 很讚的地方在於,每組各自鑽研一個主題,禮拜五的時候就能聽到大家經過消化吸收過後的介紹,能在那麼短的時間內 (不到一個禮拜) 就能接觸到不同的技術真的很賺!
求職暖身及企業期中考 (1 week)
這個階段開始,會有很多 Workshop 的活動可以參加!以 Batch #1 來說,這個階段的第一週有 Cybersecurity Workshop、Coding Interview 技巧的分享、QA Workshop。我覺得如果有時間的話都可以盡量參加,因為透過這些 Workshop,你可以接觸到很多不同面向的知識和心法,有些甚至可能過去不曾接觸過,而你都可以在每一次的 Workshop 當中 pick up 一些有趣的知識點和想法,真的還蠻不錯的。也蠻推薦可以在 Workshop 進行的過程當中,做點筆記記錄一下,這樣活動結束以後即使過了一段時間再回去看,很快就能回憶起當初講者分享了什麼,以及當時聽完以後那些屬於自己的寶貴收穫。
至於企業期中考的部分,那次我們是在禮拜五晚上。可能是因為想減緩我們對期中考的壓力吧?School 有幫我們準備晚餐。實際考完那個期中考以後,發覺自己跟剛進 School 的自己相比,實力是真的提升不少!在測驗當中,你會深刻感謝自己前幾週付出的努力,會非常慶幸當初無論是在做個人指定專案或者是團隊專案的時候有認真投入。所以那晚眼前的一切,對我們來說真的不是什麼太困難的挑戰,spec 和藹可親多了,而且就算在過程當中卡住,導師也會不時給予溫馨的提示,讓大家能更順利地完成測驗。雖然這個企業期中考不會納入 AppWorks School 畢業與否的考量,但如果沒參與到、沒實際深刻感受到自己的成長及過去幾週的辛勤,我覺得會非常可惜、甚至是會後悔的呢🤔
Topic Discussion (1 week,optional)
這週因為是大部分的人學校的期末考週,所以可以自己選擇要不要參加。我想說反正那週剛好沒什麼事,就來參加個吧!導師很有創意地,拿我們兩週前「專題研討」研究的技術,加點新東西整合起來,變成一個小 project,簡單來說,就是要整合 Express、MongoDB 資料庫、RabbitMQ message queue 和 Kubernetes 來做一個「根據使用者所在位置來顯示附近 YouBike 剩餘數量」的小工具,功能並不是這個 project 所著重的,而是練習怎麼把這些技術串起來!雖然 loading 真的不輕,畢竟只有一個禮拜的時間,但是在實作的過程當中,你會更加熟悉「專題研討」時大家分享到的技術,因為光聽可能多少有聽進去一些,但唯有弄髒手去實作,才會學習得更加深刻!(尤其 Kubernetes,聽說在業界蠻常會用到的,趁這個機會接觸一波也是挺不錯的~)
除了小 project 的實作以外,這週還有兩場分別講 Data Engineering 和 DevOps 的 Workshop,都是很不錯的 share!
求職暖身及遠距期中考 (1 week)
這週也是有各種 Workshop 可以聽:業界分享「如何成為世界級的軟體工程師」 (強調 CS 基礎知識的重要性)、Agile Workshop、Docker Workshop (最後要用 Docker 將 STYLiSH project 給包起來,含 NGINX、Express Server、MySQL Database) or System Design Workshop (做一個能 load balancing 和 auto scaling 的縮網址服務) 二選一。
至於遠距期中考的部分,會需要你空出一個白天的時間 (我們那時候是在禮拜六),然後會在 Discord (團隊用的通訊平台) 上面公告題目。有分前後端:如果你 Dive into Topics 那週選的是前端,那你就是做前端的題目,若是選其他的 topic 則是做後端。跟「企業期中考」有什麼差別嗎?有的。一個是實體、一個是遠端;一個累的是身、一個累的是心;而且挑戰的面向比較不一樣,可以達到更全方位的檢驗效果呢!
個人自主專案 (3 weeks)
在上週會請我們構思接下來三週的個人專案要做什麼,然後禮拜五晚上的時候上台分享提案給大家。
強烈建議如果平常在生活當中有想到什麼有趣的點子或者是想解決的問題,都可以先找個東西記下來,那些會對你構思個人專案該做什麼非常有幫助啊!
(偏廢話可跳過😂)像我原本打算做一個類似 Stack Overflow 的問答論壇,之所以打算做是因為實在不知道該做什麼,就有點半隨便地選了這個題目。後來突然想到自己的 Github repo 那邊有一個做到一半就沒繼續再弄的 project (之前打算用 Python 做一個 GUI 的猜歌輔助工具),加上求職暖身週有講者在 Workshop 的最後用 Kahoot 跟我們做互動,而且剛好在 School 培訓的這段期間接觸到了 React 前端,所以最後就改做一款結合「Kahoot」和 「猜歌」元素的互動遊戲平台。扯遠那麼多,我想說的是,靈感總是能在你意想不到的地方發揮它的價值,所以說,平常腦袋有蹦出什麼你覺得不錯的點子,就都先蒐藏起來吧,未來說不定能助你一臂之力!
這個個人專案非常重要,可以說是你在 School 大量學習及累積的一個總結,尤其當你要去外面面試的時候,你會更加深刻體會到這一點。如果你有寫在履歷上面的話,面試官很愛從個人專案去延伸問題問你,可能問你相關技術,可能問你為什麼想做及怎麼做,甚至問你有沒有遇到什麼困難並且是如何去解決的。當你有這麼一個個人專案的時候,你是可以引導面試走向的。所以這也是為什麼你應該認真投入於個人專案,當面試官發現你在介紹你自己個人專案時眼睛是發光的,他能感受到你的熱忱,我覺得這或許能讓對方留下不錯的印象,讓自己更有記憶點。
期間也有安排企業參訪:Hahow、Dcard。聽說每屆可能會不一樣,可以期待一下😀
求職衝刺 (>1 week)
這週有履歷撰寫的 Workshop,也有傳授面試技巧的 Workshop,而且你會在短時間的幾天之內生出一份英文履歷 (過程還蠻不輕鬆的😅),完成了初版以後,會有非常專業的老師幫你看並提供修改上的建議,超級讚!
當週禮拜五晚上是場充滿感性的畢業典禮🎓(結束回到家以後會有種莫名其妙的空虛感)
接下來兩週的活動是給有求職需求的學員參加的 ——
(1) 錄音練習:導師每次會丟個面試常見問題,可能是技術也可能是非技術,你當下要錄自己的回答,傳到 Discord,導師隨機抽一位放出來,再看有什麼地方可以補充。而且導師還會幫大家整理一些心法和框架,遇到不知道該怎麼回答的問題時可以試著套用看看!
(2) 讀書會:每個人會被分配到要 share 哪個資料結構或演算法,到你上台的時候,除了介紹一下那是什麼之外,也要帶大家做點相關的 LeetCode 題目。簡單來說,就是大家一起刷起來啦😂
(3) 模擬面試:跟導師們約線上 or 實體的面試。有用 google doc 來邊講解題思路邊動手寫 code 的練習,有著重個人專案的問答及 system design 的白板題,也有針對你想練習的公司職缺來客製化的模擬面試,甚至會請厲害的 AppWorks School 校友來跟你模擬面試。在每次模擬面試完,面試官都會給予回饋,可以藉這個機會調整一下。我覺得這些練習對實際去外面面試還蠻有幫助的,比較不會有種「蛤?原來可以這樣考?」的驚訝感覺,因為有跟導師模擬過了(特別是用 google doc 解題這一點,外面還真的會這樣考呢!)
最後
在 AppWorks School 這邊認識了很多志同道合的朋友,和大家一起 coding、debug、討論的感覺真的挺不錯的,也很喜歡那種大家在過程中一起成長的氛圍!
很開心能夠成為 AppWorks School 大家庭的一份子,更開心有這個機會在此和大家分享我在 AppWorks School 這段期間的點點滴滴,未來還請各位多多指教了🙏
希望讀完這篇文章的你能夠有所收穫,如果有任何問題,歡迎寫 Email 給我哦😀