離上篇更新隔了 3 個多月,絕不是因為偷懶 (其實是
當時即將進入新公司,正式轉職成為軟體工程師(撒花
分享下自己為何轉職及做了哪些準備
背景
科大電子系畢業,僅在高中接觸過 8051、大學碰過 C++,但早已全忘 (連 Hello World 怎麼寫出來也忘了),當時是排斥寫程式的,覺得好難看不懂、英文又爛 (現在英文也很爛 XD),我一定學不會,當時的作業和考試多虧了同學才得以在及格邊緣通過 XD
轉職前工作了幾年,做過業務、策展、會計,每個領域都很跳 tone,也都是不同產業,還在尋找適合自己的工作,希望是:
1. 經驗能累積
2. 技能帶著走(不受產業限制)
3. 工作環境單純
4. 平均薪資天花板比一般產業更高
5. 不受地點任何地方都能工作
換了幾個工作後,一直找不到上述條件的工作,覺得再怎麼換都是差不多的工作,想起前年在PTT看過轉職心得文「[心得] 文組生轉工程師攻略」(連結為科技報橘的URL,比較好閱讀),從那時起,覺得我好像也可以的念頭便種下種子。
做了哪些準備
當工作開始迷茫時,轉職念頭也逐漸萌芽,直到去年 4 月底離職後,便正式開始自學前端的 HTML、CSS、jQuery (推薦看 Amos 老師的金魚都能懂的網頁教學系列影片,共兩季(網頁教學、切版教學)),先確認自己是否還會排斥,每天跑圖書館自學 8 小時,持續一個月後,確定不排斥甚至產生興趣後,想持續深耕並更有效率地學習(目標是年底前轉職成為工程師),過程中有尋找線上及實體課程進行比較,像是:
線上資源:Udemy、Coursera、Hahow 好學校、六角學院、ALPHA Camp、網頁15天、臺大開放式課程、Youtube...等
實體資源:五倍紅寶石、CMoney 培訓、職訓局、資策會、好想工作室...等
不找還好,一找發現資源多到爆炸,反而不知該如何選擇,光是尋找、篩選、找到適合自己的學習方式,就花了一些時間整理,文章後面會把整理過的連結給大家參考,希望能幫助到想轉職的你,也歡迎在底下留言讓我知道,有留言鼓勵會更有動力更新 XD
經過多方比較後(預算、所需投入的時間、師資助教資源、課後輔導、學習氛圍等),最後選擇「五倍紅寶石」當作首選,自認需要有人引導會更有效率地學習,雖然可以持續每天跑圖書館自學,但摸索及撞牆期會花更長時間,且不見得所學的觀念是正確的,更常是知其然而不知其所以然,有人帶的話可以大幅縮減撞牆期,遇到不清楚有人可以詢問解惑,更快突破瓶頸及持續成長。
確定北上報名課程後,才開始找短租(台北租屋、出租專屬社團),在租屋社團可以提出需求,符合條件的房東會主動與你聯絡,或在上面看物件詢問對方,整體支出會比住家裡的人還高,要先算好這段期間沒收入的開銷,要上課、租屋、三餐、交通、電話費、健保費、國民年金、保險費、雜支...等,銀彈要準備充裕,建議在學習階段專心學習就好,別讓外務(打工)影響學習品質。
課程期間很精實,作業量蠻重的,要錄影寫作業外,也要寫文章、參加鐵人賽(連續 30 天每日寫一篇文章)、架設個人部落格、分組討論製作專案,同時要做的事情蠻多的,不停地學習新知識外又要持續輸出,時間永遠不夠用,巴不得自己是可以不用睡覺的體質,同學間也很積極學習,學習氛圍是好的,閒聊時會問彼此昨天幾點睡,一位比一位晚睡,到後來可以說是輪班睡覺,B 群、C 群、咖啡更是不離身,過程的辛苦只有參與過的人最清楚,雖然很累但樂此不疲,當一群人持續往同個目標前進時,會比單打獨鬥走更遠,一起共患難會有革命情感,即便課程結束到現在,仍會持續聯絡,假日約寫 code 或出來走走,這是一人在圖書館自學所無法擁有的回憶及友誼。
課程結束後,有在外面租個共用空間的辦公座位一個月,每天待 10 小時以上,不是寫 code 就是整理履歷、丟履歷、刷題、更新個人部落格、看技術文章...等,用「不是在寫 code,就是準備 code」來形容一點也不浮誇,讓自己除了吃飯、睡覺、通勤外的其它時間,全部投入在轉職工程師這件事情上,Line、Youtube、Instagram、Facebook 幾乎很少用,到後來甚至刪除 Facebook APP、Instagram APP,會不自覺想用的 APP 就刪除,藉此戒掉下意識滑手機的習慣,會發現有更多時間可以做想做的事情,而不再只有想卻沒做。
面試平台
開始找工程師相關工作後,首先要先有履歷,會發現履歷與之前撰寫不一樣,使用英式履歷即可(一張A4正面),再來就是各人力銀行網站都放,像是:
面試問題
除了履歷上會寫你有什麼技能,並用它做了什麼之外,每間公司問的問題也不太一樣,基本的自我介紹外,更多的是技術問題,像是:
專案面:
-
你在專案中做了什麼?
-
專案的分工
-
專案用哪些技術
-
常用的 Gem 有哪些? 用來做什麼?
-
這專案遇到最大的困難是什麼,如何解決
技術面:
Ruby on Rails
-
Proc
與Lambda
差別。 -
要怎麼把
Proc
、Lambda
轉換成Block
? -
Block 中的
do…end
與 花括號{ }
的差異。 -
Ruby 中的
module
怎麼用,跟class
的差異在哪裡? -
symbol
跟string
的差異,什麼情況下會選擇這些資料型態? -
map
跟each
的差別? -
extend
和include
差別。 -
如果有兩個陣列要怎麼找出一樣的值?
-
a 陣列和 b 陣列如何相乘變 c 陣列?
-
private
,public
,protect
的差異? -
race condition 怎麼解決?
-
費氏數列是什麼? 怎麼用一般迴圈寫出來?
-
會怎麼儲存密碼這種敏感資料?
-
RestFul 是什麼?除了 RESTful 的路由,還知道其他有什麼嗎?
-
RestFul 的實作?
-
Get、Post 的差異?有哪些特性?
-
什麼是 model 的多型?
-
什麼是STI?
-
Rails 裡怎麼避免 n+1 query?
-
includes
和join
的差別? -
Routes 裡
shallow
是什麼? -
Routes 裡面
collection
和member
差別是什麼? -
如果要做一個短網址系統,routes 和 controller 會怎麼設計?
-
什麼是 CORS? Rails 怎麼解決這類問題?
-
前端的 partial 怎麼整理,怎麼把邏輯寫到 helper 裡面
-
哪些方法要寫在 controller、哪些要寫在 Model,分別是為什麼?
-
Model 除了跟資料庫溝通外,還可以做什麼事?
-
Gemfile 的功能
-
敘述使用者點擊網頁後背後的流程,特別注意 request header 與 response header 裡面的參數功能為何?
-
說出 cookie 的用途,以及 cookie 的儲存位置。
-
session 和 cookie 的差別?
-
敘述
migration
的用途。 -
描述一下 MVC 怎麼運作的?分別代表什麼意思?這樣的設計模式有什麼好處?
-
測試用的假資料有哪些選擇(fixture與factory bot)?而這些選擇又有哪些cons and pros。除錯的方法?
-
index
的優缺點? -
has_and_belongs_to_many
知道嗎? -
有很大量的資料要怎麼更新?假如是在本地端的話可以怎麼做?
-
dependent destroy 和 dependent delete 的差別?
-
如果 request 會出錯要怎麼處理?
-
如何在資料中如果有就抓出來沒有就初始化一個?
-
find
、find_by
、where
差別 -
Rails 怎麼運作
-
什麼是 strong parameters
-
有用過 Assets pipeline 嗎?
-
什麼是 Active Job?用來解決什麼問題?
-
有在 method 裡用過
&
跟*
嗎? (不是參數) -
Rails 框架提供了什麼功能讓我們能快速開發?
-
ActiveRecord 如何幫我們解決處理資料庫的問題?
-
什麼是 Redis?
-
什麼是 ORM?
-
什麼是 CSRF? Rails 怎麼防範?
Git
-
什麼是 Git Flow?
-
Merge
和rebase
的差別 -
為何要
rebase
自己的branch
? -
有用過什麼比較特別的 Git 指令嗎?
SQL
-
怎麼知道 SQL 的 query 效能好不好?
-
說明一下 SQL 和 NoSQL 的差別?
-
Left join 和 Right join 的差別?
-
知道什麼是 SQL injection 嗎?及如何預防?
-
rails c 中,如何查詢 11/01 後建立的所有資料
-
MySQL、PostgreSQL 是哪種型態的資料庫?為什麼是主流?帶有什麼好處?
JavaScript
-
undefine
和null
的差別 -
Promise 是做什麼用的,說明怎麼使用
-
Settimeout 1000 指的是幾秒,一定準確嗎?
-
==
和===
差別
軟問題
-
你在學習程式語言這段期間有沒有曾經想放棄?
-
那你在學習程式語言的過程有沒有特別難過的檻或經驗
-
為什麼想轉職?
-
會用哪三個形容詞形容自己?
-
請說明自己的三個優缺點
-
對未來的規劃
-
為什麼會選擇 Ruby?有學過或比較過其他程式語言嗎?
-
對於未來的工作最注重的是什麼
-
進入後,會想做什麼?個人未來規劃?
-
之後想加強哪部分?
上面的面試問題,不是每一題我都被問過,在面試前,會先上網看別人分享面試心得及題目,累積彙整下來的,答案請自行查詢。
小結
當決定轉職後,除了努力之外,更多的是行動,才有機會轉職成功,從 5 月開始算的話,約半年左右轉職成功,到目前為止挺滿意現在的工作內容,工作上雖然常接觸沒碰過也不會的事情,抱持著遇到問題想辦法解決的心態去面對問題,解決問題的當下所帶來的成就感及喜悅是高於壓力的,會讓自己持續成長及前進,祝大家在職涯上能找到適合自己的工作,有任何指教或鼓勵可在下方留言討論。