個人自學經歷
我在參加 ASTRO Camp 之前,是在一間補教業擔任 SEO 專員,每天的工作就是寫文章推廣產品。
我寫文章的方式,需要使用 HTML 與 CSS 這兩個語言去撰寫,因此我在上課前對於「標記語言」已經有非常基礎的理解。
此外,這份工作每周都需要產出當周的行銷數據,該報表又需要涵蓋 Google Analytics、Google Search Console、Facebook 粉專成效、內部銷售資料表。
起初為了完成這份跨平台與資料表的週報,我需要花費一整天的時間,逐筆手動去計算完成。
為了有效提升自己的工作效率,我開始接觸試算表的「函式」,試著改善自己進行複雜計算所需要的時間。
之後為了整合試算表與外部平台的資料,在尚未學習 JavaScript 前,我先接觸了 Google App Script,並且試著做出資料導入試算表的功能。
雖然我有成功做出 App Script 的功能,但我遇到一個問題就是:我完全不知道自己寫了什麼。
此外,我發現自己工作上也會遇到一些網站技術相關的 SEO 問題,因此我嘗試利用下班時間自學了一年半的程式。
期間我是使用 Codecademy 完成基礎的 JS 課程,此外也花 6 個月慢慢看完 CS50 這門程式基礎課程。
在有了一定基礎的理解後,我發現在現有的狀況下,無法有完整的時間與思考脈絡,去做出一個完整功能與專案,因此開始有參加程式培訓班的想法。
最後促使我離職果斷報名的動機,其實是因為我家那一條小狗過世,讓我覺得這是一個重新調整生活的契機,因此決定邁出第一步。
我會選擇 ASTRO Camp 的原因,其實只是因為它的課程時間,相較其他補習班來說最短,只要三個月就能做出一個專案,同時也使轉職「試錯」的時間成本最低。
如果發現自己不是擔任工程師,也不會花費太多時間。
課程設計
ASTRO Camp 的課程主要分成線上與實體兩個面向:
線上課程安排:
實體課程安排:
我們從上述的課程規劃,可以看出實體課程的目的,是要針對線上課程說明的概念,進行更進階的講解。
例如在 JavaScript 的線上課程中,會談到變數宣告可以使用 let、const、var,函數可以使用 function 關鍵字去撰寫。
在實體課程老師則會針對此概念去深度討論,說明其中涉及到更底層的程式設計邏輯:變數提升、呼叫堆疊。
另外,老師為了訓練同學的程式撰寫邏輯,會出 25 道「糖果題」,加強寫程式的邏輯思考概念。
例如:
#編號:CANDY-001
#程式語言:Python
#題目:找出陣列中重複次數最多的數字
#請撰寫程式找出數組中出現次數最多的數字。如果有多個,返回最小的那個。
nums1 = [1, 2, 2, 3, 3, 3, 4]
nums2 = [5, 5, 6, 6, 7, 7, 7, 8]
def most_frequent_number(nums):
#實作程式碼寫在這裡
pass
print(most_frequent_number(nums1)) # 印出 3
print(most_frequent_number(nums2)) # 印出 7
分組專案部分,則是採用 4 ~ 5 人一組,在人數不會過多的情況下,大家互相合作試著做出包含各種功能的網站。
在分組前也會先對每位同學進行一些程式小測試,例如問你以下程式會出現什麼結果,作為能力評估:
for (var i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, 0)
}
console.log(i);
想知道解答可以參考:JavaScript 閉包與作用域問題解題解析
測驗完,會將每位同學按照程度平均分散成一組,不會每個組成有成員太強與太弱的明顯落差。
在專題製作時,會以業界處理網站需求的方式去進行:製作 ERD 圖、開票、審核 PR、Code Review。
由於專題講究功能的數量與多元性,因此每個功能製作的時間大約是 3 天,困難一點的功能則會 4 天為期限。
助教每隔兩天就會查看我們的製作進度,如果超過一個禮拜都無法順利完成該功能,則代表有明顯卡關,需要重新分配更簡單的功能。
若你能跟上助教要求的進度,通常專題結束後預計可以完成 3 ~ 4 個功能。
最後是求職輔導部分,我覺得「履歷健檢」與「模擬面試」確實對於同學的幫助蠻大的,因為有些履歷問題非常難回答與撰寫,常見有:
- 工作經驗有 5 、 6 份,每份工作不到一年
- 工作中間的空檔超過一年以上
- 工作經歷與工程師距離過遠,關聯性不強
- 在經過講師的提醒與建議後,至少能夠讓自己寫出來的東西具有「合理性」與「連貫性」。
此外就算是「模擬」面試,再經過多次訓練後也能熟能生巧,不至於在正式面試有太不穩定的表現。
誰適合參加此課程
大家在決定報名 ASTRO Camp 前,我覺得具備以下三種條件,能夠在轉職之路上更加順利。
有經濟基礎
由於 ASTRO Camp 是一個實體的課程,所以參加的同學都必須辭去現職,專心投入其中學習,才能趕上緊湊的課程進度。
你付完學費參加這三個月的期間,基本上是不會有任何收入。若再考慮畢業後求職的三個月,可能需要面臨半年沒有任何收入的情況。
若你在學習過程中還需要額外打工賺取收入,可能需要承擔比別人更大的學習壓力,也可能導致自己無法專心學習。
以我自己來說,我已經先存了半年的生活費,讓我在參加課程期間,不需要太擔心經濟問題。
不建議把「轉職工程師」當成自己最後的退路,為了參加課程不惜彈盡糧絕。
生活中,沒有幾個時候需要破斧沉舟,相比之下凡事「留有後路」,反而是一種對生活複雜多變的清醒認識。
具有自學能力
我們從 ASTRO Camp 的課程設計可以得知,報名這種實體課程的價值,在於對程式語言更進一步的深度思考與理解。
當我們學習 JS 變數時,不只是背誦如何宣告變數的單字,更能藉由程式語言本身的編譯方式,去思考為什麼會這樣運作?電腦理解這個程式語言背後的流程與邏輯是什麼?
雖說這樣聽起來非常理想,能夠學習與吸收非常深刻的洞見,但前提是你必須在老師上課前,看完對應的課程章節,具備基礎知識後,聽課時才能有「原來如此」的感覺。
你可能會問:「怎樣算是具備基礎知識?」
我認為至少要先完成以下三個流程,才能具備最基本的概念:
- 觀看完該課程的教學影片
- 親自動手撰寫對應的代碼
- 完成課程提供的糖果題
如果只有做到看完影片,是無法建立一個扎實的基礎,換句話來說就是「投機不踏實」
以自己學習的經驗來說,每一題糖果題我至少需要花費 2 個小時去撰寫,才能夠順利完成。
到了製作專題的階段,是考驗每個人的學習能力第一道關卡。
每一個功能幾乎都是從零開始學習,助教能做的事情就是從旁提點,告知方式。畢竟最後功能還是要由自己完成,面試才說得出來。
有些甚至不算是功能,也能讓人想破腦袋都無法解決,例如將寫好的網站前端樣式,「編譯」成伺服器能夠接收的檔案格式。
這個「轉換資料格式」的過程,曾經讓我一位組員 5 點下課後,想到隔天凌晨 4 點都還沒解決。
遇到這種情況,我想一個人光憑「熱情」是無法支撐這種生活。而是需要建立起自己的學習方法,將不同的知識背後的關聯性建立起來,才能解決這些問題。
當你結訓畢業後,則是學習能力的第二道關卡。
我們班上畢業後,幾乎只有一兩位同學的工作機會,是藉由快速面試取得。就算是快速面試,每間廠商當時也只有八分鐘,因此一定還會安排第二次技術面試。
套一句 ASTRO Camp 課務的一句話:「最後能找到工作的人,一定是最積極準備的人,而不是技術能力最強的人。」
當時我是給自己三個月的求職期限,如果沒找到就會回到老本行繼續上班。
在這段期間,我的生活作息就是不斷在整理筆記、寫功能、參加面試、改履歷四個環節循環。
最後投了 61 封履歷,獲得了 5 次面試機會,獲得 3 個 offer 機會。
心態穩定
在參加 ASTRO Camp 期間,一定會覺得學習壓力非常大,每天都有許多知識需要理解。
儘管如此,我也認為在參與過程中,千萬不要將自己陷入「類高三」的狀態,認為除了學習,任何事情都是浪費時間。
喪失了生活體驗的苦修,並不會讓人變得卓越,只會成為對人的一種消耗。
長時間讓自己處於一種單線程的壓迫枯燥的學習狀態,為了某個目標,犧牲掉自己現在乃至於未來的生活秩序。
這種自己對自己的無限制地剝削,只會越來越讓你變的緊張、焦慮、狂躁,就像越繃越緊的弦,你不知道它什麼時候就會突然斷掉。
固定運動、參與家人、朋友的社交活動,出門踏青晃晃,都有助於自己有效面對學習與求職的壓力。
我們當下的生活就是最真實的生活,它並不會在某個任務完成後才開始。
只有維持好自己的生活秩序和身體狀態,在保障自己身心健康的前提下,才有可能更好的達成我們的目標。
結語
轉職的過程,其實不需要過於猛烈的衝刺,只要在決定的方向,保持持久的恆心。
小小的進步很容易被忽略,但它是成就的基石。
樹立明確的目標、制定合理的計畫、保持積極的心態,在日常生活穩扎穩打,每走一步,都值得慶祝。
至於最後能不能轉職成功,我們只能對結果順其自然。做最壞的打算,盡最大的努力。
步履不停,身後皆是風景。