感謝 AppCoda 轉載此文:《iOS 工程師:成功轉職者分享面試心得》,關於一路的心情轉折記錄於轉職工程師之路成為 PM,以下正文。
接觸iOS開發半年內、以及考慮轉職的朋友,一些我希望能早點知道的資源。
2017轉職來到尾聲
部落格記錄著我從離職後,一路走過來的iOS學習資源和過程,來個結案報告囉!
去年五月離職,朝轉職為iOS App工程師前進,因為下班慢慢摸索進度太慢,決定All in。
當時我已經具備基礎網頁設計能力,如果單純以轉職工程師考量,就轉換難度來說,網頁工程師之於我門檻相對較低;考慮到實際就業環境,大部分公司和消費者對於網頁的使用需求大於App,自己使用時間佔比也是、所以就職缺數量來說,網頁工程師我想對新人相對友善。
基於上述兩點,我決定往iOS工程師前進,因為評估後覺得這條路對我來說比較難走。
我喜歡挑戰。
在離職八個月後,也就是2018年的1月,順利取得iOS工程師的offer。(後來變成APP產品相關企劃又是另個故事)
因為每次都必須搭台鐵轉高鐵到台北面試,面試過程又很耗神,所以每次只安排一間、總共只有面試個位數公司。
關於記錄這件事
我刻意從離職後就開始記錄,是因為常常讀到一些網友分享的成功案例,身為讀者的我們已經知道「結局」,回頭再看每個點好像就少了點什麼,感受更多的是水到渠成的喜悅感:
而在那不知道結局的當下,每個階段的他在做些什麼?好想知道過程中的發展、以及面對未知時記錄下的隻字片語,那會更加有臨場感。
我們都知道人生是在徬徨與不斷摸索中前進。
所以逐步寫下走過的歷程,在我不知道等著的「結局」是什麼前,紀錄著每個階段進展,試著把當下的自己透過文章盡可能保留下來。
這不會是什麼技術高招的開發者崛起之路,卻是一個相對「真實」的面對轉職過程:試著把我走過的路、分享給你。
早點準備會更好
接觸iOS開發半年內、以及考慮轉職的朋友,這三點是我當初沒注意到的,覺得早點意識到會更好。
- 學習純程式碼刻畫面,雖然大多課程只教 Storyboard
- 找工作Objective-C頗重要,雖然全部課程都教 Swift
- 提早準備演算法考題,關乎面試成敗,雖然不懂也能做出應用
我離職進修的方式,就是在家看線上課程和書,自律學習。
那時很天真地想說有「上架作品」應該就可以開始找工作了,但是等到真正開始找,才發現「能寫出App」和「轉職為工程師」中間有蠻大鴻溝的,事情沒有我想的那麼簡單。
聽起來有點抽象嗎?
讓我舉個例子。
「能寫出App」就像是我們可以煮出些不錯的菜色,自己享用或是招待朋友是沒問題的;而「轉職為工程師」好比是要當專業廚師,需要照顧到更多環節,比如辦桌或是喜宴出菜的場合,整體人數、料理環境、食材管理都是更為複雜的。
前者就像是跟著食譜、或是美食料理節目,由專家一步步帶著完成預先設定好的目標;後者需要的是更硬底子內容,比如刀工、對於食材認知等,需要長時間的積累,面對更大的不確定性和找出適當解的能力。
我上架了兩款App後,依舊寫不出演算法的考題,兩個方向完全不同。
整個大~受~打~擊~∑( ̄□ ̄;)
讀者可以試著回想有沒有聽過Linked List?大O符號?Memory Leak?嘗試重現Filter函數?
或許沒有,但這無礙於我們跟著老師做出實際能操作的應用。
但在面試環節可能就有影響了。
用程式碼刻畫面
跟面試沒直接關係,但對於技術成長我覺得很有幫助。
Storyboard,是用類似簡報軟體的方式拖拉擺放元素的方式,直覺易懂、現在課程都是從這開始學。
對名詞困惑的讀者,請參考我以前的筆記:初探Xcode 8。
在我學習幾個月後、首次放下Storyboard完成專案,有種完成里程碑的大大成就感。
推薦Lets Build That App 頻道,老師講解很清楚;可以先跟著影片練習看看。
教學影片有些隨著Swift語法更新舊了,需要額外花時間除錯。
建議在Lets Build That App 網站購買課程,老師會確保程式碼在當前的版本可以順利執行,專心把時間投注在學習,跟著架構出內容更複雜的應用。
從免費到收費,也是創作者把之前累積的大量教學經驗和回饋,再向上推高一個層次:更有系統的內容、更成熟的教學節奏。
課程會先從好理解但寫法比較長、或較多重複部分的方式入手,再逐漸重構成精要的版本,我很喜歡看老師重構的環節、覺得神奇。
我有買Kindle Basic Training、Intermediate Training Core Data、Instagram Firebase,如果只挑一個會選Instagram Firebase。
內容是應用範圍廣的CollectionView排版和Google的Firebase教學,處理基本的會員登入、雲端資料儲存與串接資料到畫面。
如果讀者還無法想像用Storyboard外的方法刻畫面,可以觀看下面這支影片,看老師示範用兩種方法的過程:
Swift與Objective-C語法
這幾年新課程「全部」都是教Swift,容易忽略掉OC的重要性,很後面我才補這個坑。
假設只是自己開發些應用,Swift就夠用了,但是在找工作時,OC是許多公司需要iOS工程師具備的技能。
兩者的關係我覺得可以用「手排車」和「自排車」比喻。
假設工程師是駕駛、OC是手排車,早期的公司必須買手排車讓工程師駕駛;而蘋果在2014年推出Swift這個新程式語言,像是自排車,讓操作的門檻更低,例如有針對孩童的程式教育遊戲。
因為較容易學習和使用的關係,現在大部分的人都是從自排車開始學,一般情況也就足夠。
但如果公司的專案稍有歷史,也就是已經買了很多手排車停著,有包袱、駕駛還是需要具備開手排車的技能。
所以從Swift入門後、回頭補OC的基礎;就像學完自排車、回頭學手排車,兩者適用同一個道路交通規則。
在我瀏覽職缺和面試的時候,多數公司是使用OC開發、新專案才比較有機會從頭用Swift寫;但就算新專案如此、舊專案還是需要維護的。
我能分享的部分偏Swift語法學習資源。
Amazon評價不錯的語法書,喜歡Swift那本教學風格,書中的練習範例我有寫在Github;簡體中文版,翻譯沒什麼問題。
關於語法,除了口頭的技術問答外,我也有在面試時寫過選擇題。
就是像考卷,每個題目都是一段程式碼,要選出這段程式碼最後執行的結果是哪個選項,記得選項好像是六選一或更多。
容易出錯的地方在以為可以成功執行,但程式碼放在編輯器其實是跑不起來的,有時候用看的看不太出來。
如果讀者沒有頭緒,可以想像在讀一段話時,雖然文字順序有顛倒或錯置,但不影響我們理解它的意思,我們還是看得出這段話想講什麼;但是如果丟到Google翻譯就翻不出來了,因為機器沒辦法腦補,需要規規矩矩的照文法次序輸入。類似這樣的感覺。
課程推薦Udemy的Learn Swift 4 with Bob,提到許多為什麼會有這個設計的思考方向,解釋得很詳盡。
最早會注意到是因為查資料常常翻到他的Medium:Bob the Developer。
演算法這個大坑
工程師的面試,就從技術測驗開始。
我有經歷過遠端共享螢幕測驗、Codility網站測驗、以及用筆在計算紙上寫程式碼的演算法測驗環節;有些公司則不考演算法。
從開始的超級不習慣,到多面試幾次後的還是不習慣但撐得下去,有整個炸掉的、也有因為炸掉很多次後寫得順手成功過關的,長了不少見識。
原來技術崗位的面試這麼硬(;゚д゚)
因為這個要花很長的時間準備,就像前面提到的,都要開始找工作我才發現面試要刷題,也是希望能早點意識到的事情。
傳說中的白板考題倒是沒有實際遇上。
《寫程式前就該懂的演算法》、《演算法圖鑑》都是適合入門的選擇,前者我有寫過閱讀心得、後者推薦下載Algorithms App來玩,透過視覺化學習。
課程推薦Udemy的HWS Swift Coding Challenges,是Swift Coding Challenges電子書書的講解版,我兩個都有買,內容相同、擇一即可。
推薦原因很單純,我需要找「演算法題目+Swift解法」的組合,這個方案完全滿足。
可以替演算法解題開始暖暖身。
寫過一行秒殺解法,但是面試官要知道的是解題思路,請我換個方式解答,我就爆炸了。
在對於演算法有稍微的概念後,就可以開始進入LeetCode的世界了。
可以參考先前分享的什麼是LeetCode?
因為沒有答案,需要靠搜尋網友的分享,才會先建議前面那個有答案的資源先推個進度。
這個,難、很、多。
有些搜尋後的答案擺在眼前都要花時間參透。
「a + b = (a ^ b) + (a & b « 1)」
…(;´༎ຶД༎ຶ`)??
建議寫個十題左右感受一下。
有些雖然可以解出答案,但是運算速度太慢無法被系統接受、還有些數字上限的小坑,平常也不太會留意到。
部分題目蠻吃背景知識,會用到比較少見的方法去思考解法,例如「不使用加減號,完成兩個數字求和」
所以前面有提到,就算上架過作品、沒特別準備還是寫不出來的(°ཀ°)
在跟面試官聊天過程中,也有聽到比較難的LeetCode題目可以馬上解出來、但是簡單題目反而卡住的面試者,就有點小小尷尬。
這邊面試用意主要是看解題的想法,倒不是需要寫出完美到能放在編輯器一次就順利通過的成品。像我遇到在計算紙寫程式碼解題時,也是跟面試官溝通大致的解題方向,以及會怎麼處理,概略地描述,有缺漏的地方面試官會再追問。
如果讀者看到這邊有點難代入,就想像題目是問我們要搭捷運去某間餐廳,回答時候例如從忠孝復興幾號出口出站、出站後要走哪一條路、接著看到便利商店轉彎、直直走就到了;這是概略的描述,聽的人會知道能不能抵達目標、有沒有歪掉。
而編輯器執行需要的是精確描述,比如出站後走200公尺右轉、再向前走800公尺抵達目的地。
網路搜尋會看到重點放在和面試官的「溝通」,例如詢問題目細節、一些比較模糊的地方先釐清。
嗯,雖然講是這麼講…我也先查過。
但我第一次共享螢幕寫程式碼,緊張到近乎全程無聲、連基本語法都寫錯,意識到「要講點話啊」發出的聲音還抖抖的,後來多面試幾次後才比較可以冷靜下來。
要注意的是考試是在編輯器以外的環境測驗,例如Google Docs,所以不能依賴原來Xcode的錯誤提示。
如果讀者不知道Xcode是什麼,他是類似檢查文法的工具,像我們寫英文時單字拼錯或是文法有問題,編輯器會跳出警告,而考試時則像是在筆記本作答,沒有這些提示的輔助功能。
購買的Udemy課程
我幾乎把常見的iOS學習資源都買來翻過、再從中挑選出適合自己的細讀。
每個人程度和背景都大不相同,比較過才知道哪些對現階段的自己有幫助。
如果是比較資深的工程師大大翻到這篇,也可以看看有沒有感興趣的主題,像是用Swift學習區塊鏈等。
購買的電子書
ObjC中國出版的Swift進階,就我看得懂的部分蠻有收穫、推薦,其他進階部分離我有點遠;電子書有後續更新。
大部分都是查資料的工具書。
購買的部分書籍
主要是這幾本,後來新出的書就沒有特別翻了;照片切掉是還沒看完的。
中間《iOS11 App程式設計實戰心法》蠻推的,每年更新;《漫畫!圖解程式設計必學基礎》是本有趣的漫畫書,跟iOS開發沒太大的關係,介紹些程式基礎概念。
裡面iOS書只有一本是ObjcC,就像前面提到新出的書都是基於Swift;所以如果是求職導向,建議比重也分配一下。
關於面試準備,知名的有《Cracking the Coding Interview》、還有知乎看到的《劍指offer》;前者我沒翻過、後者買回來發現是用C++解題,稍微瀏覽覺得比我程度高太多就默默收起來。
結語
希望這些資源能幫助到你。
這篇文章讀完,可能會讓讀者高估我的技術能力。
我也就大約一年左右的經驗,而且還是看課程自己摸索、不是在真正的公司實戰;從我上架的作品來說,也是我從教學資源為基礎,再接著延伸擴展;許多書也就翻翻覺得暫時用不到就收著。
願意購買這麼多資源,為的是讓我短時間打開眼界、以及快速找到經過篩選的內容、並且在一本書看不懂時試著讀讀其他作者的解釋。
對有興趣的範例,就一個一個字跟著敲出來,沒有什麼特別的、只是需要點耐心和時間;每個開發者都是這樣走過來的,只是我把過程留下紀錄。
沒有專業是可以速成的。
還有很多想說的話,但是最後只提一個點就好:在大部分的人生轉折點上,我們都是被選擇的角色。
像是工作求職是被老闆選、參加比賽由評審決定名次、選秀節目由導師決定誰能留下來;我們能做的就是站到那個候選位置,僅此而已。
老闆也好、評審也好、製作單位也好,他們總會經過層層篩選,挑到能滿足需求的人。
就像先前摘要的《一個月就辭職:一個北大女生的求職悲歡》這篇提到:
世界很大,我們很渺小。
一家公司選擇不要我,淘汰了我,能有什麼損失呢?它招到的其他人難道不優秀嗎?難道會不能勝任嗎?
好像並不會有任何損失。 我不是世界的中心,世界也並沒有苛待我。
我的失敗正如同每個人的失敗,是一件雖然不幸,但又再正常不過、完全有可能發生的事情。
過往足跡
沒有路會白走。
就像我這次面試工程師,也有幾間公司問我對產品相關職缺有沒有興趣。
無論結局如何,都能走到更寬廣的世界。
祝福所有讀者。