轉職半年了,從 AppWorks School 畢業的 iOS 工程師還好嗎?Batch#14 iOS Class

Morgan Yu
AppWorks School
Published in
6 min readAug 31, 2022

從 School 畢業後,我進入了做影音串流產品的公司,公司有開發 iOS 跟 tvOS 的 App。剛進公司一個月時,主管安排了一項比較複雜的工作給我:「tvOS 15 的 Player 有做滿大的改版,那就麻煩 Morgan 研究、向大家報告吧!」這邊的「大家」是指包含 RD、PM、UIUX 和 QA 等 team 在內的全體技術團隊。

「等下!我一個入職一個月的小嫩嫩,要報告技術題目給整個團隊聽?!」這話我當然沒說出來,只能在心裡吶喊,表面還是微笑點頭回應「好喔!」,接著啟動在 School 培養的焚膏繼晷研讀模式。經過幾個禮拜的準備,報告順利落幕,好不容易放鬆下來的我,仔細一想才發覺,原來在 School 期間,我不只學會了寫 code,還培養了這麼多軟體工程師所需的能力。

除了找資料,更懂得找到正確的資料

既然是報告新功能,那當然得研讀很多資料跟文件啦。雖然 tvOS 15 Player 改版主要反映在 UI 畫面上,但背後涉及了很多串流相關的知識,例如 HLS 跟 m3u8 這種在串流產業才有的東西。 面對毫無頭緒的新名詞,當然是馬上使出軟體工程師的絕招「Google」啦!

在 School 時,我的班導師派派有個口頭禪「自己查」,如果同學沒經過思考、隨便找他求救發問的話,一定會被這三個字打槍,簡直把我們找資料的能力培養到淋漓盡致。

「自己查」也是 School 很著重培養的實務能力,在培訓的第二個月,我們必須根據引導,一步步寫出一個功能完整的電商 App,這些引導內容有限,有足夠的線索讓我們知道「該做什麼」,卻不會直接告訴我們「該怎麼做」,讓我們善用之前培養的寫 code 基礎,搭配自己消化的資料,寫出更進階的功能。

在 School 不斷寫 code 的半年期間,我從一開始隨便複製貼上 StackOverflow 的解答,到後來融會貫通,自己因應情況修改使用,甚至更習慣直接閱讀理解 Apple 釋出的文件。

像是這次報告的 tvOS 新功能,因為太新,基本上沒有什麼討論資料,就得閱讀官方文件。而平常工作討論功能需求,也需要工程師自己先做找資料 survey,以便在跟 PM 與設計師討論時能更順利。

腦袋爆炸!寫 code 寫到累翻的同學們

學會寫 code,還得學會看懂別人寫的 code

既然是介紹 tvOS 15 的新功能,那當然就要實作在真的 App 上 demo 給同事們看。

Apple 很好心,文件大多有 sample code,複製貼上就能做個七八分像,但如果是要把 sample code 移植到團隊現有的 code base 上,做出 demo 功能,就沒那麼容易了,因為公司的 code 通常有自己的架構,要把 demo 功能融入既有的 App,就得先理解既有的 code,這就涉及到「讀 code 理解」的能力了。

除了培養實作能力的電商 App 和個人專案,School 也有類似「讀書會」的學習階段,我們會用指定的方法實作功能,或是研讀技術主題,來拓展我們對不同理論的認知。雖然不可能理解每種理論(軟體世界學海無涯),但至少對常見的設計架構能有初步認知,在讀公司的 code 時就能知道「原來這邊一堆 protocol 是在做依賴注入啊」,或是「喔喔這邊是用 ViewModel 作為 Model 跟 View 的橋樑」,以至於我在寫 demo 功能時比較順利一些。(上述為某兩種設計模式)

寫 demo 功能只是用到讀 code 能力的眾多機會之一,開發新功能也需要盡量讓新的 code 完美融入既有 code base,而常見的解 bug 更需要先花時間看懂 code,才能找到問題點下手解決。

不只坐在螢幕前寫 code,還要上台講 code

想不到吧,軟體工程師還要上台 present!我的這次報告就是個例子,從技術研究、開發 demo 功能、製作簡報到上台報告,都必須自己來,讓我想起在 School 開發個人專案的日子。

在畢業前,每個學員都會開發個人作品,我們稱之為「個人專案」,iOS 的同學還需要把作品上架到 App Store 才算完成。個人專案的一個月裡除了埋頭寫 code,每個禮拜都得向導師跟同學 demo 作品進度,最後完成 app 時甚至要向全校報告,以及錄 demo 影片給 hiring partner 看,在有限的時間內介紹作品,簡直完美複製了工作時 tech sharing 的情境。

Co-work 專案成員們討論中

他為什麼這樣問?軟體工程師之間的溝通

好不容易熬到報告結束,緊接著的是 Q&A 環節,不同專業的工程師提問的方向都不一樣,例如後端負責串流技術的同事就會問到:「畫面上這個『HD 標籤』是怎麼顯示的?」第一秒我其實有點反應不過來,想說「後端同事幹嘛問 UI 的問題?」,但轉念一想就能理解,因為他需要知道「新的 tvOS Player 怎麼判斷影片畫質是 4K、HD 或者其他」,才能處理好串流影音的資料內容。

這讓我聯想到 School 為期一週的 co-work 專案,我跟 iOS, Web Front-End 和 Back-End 學員合作,針對電商產品開發衍生功能。這次 co-work 讓我有機會了解其他工程師在做什麼,也模擬了真實職場的協作情境,例如當我發現 iOS App 首頁商品資訊載入失敗時,除了檢查 iOS 的 code base 外,也會詢問 Web 呈現的情況,確認同樣的資料在網頁上是否正常顯示,最後找出原因是 Back-End 提供資料的型別問題,對「分類問題」跟「與工程師協作」有了初步認知。

這種工程師跨 function 溝通的情境在實務上很常見,例如 iOS 工程師在解 bug 時,通常會想知道 Android app 有沒有發生一樣的問題,或是在開發新功能時,也需要理解 Back-End 開出的 API 文件。

畢業了!還沒體會到工作辛苦,笑得開懷的同學們

太多了,說不完

當下甚至到剛畢業時我都沒有意識到,而是在工作後才發覺,School 的這半年真的收穫滿滿,除了上面這些,還接觸了工作方法(例如 scrum 與 kaban 等敏捷開發流程)、演算法和 Linked List 等理論(感謝導師們的 Friday Talk),最重要的是認識了一群朝九晚十同甘共苦的夥伴(以下省略兩萬字)。

我在 2021 年初時寫了幾項「今年不做的話,會後悔的事」,其中一項就是進 School 學軟體開發,沒想到轉眼來到 2022 下半年,已經從 School 畢業、成功轉職半年有餘。不過重來一次的話,我不會再把 School 列進「今年不做的話,會後悔的事」清單,而是改為「這輩子不做的話,會後悔的事」。

--

--