文科生轉職到網路研發工程師

我是馬來西亞人,在2016年政大哲學系畢業就直接留在台灣工作,在某腦力開發公司擔任課程顧問。這2年內,因為覺得工作發展有限,也發現學coding可以做好多事,如開發論壇、購物網站、處理大數據、寫AI等等,把很多天馬行空想法實現出來,就決定想學coding。

為何不自學,而是選ALPHA CAMP?

Coding資源雖然非常多,但在毫無概念與基礎之下,面對這麼龐大的資源,彷彿大海撈針,會非常茫然。因此決定找指引者,指引你如何通往專業工程師之路,能夠善用現有資源,實踐目標!這也是選擇ALPHA CAMP原因。

ALPHA CAMP課程非常完善,不會一開始就直接接觸coding,而是先建立身為專業網路開發者的核心價值以及應該要有的思維,帶著我們如何面對問題並且找尋答案,再進一步檢視達成目的或解決問題上所需要使用的code,並深入各種code的教學,像HTML、CSS、JAVASCRIPT、Ruby on Rails、Bootstrap、GitHub、AJAX、JQUERY、API、Deployment等等,身為專業網路開發工程應具備能力與知識,都會幫你準備好。

我的學習心態與規劃

我是在職中學習,上一份工作月休只有6日,假日偶爾也需要一大早(6點高鐵)出差到外地,很晚(晚上8點後)才回家,所以能用來學習時間相對非常少。我主要是一週當中,會有2–3個晚上撥出2小時左右進修,休假日幾乎都是安排一整天都在進修(一週約14小時用來學習)。

ALPHA CAMP教案編輯非常用心,會循序漸進帶著你學習每一個新的章節,也會知道作為新手會遇到的無助,只需要好好按照教材進度走,同時也把握每次可以做assignment的機會,就能掌握其中要點。不過有些章節所談內容相對複雜,不會是看一次、做一次就會,所以我通常也會多看幾次、複習幾次、重新做幾次,就能領回了。

因為我個人時間有限,我就專注在學習新技術與新思維,儘快完成教案上的進度,而沒有花太多時間在寫Blog和參與社團群體。雖然進度快速完成,但相對是學得不紮實的,也失去很多寶貴經驗。若你時間允許,建議可以多寫Blog和參與群體互動,絕對對你學習上是事半功倍的。

遇到關卡、挫折怎麼辦?

學習過程中或是開發專案中,遇到問題、無解、看不懂問題、bug等是必然過程,很多時候真的很讓人焦慮和懊惱。當我嘗試各種方法還是無法解答時候,我會選擇先抽離出來,去做其他事情,讓心情與情緒平靜,這樣才能有清晰思緒,很多時候答案都會浮現出來。

網路資源非常多,可以多利用網路上資源來解決現有遇到問題。問對問題是至要關鍵,能幫你在茫茫大海中,真正指引你所想要的答案。練習將遇到的問題,進行拆解、分析,找到其中核心問題,並尋找方案,可以請教Google或是請教他人,很多時候就克服關卡。

解決問題,不是只有coding需要,在每件事或每個行業中都會遇到的課題,這和文科生背景無關,而是你是否有想往前邁進的決心有關,多磨練幾次,對自己絕對是有幫助。

我個人是很享受這學習的過程,雖然對於文科生來說,很多新的概念、思維都要重新建立起來,是相當累人事情,可是每次發現自己又更靠近目標一步,都讓人非常興奮!這也是建立在我確定我真的要轉職成為工程師的目標上。要能持續努力奮鬥,就要明確知道自己想要什麼!

開始準備面試

經幾個月訓練下來,也能獨立完成簡易專案,像開發餐廳論壇、簡易版推特、購物商場等。我也在2018年農曆過年期間就積極準備個人網站與作品集,並在過年後就開始投履歷。

我是0經驗的人,我知道自己沒有基礎和背景,會被很多公司給淘汰,於是透過個人網站準備與作品集整理等,來證明自己擁有自主學習能力寫code熱誠積極向上心態,進而幫助自己加分,爭取面試機會。

個人網頁

https://theguy54007.github.io/personal-page/

從2月底到5月初,投了快20家,有7–8家約面試,終於在5月初找到理想工作,預計6/11開始上班。

面試中遇到問題

每家公司面試方式不盡相同,有的一開始就是筆試(包含考程式 & 英文實力);有的要求寫leetcode;有的直接出題或寫白板題,我們要直接回答或寫白板;也有的就很單純聊聊天,了解你個人特質等等。

以下我整理我印象中所遇到考題:

