iOS 工程師:成功轉職者分享面試心得


本篇原文(標題:iOS 工程師:面試準備分享)刊登於作者 部落格,由 Pala 所著並授權轉載。

這篇文章為接觸 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 函數?

或許沒有,但這無礙我們跟著老師做出實際能操作的應用。

但在面試環節可能就有影響了。

用程式碼刻畫面

這個跟面試沒直接關係,但對於技術成長我覺得很有幫助。

sw01
sw02

Storyboard 是用類似簡報軟體的方式拖拉擺放元素,直覺易懂、現在課程都是從這開始學。

對名詞困惑的讀者,請參考我以前的筆記:初探Xcode 8

在我學習幾個月後、首次放下 Storyboard 完成專案,有種完成里程碑的大大成就感。

我推薦大家可以先跟著 Lets Build That App 頻道的影片練習看看,老師講解得很清楚。

ios-in01

教學影片隨著 Swift 語法更新,有些程式碼舊了,需要額外花時間除錯。

我建議在 Lets Build That App 網站購買課程,老師會確保程式碼在當前的版本可以順利執行,專心把時間投注在學習,跟著架構出內容更複雜的應用。不管是免費還是收費,也是創作者把之前累積的大量教學經驗和回饋,再向上推高一個層次:更有系統的內容、更成熟的教學節奏。

課程會先從好理解但寫法比較長、或較多重複部分的方式入手,再逐漸重構成精要的版本,我很喜歡看老師重構的環節、覺得神奇。

我有買 Kindle Basic Training 、 Intermediate Training Core Data 、 Instagram Firebase,如果只挑一個會選 Instagram Firebase。內容是應用範圍廣的 CollectionView 排版和 Google 的 Firebase 教學,處理基本的會員登入、雲端資料儲存與串接資料到畫面。

ig_clone_4
ig_clone_1
ig_clone_2
ig_clone_3

如果讀者還無法想像用 Storyboard 外的方法刻畫面,可以觀看這支影片,看老師示範用兩種方法的過程。

Swift 與 Objective-C 語法

這幾年新課程「全部」都是教 Swift,容易忽略掉 OC 的重要性,我也是到很後期才補這個坑。

假設只是自己開發些應用,Swift 就夠用了,但是在找工作時,OC 是許多公司需要 iOS 工程師具備的技能。

兩者的關係我覺得可以用「手排車」和「自排車」比喻。

假設工程師是駕駛、OC 是手排車,早期的公司必須買手排車讓工程師駕駛;而蘋果在 2014 年推出 Swift 這個新程式語言,像是自排車,讓操作的門檻更低,例如有針對孩童的程式教育遊戲。

因為較容易學習和使用的關係,現在大部分的人都是從自排車開始學,一般情況也就足夠。

但如果公司的專案稍有歷史,也就是已經買了很多手排車停著,有包袱、駕駛還是需要具備開手排車的技能。

所以從 Swift 入門後、回頭補 OC 的基礎;就像學完自排車、回頭學手排車,兩者適用同一個道路交通規則。

在我瀏覽職缺和面試的時候,多數公司是使用 OC 開發、新專案才比較有機會從頭用 Swift 寫;但就算新專案如此,舊專案還是需要維護的。

我能分享的部分偏 Swift 語法學習資源。

ios-in02
ios-in04
ios-in03

以上是 Amazon 評價不錯的語法書,我喜歡 Swift 那本教學風格,書中的練習範例我有寫在 Github;雖然是簡體中文版,但翻譯也沒什麼問題。

關於語法,除了口頭的技術問答外,我在面試時也有寫過選擇題。就是像考卷,每個題目都是一段程式碼,要選出這段程式碼最後執行的結果是哪個選項,我記得選項好像是六選一或更多。

容易出錯的地方在於,你以為可以成功執行,但程式碼放在編輯器其實是跑不起來的,有時候用看的看不太出來。

如果讀者沒有頭緒,可以想像在讀一段話時,雖然文字順序有顛倒或錯置,但不影響我們理解它的意思,我們還是看得出這段話想講什麼;但是如果丟到 Google 翻譯就翻不出來了,因為機器沒辦法腦補,需要規規矩矩的照文法次序輸入,類似這樣的感覺。

ios-in05

