關於我轉職變成 iOS 開發者這檔事

前言

不要還沒有去嘗試,就疑惑自己是否能完成,R 常常跟我們說,既然要想成為工程師,就要勇於挑戰自己能力的極限以及習得解決問題的能力。

新創公司實習結束後,開始找尋資訊業類型工作,當初的目標是朝向 IT 產業發展,期間也面試過很多家做 SI 、雲端、DevOps 系統維運等類型的工作,但發覺到業界不想選擇沒有經驗的新鮮人, 求職這段時期真的很煎熬,心想再這樣下去不是辦法,因為目前的我沒有作品可以展現。經過深思熟慮後,我決定踏上 iOS 開發者之路,並參與 iOS 實體課程以加快學習過程。

課程學習初期

來到這裏,完全不會有人教你如何寫 Swift ,完全都要靠自己去尋求解答。課程從基礎語法開始,要花一個禮拜的時間看完 TreeHouse 精選的 8 個影片,影片內容全是英文,對於英文苦手的我來說,感覺就像是原本的普通難度被調高到困難模式,好在現在的輔助工具很多,靠著翻譯工具可以稍微降低語言的障礙,但是當遇到專業術語時就無法使用翻譯工具來解答,這時就只能問 Google 大神的幫忙和閱讀網路上專業文章來解決。

課程下個階段,開發出一個電商類型的 App

經過前面 Swift 基礎語法學習完畢後,接下來要踏入 iOS 的領域。

產品頁面     訂單頁面     結帳頁面

要處理的問題就是使用 Core Data ,要利用 Core Data 記錄使用者點擊 Like 的狀態,在 Product 頁面點擊 Like 時, Favorite頁面去刷新資料呈現 Like 的產品,要能夠明確記錄是哪一項產品的元素儲存在 Core Data 中,以點擊 Like 後紀錄產品的 ID 爲主,因為產品 ID 基本上是固定的,就像是你的身分證一樣沒事不會去更動,因此不管後端人員去更動產品資料時,都不會影響到 Like 紀錄,同時也讓我了解到資料庫的設計到怎麼使用 Core Data 的資料存取。

在這個專案中我學會 Auto Layout 設定、GCD、 Delegate、Core Data、JSON 解析、API 串接、使用 Facebook Token 跟 Server 交換 JSON Web Token 去驗證使用者取得資料,到後面的 Debug 技巧,當找不到問題點就是 print 出來觀察資料,在開發過程中壓力真的很大,需要花很多時間去解決問題。

為了解決問題,需要一直嘗試變換關鍵字查詢資料,但最忌諱的就是寫到鬼打牆(思考邏輯不通),自己解決鬼打牆的方式就是先不要思考問題,看個廢片好好放鬆一下,再回來看問題點,設置鬧鐘限制一小時解決眼前的問題,真的無法解決問題就是快點請教前輩,不要浪費時間,每解決一個問題,就是讓自己 Level 提身才有成長的空間。

最終階段,開發自己專案的 App

經過之前的開發訓練經驗,算是存活下來了。
有基礎知識接下來「從無到有」規劃出想做的 App 與 R 討論

手繪搞
手繪設計稿
由於自己並不是 UI 設計師,故用手繪方式將初版的設計稿畫出來。

當設計稿畫完,程式的邏輯判斷和資料處理該怎麼規劃就是頭痛的部分,
因為資料的流向你要很清楚從哪裡出來、從哪裡結束以及你要它做什麼事情。常常腦中想出來要的結果,用程式碼去控制發現根本不是我要的結果。遇到的問題錯誤和需要的功能都會先寫在筆記本,重新思考該如何怎麼執行以及架構上的規劃。

筆記1    筆記2    筆記3

以前沒有手寫記錄的習慣,也漸漸培養起紀錄問題和規劃資料

 

資訊頁面    聊天頁面    地圖頁面
第一版作品完成,第二版會加入視訊通話功能

Find Mend 的構想

這個作品最開始發想源自於,現代人可能忽視心理健康問題,但是實際面對心理問題都不知道該從哪裡去尋求協助,線上心理諮商師可能就是解決問題的方式。
以上構想,開發出這個平台來實現自己的想法,從程式撰寫、資料庫設計、 API 串接、運用第三方套件、 UI 設計皆由自己獨立完成。

Firebase 的運用

即時聊天使用 Firebase Realtime Database 資料庫來儲存聊天紀錄和即時同步資料,從資料結構的設計,與登入串接都在 Firebase 上完成。

包含 Authentication 管理註冊的使用者帳號、登入介面、忘記密碼、Storage 儲存上傳的照片與頭像、Analytics 使用者操作分析紀錄、Crashlytics 當機回報訊息,讓我可以即時了解目前 App 的各種狀況。

Apple Map 的運用

使用台北政府開放資料平台 API 資料透過 JSONSerialization 解析,地圖列表透過 Apple Mapkit 將 解析完 API 資料轉換成座標顯示在 Map 上面。

專案進度管理

在開發自己的專案中採取流行的 Scrum 的方式,每天要回報的事情為遇到的問題,昨天做的事情、今天要做的事,確保專案執行的進度,同時將專案拆解成一塊一塊小功能,評估自己對於一項技術的實現需要花費的時間並畫押時程。

開發順序的思維並非條列式,而是個別完成核心功能,確保每個畫面功能分別都能運作後再組合起來。當開發上遇到困難時,先完成其他項目,順便讓自己跳脫原本被侷限的問題點,之後再回來解決途中的問題,這樣才更有效的解決問題。

 

若前期將時間都花在處理問題上,最後剩下少量時間來完成後半的項目,只會讓自己的壓力更大,造成進度耽擱,因為時間是不等人的!

對不熟習的技術請優先於去安排研究,畢竟是你沒碰過的東西需要大量花去時間去研究。

 

Trello使用

利用 Trello 的分類,將任務切成三大事項,這樣的模式方便自己每天追蹤自己的專案完成度,也可以很容易地完成各項功能。

最終磨煉後結語

其實曾經我也嘗試透過線上課程在家裡自學,但發現效益非常的低,所以才想透過實體課程來增強自己的能力,透過 R 來協助我理解程式的概念。

我在學習階段犯了很多錯誤,舉個例子,在學生時代沒有時間成本的概念,導致在開發上進度嚴重落後,經過訓練後覺得番茄時鐘法適合我來改善這問題。

問問題也是一種磨練,從一開始不知道怎麼問問題到敘述目前的問題都是一個歷程,先仔細觀察錯誤訊息,還是不知道錯誤在哪,再把錯誤訊息拿去 Google 之後還是不知道怎麼解決(超過限制的時間),已經努力嘗試著想要去解決問題,用盡各種方式還是沒辦法解決問題,這時候就請教你的導師或同事說明你遇到的問題點來尋找方向吧!

希望在學習程式開發的朋友不要害怕這些看似困難、讓自己止步的問題,正是因為這些阻礙才能讓自己成長,認識自己的不足之處,學習程式的挫折感非常的大,程式這條路上是滿滿的坑。

當你遇到的問題不斷犯錯,就表示你自己本身沒有警覺到這問題的嚴重性,當有前輩給予你建議,請接受他的建議去解決這個問題點也同時摸索自己解決問題的能力。

以上是我分享的歷程,希望對有意願想轉職的你,能有一些幫助。

本文同步於 Medium

您可能也會喜歡…