筆試

  1. 何謂是OOP(Object-Oriented Programming)?以及簡述其特性。
  2. 在 Ruby 的世界裡,幾乎所有的東西都是物件。為什麼說是「幾乎」?
  3. 舉出7個git code,並精簡說明使用動機與時機
  4. Ruby 中Module和Class什麼區別?extend 和include區別為何,以及何時會使用?
  5. 給定一些資料列表與內容,用SQL方式找出特定資料。
    (每家公司提供data不同,要求也不同)
  6. 給一組model 或controller的code內容,找出其中bug並給予修正。

Leetcode:

  • Add digit

https://leetcode.com/problems/add-digits/description/

  • Reverse-string

https://leetcode.com/problems/reverse-string/description/

資料庫設計:

  • 考題1
    一家餐廳的菜單有單點套餐單點是每樣食物單獨價格,套餐就是不同單點組合價格,請設計單點套餐關係。
    建議答案:
    單點和套餐之間在設立join table,join-table針對不同組合紀錄著不同運算方式。
  • 考題2
  1. 使用者可以發表文章。
    請設計data base&不同table間關係。
  2. 使用者可以對特定文章提供評論。
    請設計相關程式碼
  3. 如何找到特定使用者所發表的文章?
    除了@user.posts , 請用其他方式滿足以上要求
    (考官期待不透過user 也能直接找出相關答案)
  4. 如何找到特定使用者在特定文章所發表的評論?
    除了@user.posts.comments, 請用其他方式滿足以上要求
    (考官期待不透過user和post 也能直接找出相關答案)
  5. 要在哪些column設index?

以上資料庫考題,各家公司都相類似,主要考官要看自己對資料庫設計概念是否清晰,以及是否能兼顧效能。

口試:

  1. 為何想要寫code? 什麼契機讓你想寫code?
  2. 當寫code時候遇到bug時,你會如何克服?

以上最主要想了解我們如何解決問題,面對壓力、挫折時又是如何克服的。

面試中所教會我的

每次面試都是為自己上課,我也分享我面試時候所學到

1. 認識真實自己

還記得第一次面試,面試官就隨機出技術相關題目來考我,但我只有答對一半左右,自然就沒有後續通知。這時我才恍然大悟,原來我當時還只是依照教材寫相關作品,彷彿要拿著辭典才能寫出一篇短文,對語言運作邏輯、語法仍相當陌生。此時就能對症下藥,彌補基礎不穩情況,同時持續學習新的技術。

2. 更明白身為專業工程師應該具備的能力

在面試以前我只知道要如何更有效率開發,但經過幾次面試後,才明白專業工程師,不僅僅要求開發上效率,同時也會兼顧維護便利性與使用上效率。除了能讓產品能動起來,能否做到效能提升,如避免N+1 queries問題和index索引使用(ALPHA CAMP後面教材會教)。同時是否有能力可以讓code變的更簡潔,容易維護,容易讓他人閱讀,如善用Rails的helper 、partial、concern等等。

3. 唯有不斷學習,才能處於不敗之地

技術是會不斷更新,而要進入工程師領域勢必就是要不斷學習新知。面試時候,公司也非常看重自主學習能力,願意接觸新code的決心。像我本身學Rails,但有一家公司用Python & Django,因為看重我自主學習能力,邀請我參與面試。在面試完一週後,突然請我自己學習django寫出一個專案(也有提出資料設定、畫面呈現的要求),2天後要交件。最後是順利交件了,因為也上了別家公司,就沒去該公司工作,但這次經驗讓我知道,有了一定基礎之後,再接觸新的語言相對更容易上手,讓我更有興趣學習其他語言。

4. 團隊合作

幾乎每一家公司都有要求git 能力,以及對版本控制觀念是否清晰。因為很多時候不會只有一個人開發一個專案,而是一個大型專案,不同人同時開發不同專案功能,這時版本控制要求非常重要。另外,就前面所提到,你所寫的code是否易讀性,讓別人透過看你的code也能知道運作邏輯,便於維護。

總結

雖然我現在找到工作了,但我其實還只是菜鳥,因此在進入新的職場後,勢必要比現在更努力,才有可能生存下來。我也要求自己,要練習把每次學習經歷寫成Blog,一方面幫助自己建立深刻記憶,同時也可以減少複習時間。另外,我期許自己可以多多參與群體互動,我明白群體互動可以彼此成長,幫助彼此突破難關。

我是一位急性子,做任何事情都非常要求效率、快速,包括學習也是如此,也因此會變的不紮實,忽略很多重要細節,我也希望現在可真正紮實做好每一步,才能真正突破上去!

花若盛開,蝴蝶自來,唯有不斷學習與自我精進,就會有更多機會。

以上是我個人經驗分享,也希望能夠幫助大家,更有信心往自己目標邁進!