我會推薦 Udemy 的 Learn Swift 4 with Bob 課程,他提到許多為什麼會有這個設計的思考方向,解釋得很詳盡。當初會注意到他的課程,是因為查資料常常翻到他的 Medium:Bob the Developer

YouTube 有他先前拍的影片,你可以先從播放清單點選,了解他的教學風格和口條再決定要不要購買。

演算法這個大坑

工程師的面試,就從技術測驗開始。

我有經歷過遠端共享螢幕測驗、Codility 網站測驗、以及用筆在計算紙上寫程式碼的演算法測驗環節;有些公司則不考演算法。

從開始的超級不習慣,到多面試幾次後的雖然不習慣但撐得下去,有整個炸掉的、也有因為炸掉很多次後寫得順手成功過關的,長了不少見識。

原來技術崗位的面試這麼硬!

因為這個要花很長的時間準備,就像前面提到,都要開始找工作我才發現面試要刷題,也是希望當初能早點意識到的事情。

不過,傳說中的白板考題我倒是沒有實際遇上。

ios-in06

《寫程式前就該懂的演算法》《演算法圖鑑》都是適合入門的選擇,前者我有寫過閱讀心得

ios-in11

另外,我也推薦在此處下載 Algorithms App 來玩,透過視覺化學習。

ios-in07
ios-in08

至於課程,我就推薦 Udemy 的 HWS Swift Coding Challenges,是 Swift Coding Challenges 電子書書的講解版,我兩個都有買,內容相同、擇一即可。推薦原因很單純,我需要找「演算法題目 + Swift 解法」的組合,這個方案完全滿足,讓我可以替演算法解題開始暖暖身。

要注意的是,有些演算法解法取巧,雖然可以解出答案,但過程不一定可以滿足面試者需求。我曾寫過一行秒殺解法,但是面試官要知道的是解題思路,請我換個方式解答,我就爆炸了。

在對於演算法有稍微的概念後,就可以開始進入 LeetCode 的世界了。

ios-in09

可以參考先前分享的「什麼是 LeetCode?」。

因為沒有答案,需要靠搜尋網友的分享,才會先建議前面那個有答案的資源先推個進度。

這個難、很、多

有些搜尋後答案擺在眼前都要花時間參透。

「a + b = (a ^ b) + (a & b « 1)」

什麼?!

建議寫個十題左右感受一下。

有些雖然可以解出答案,但是運算速度太慢無法被系統接受;還有些數字上限的小坑,平常也不太會留意到。

ios-in10

部分題目蠻需要背景知識,會用到比較少見的方法去思考解法,例如「不使用加減號,完成兩個數字求和」

所以前面有提到,就算上架過作品、沒特別準備還是寫不出來的啊。

另外,在跟面試官聊天過程中,也有聽到比較難的 LeetCode 題目可以馬上解出來、但是簡單題目反而卡住的面試者,就有點小小尷尬。

這邊面試用意主要是看解題的想法,倒不是需要寫出完美到能放在編輯器一次就順利通過的成品。像我遇到在計算紙寫程式碼解題時,也是跟面試官溝通大致的解題方向,以及會怎麼處理,概略地描述,有缺漏的地方面試官會再追問。

如果讀者看到這邊有點難代入,就想像題目是問我們要搭捷運去某間餐廳,回答時候例如從忠孝復興幾號出口出站、出站後要走哪一條路、接著看到便利商店轉彎、直直走就到了;這是概略的描述,聽的人會知道能不能抵達目標、有沒有歪掉。

而編輯器執行需要的是精確描述,比如出站後走 200 公尺右轉、再向前走 800 公尺抵達目的地。

在網路搜尋會看到,面試的重點放在和面試官的「溝通」,例如詢問題目細節、一些比較模糊的地方先釐清。

嗯,雖然講是這麼講……我也先查過。

但我第一次共享螢幕寫程式碼,緊張到近乎全程無聲、連基本語法都寫錯,意識到「要講點話啊」但發出的聲音還抖抖的,後來多面試幾次後才比較可以冷靜下來。

要注意的是,考試是在編輯器以外的環境測驗,例如 Google Docs,所以不能依賴原來 Xcode 的錯誤提示。

如果讀者不知道 Xcode 是什麼,它是類似檢查文法的工具,像我們寫英文時單字拼錯或是文法有問題,編輯器會跳出警告;而考試時則像是在筆記本作答,沒有這些提示的輔助功能。

