好久沒有寫文章了,一來就先用標題和圖片來賺流量(誤)
標題是關於轉職,更精確一點,今天想要分享的是「轉職為軟體工程師」的一些小事。
我想關於轉職這件事情,在網路上隨便都找得到看不完的資料,像是介紹職場趨勢與機會、學習攻略、求職攻略等等,經驗分享的文章當中多半也會提到轉職動機、心路歷程,學習歷程,與準備面試的過程。
如果你還沒有看過相關的文章,或是覺得還看不夠的話,推薦你可以看看
除了攻略與經驗分享之外,許多文章當中也會討論到一些問題,像是
- 轉職的動機是什麼?夠不夠強烈?
- 怎麼知道自己適不適合這條路?怎麼知道自己有沒有天份?
- 自己應該要多努力才行?自己這樣夠不夠努力?
我想這些問題,應該就可以困擾想要轉職的朋友好一段時間。
不過,我今天「沒有」想要分享我是如何回應、或者我是如何知道上面這些問題的答案,我想從另外一個角度出發,來回顧我轉職的過程。撇開動機、天份、努力,我想說的是…
人生是一個不斷累積的過程
我一直認為,在人生中走過的路都不會白走,那些自己所經歷過的點點滴滴,都會轉化成不同的形式,在未來出現。
如果以佛學的角度來說,就是過去的因就會產生未來的果,所以未來的自己,其實就是許多過去的自己所累積而成。
所以與其要分享我「為什麼想要轉職成為軟體工程師」或是「如何轉職成為工程師」,我覺得分享「為什麼現在的我是這樣的我」對我來說會更有意義。
所以這篇文章「不會」是一篇轉職的攻略或心得文,到比較像是我自己人生經驗的小小回顧。
第一次寫程式
回想我在高中的時候,從來沒有想過未來要當一個工程師,甚至還有一點點排斥當工程師,雖然那時候還不知道工程師到底在幹嘛。後來在大學如願進入了自己理想中的科系,可以全心投入自己喜歡的領域。
不過回過頭來,我覺得在大學當中,最有趣的是
可以用最低的成本,探索這個世界
不管是學習新知、交朋友、玩社團、打球、談戀愛,甚至是其他的活動(打電動、夜衝 … 族繁不及備載),都是「探索」的其中一種方式。
所以有趣的是,當年系上規定,系上學生一定要修一門跟程式相關的課程。系上本來就有開一門相關的課,算是相對輕鬆,但偏偏我的好朋友拉我去修隔壁資工系的程式設計。那時候我們真的是不怕死,上課還要坐在第一排。第一天上課老師就問:「你們這兩個外系的坐在這邊幹嘛?」
老師發了一本講義給每一位同學,接著跟大家說,這學期要教的內容都在上面了,細節可以自己看,而這學期的 final project,每一個人都要做一個小遊戲出來 demo 給大家看。
第一次學寫程式,然後又要做一個小專案出來,那時候還真的有感覺到壓力,每週都在寫作業和 debug 的深淵當中求生存。印象最深刻的是,有一份作業的 deadline 剛好在系上的聖誕晚會之前,當大家都已經出發然後我還在 debug,真的是欲哭無淚。
雖然過程辛苦,充滿挑戰,但也讓我第一次知道
原來可以透過程式,自己創造出有趣的事物
如果當年只有期末考而沒有做出 final project 的小遊戲,我想我對於程式設計的印象應該會很差吧。這裡得感謝清大資工系陳煥宗教授,設計如此有趣的學習體驗。我想他應該也不會想到, 那個亂入的外系學生,在 10 多年過後也開始把程式當作吃飯的工具。(其實當年我系上的同學,現在很多都是 software engineer 或是 data scientist 了)
關於嘗試
但其實,那個學期之後,我就再也沒有碰過程式。大學畢業後,跑去念了 MBA,發現好像跟想像中的不太一樣,於是只唸了一年就跑去當兵,退伍後就在 ALPHA Camp 開始工作。
ALPHA Camp 是個 coding school,不過我的工作內容跟程式也沒有什麼太大的關係,中間轉換過不少的角色,從 BD, project manager operations manger 到 team manager 等。不過突然有一天,我決定再次開始學習程式。我認為環境因素的影響很大,因為身邊不管是老師、學生、助教還是合作夥伴,大家都在寫程式,於是我也想試試看。
也由於當年在大學的短短經驗,讓我知道程式其實可以拿來做些不一樣的事情,而不是只是做看起來不知道可以幹嘛的 todo list,因此我學了一點 Ruby on Rails 之後,就開始打造一些小工具來處理工作上的事情。之後就不小心越做越多,變成工作有一半的時間都在寫程式,但更重要的是,我知道我樂此不疲,以及
I can do this all day
特別挑了一個 Steven Rogers 還沒變強壯的 gif,那是因為 “I can to this all day” 這件事情,不會是當自己變成英雄還是武林高手的時候才知道的,這件事情會是在「自己什麼都還不是」的時候努力嘗試,自然而然就會發現。
我覺得有幾件重要的事情:
- 願不願意嘗試新事物
- 有沒有意識到嘗試的意義
- 不要害怕失敗
這幾件事情其實相輔相成。做出嘗試,意識到嘗試的意義後,下一次就會更有機會做出嘗試,也不會因為嘗試失敗,然後害怕做出下一次的嘗試。
可能有些人不太習慣做出改變,原因是「我不知道做這個可以幹嘛?」或是「我怕失敗」,於是就放棄了嘗試的機會。
呼應到我先前提到的大學經驗,我很慶幸自己在大學的時候嘗試過許多事物,而不僅僅只是本科系的學習而已。在每一次嘗試的當下,其實我沒有特別想過什麼長遠的計畫,或是去想做這個到底可以幹嘛,不過在每一次嘗試的過程中,我嘗試思考這件事帶給我什麼不一樣的思考方式或世界觀,因為我相信
每一段人生經驗都是學習和累積,在未來都會以不同的形式再次出現
舉例來說,我從來沒有想過,在上班前一時興起跑去學 Ramda 和 OOP Design Pattern,這個經驗在後來工作上使用 Angular 和 RxJS 會有一些幫助。也沒有想過以前學過、但已經多年沒碰的 Ruby on Rails 的經驗,可能未來就會用在工作之上(現在公司用 Ruby 和 Hanami)。
關於耐心練習
在現在這個時代,大家的腳步越來越快,想要在行動之後更快地獲得一些回應,其實也就是想要「速成」,而忽略了耐心練習和累積這兩件事情。
這世界上有太多事情是沒有辦法速成,隨便舉個例子來說,譬如重訓,是需要長時間的練習與累積,才能夠明顯增強自己的肌力。
更慘的情況是找不到練習的意義。譬如棒球選手,除了要練習投球、打擊、守備等之外,其實也需要做重量訓練,來提升自己的運動能力,以及保護自己。但如果覺得重量訓練沒有意義,只顧著練前面提到的東西的話,發展會相當受限。
上面的例子可能沒有舉得很好,這裡舉另外一個例子。曾經聽過有人說「阿工程師面試大部分都不會考 linked list 或是 tree,我不知道我練習這些演算法或資料結構的題目要幹嘛?有什麼意義?」
面試可能真的不會考這些,或是出現這些題目的機率不高。但是對我來說,練習這些可能不會考的題目,本身就像是棒球選手「重訓」的過程,棒球選手不會在棒球場上做出那些重訓的動作,但是重訓所帶來的效果,譬如提升後爆發力、肌耐力,都可以讓棒球選手有更好的表現。
而練習這些可能不會考的題目,目的在練習如何解題、嘗試不同的解題方法、吸收他人的解題思路等等。就像是重訓一樣,那些所累積的成果,未來會以不同的形式出現。
所以以學習 web development 來說,看起來當下沒有什麼用的基本功也是很重要,像是如果只想著如何用套件快速做出漂亮的前端畫面,卻沒有花點時間熟悉基本的切版,或是只想快速做出可以運作的應用程式,卻沒有花時間理解其背後運作的邏輯,我覺得可能都是很危險的事情。
關於改變
從原本在高中的時候想要成為一個科學家,到後來在一間 startup 工作,其實「轉變」非常的大,但這樣的改變,通常不會拿來跟在職場上的「轉職」相提並論,我想原因是前面的這個「轉變」的成本相對較小,而之後的「轉職」的成本則相對的巨大,這個成本可能是要放棄原本的薪水、經驗,然後扛著更重的經濟壓力。
但本質上來說,我認為一樣都是「改變」,在人生當中沒有什麼是不變的。希臘哲學家很早就說過:
Change is the only constant in life.
如果從這個角度來看,其實「轉職」也就不是什麼大不了的事情,每個人也都很有機會可以轉職,不管是轉換職場角色、位階、職能,還是轉換公司,甚至是產業,而這些轉變應該是隨時隨地都有人在上演。
不過想改變也不是說變就變,需要思考它的 pros and cons,但如果過去的人生經驗中有過相關經驗或嘗試,也許就能幫助自己做出判斷,或是可以讓這個改變的結果變得更好。
反過來說,現在自己會做出什麼樣的改變,可能也和自己過去所累積的經驗有關。有過不一樣的嘗試和經驗,可能就會做出更不一樣的改變。
關於轉職
前面說了不少東西,但好像還有很多東西沒講,不過我想就先在這裡打住。總之我想說的是,對許多人來說,「轉職」本身看起來是一件「當下」做的一個重大決定,但是對我來說,看起來其實一部分像是我過去人生的累積。
這可能聽起來非常的馬後砲,但是回頭想想
- 如果我沒有跑去修資工系的程設,我可能會更晚才會知道寫程式的樂趣
- 如果我沒有嘗試改變考個 MBA 跑到台北,就沒有機會加入 ALPHA Camp
- 如果我沒有自己沒事下班自學 Ruby on Rails,那我可能就不會在工作當中打造那些未來會出現在我求職履歷上的 projects
- 如果我當初不願意改變、調離台北,那麼我今天就不會在新加坡當工程師
我當然也可以分享因為我有多努力或是多幸運,所以我成功轉職拿到了一份工作,但我希望也能夠讓別人知道,這是一段累積的過程。
關於累積,你可能會覺得每個人的成長和工作背景都不一樣,所以我的經驗對你來說有什麼意義?沒錯,所以除了在網路上看那些成功經驗之外,我認為有機會的話,可以回頭看看自己累積了什麼,更重要的是也提醒自己,在每一個當下那些看起來沒有意義的事情,在未來可能會變得很有意義。
當然這不是說我當下隨便做什麼都可以,而是要意識到「事物的本質」和「其所可能帶來的更長遠的價值」。
轉職紀錄
既然是關於轉職,還是來點跟轉職過程中相關的內容吧
關於學習
- 2016–17 自學 Ruby on Rails
- 2018 自學 Google App Script (JavaScript)
- 2019 參與 ALPHA Camp 的線上全端開發課程
- 2020 參與 ALPHA Camp 的 A+ Program (不過是拿到 offer 之後才參加)
一些過程中我有學過的教材
- Master the Coding Interview: Data Structures + Algorithms Your progress
- Node JS: Advanced Concepts
- Understanding the Weird Parts
- Docker and Kubernetes: The Complete Guide
- CSScoke 金魚切版系列
- React 边做边学(从零开始,包含Hooks)(沒有特別推薦)
- 從 Hooks 開始,讓你的網頁 React 起來
關於求職
2020 年四月開始在新加坡求職,剛好遇到 COVID 爆發,CB 開始,傳聞許多科技公司開始裁員、人事凍結,失業人口大幅增加。後來政府開始推出各種措施,鼓勵當地企業招募本地人,也因此變相提升外國人求職的難度。
- 過程中投了 84 間公司
- 10 間公司邀請面試
- 被 16 間公司拒絕
- 曾經拿到一個口頭 offer,但是要我回台灣辦公室工作,所以被我拒絕了
- 最後拿到一個正式 offer。距離第一次面試已經過了 182 天
求職初期本來的目標是後端工程師,途中經過觀察和分析過後,決定將目標轉換為前端工程師。
順道一提,我不是拿 EP,而是拿 LTVP + PLOC/LOC 得以工作。
過程中推掉了至少 3–4 個以上的 project/program manager 的機會,感謝這些公司和朋友們願意提供機會。
感謝
- ALPHA Camp 不管是工作階段還是學習階段,都讓我成為了現在的我。這是人生當中一段非常豐富的旅程。
- A+ Program 與同學們,讓我在準備上班前能夠持續 (快樂的) 學習
- Gary 給予所有 (有形或無形) 的支持與鼓勵
- PJCHENer 的指導讓我不斷地把自己推向更遠的地方
- SML 願意當我在學習前端開發路上的夥伴,彼此一路砥礪,互相學習
- Yenting 在求職過程中所提供各方面專業的建議
最後要感謝 CQ 給予我所有的支持,在這個相對有挑戰的時刻,讓我還能堅持自己最後達成目標。
謝謝你的閱讀,如果對於我的分享有興趣多聊聊的話,可以在 FB 上找到我 :)