購買的 Udemy 課程

我幾乎把常見的 iOS 學習資源都買來翻過、再從中挑選出適合自己的細讀。每個人程度和背景都大不相同,比較過才知道哪些對現階段的自己有幫助。

如果是比較資深的工程師大大翻到這篇,也可以看看有沒有感興趣的主題,像是用 Swift 學習區塊鏈等。

ios-in12

購買的電子書

ios-in13

ObjC 中國出版的 Swift 進階,就我看得懂的部分蠻有收穫、推薦,其他進階部分離我有點遠;電子書有後續更新。

大部分都是查資料的工具書。

購買的部分書籍

ios-in14

我購買的主要是這幾本,後來新出的書就沒有特別翻了;照片切掉是還沒看完的。

中間《 iOS11 App 程式設計實戰心法》蠻推的,每年更新;《漫畫!圖解程式設計必學基礎》是本有趣的漫畫書,跟 iOS 開發沒太大的關係,介紹些程式基礎概念。

裡面 iOS 書只有一本是 ObjcC,就像前面提到新出的書都是基於 Swift;所以如果是求職導向,建議比重也分配一下。

關於面試準備,知名的有《Cracking the Coding Interview》、還有知乎看到的《劍指 offer》;前者我沒翻過、後者買回來發現是用 C++ 解題,稍微瀏覽覺得比我程度高太多就默默收起來。

結語

希望這些資源能幫助到你。

這篇文章讀完,可能會讓讀者高估我的技術能力。

run_inair
explain-tower

我也就大約一年左右的經驗,而且還是看課程自己摸索、不是在真正的公司實戰。從我上架的作品來說,也是我以教學資源為基礎,再接著延伸擴展;許多書也就翻翻覺得暫時用不到就收著。

願意購買這麼多資源,為的是讓我短時間打開眼界、以及快速找到經過篩選的內容、並且在一本書看不懂時試著讀讀其他作者的解釋。

對有興趣的範例,就一個一個字跟著敲出來,沒有什麼特別的、只是需要點耐心和時間;每個開發者都是這樣走過來的,只是我把過程留下紀錄。

沒有專業是可以速成的。

還有很多想說的話,但是最後只提一個點就好:在大部分的人生轉折點上,我們都是被選擇的角色。像是工作求職是被老闆選、參加比賽由評審決定名次、選秀節目由導師決定誰能留下來;我們能做的就是站到那個候選位置,僅此而已

老闆也好、評審也好、製作單位也好,他們總會經過層層篩選,挑到能滿足需求的人。

就像先前摘要的《一個月就辭職:一個北大女生的求職悲歡》這篇提到:

世界很大,我們很渺小。

一家公司選擇不要我,淘汰了我,能有什麼損失呢?它招到的其他人難道不優秀嗎?難道會不能勝任嗎? 好像並不會有任何損失。

我不是世界的中心,世界也並沒有苛待我。

我的失敗正如同每個人的失敗,是一件雖然不幸,但又再正常不過、完全有可能發生的事情。

沒有路會白走。

就像我這次面試工程師,也有幾間公司問我對產品相關職缺有沒有興趣。

無論結局如何,都能走到更寬廣的世界。

祝福所有讀者。

本篇原文(標題:iOS 工程師:面試準備分享)刊登於作者部落格,由 Pala 所著並授權轉載。
作者簡介:Pala,持續記錄各領域心得,學習筆記每月超過 2 萬瀏覽;在轉職 iOS 工程師路上,意外成為 APP 企劃。
部落格:https://pala.tw/ ;Facebook: facebook.com/profile.php?id=1435728983 。

此文章為客座或轉載文章,由作者授權刊登,AppCoda編輯團隊編輯。有關文章詳情,請參考文首或文末的簡介。

blog comments powered by Disqus
訂閲電子報

訂閲電子報

AppCoda致力於發佈優質iOS程式教學,你不必每天上站,輸入你的電子郵件地址訂閱網站的最新教學文章。每當有新文章發佈,我們會使用電子郵件通知你。

已收你的指示。請你檢查你的電郵,我們已寄出一封認證信,點擊信中鏈結才算完成訂閱。

Shares
Share This