說明
此篇為實習心得的技術篇,主要記錄實習期間負責的工作內容以及學到的技術,還有一些對於工程師這個職位的新想法。
若想要閱讀其他實習心得,點擊總覽觀看其他篇章!
為保護當事人隱私,文章提到之人名皆有替換及修飾內容,請勿對號入座!
第一階段 - CI / CD
在面試的時候,面試官就有提到我的工作內容可能不是我想象的開發 APP,而是偏向維護性質的 CI/CD。 所以在一開始我做了一個入職前的作業 [練習] GitLab CI/CD ,瞭解到除了開發以外,還可以使用其他工具來加速開發,這是我第一次碰到 DevOps!
入職後的第一個作業是寫一個簡單的天氣 APP - weather,串接中央氣象局的 API 並將氣溫及天氣概況展示出來,也可以將常用的城市加到最愛並且快速瀏覽天氣資訊。在這作業中學到了 Jetpack Compose 學習如何用宣告式的方式鐫刻使用者畫面、Flow 另一種傳遞方式的資料有別於 LiveData 可以更方便的更新及使用資料,還有 MVVM 的架構,並在開發的過程中使用版本控制 Git 以及 Gitlab 管理專案,學習如何階段性的開發以及解決需求。
在完成這個作業後,迎來的是另一位 Mentor,也是實習期間合作最久的一位同事!Henry 主要負責的是 Android 開發以及 CI / CD 的建置與維護。
所以我再來的工作是維護主要專案的 CI 流程,從 Gitlab 的 .gitlab-ci.yaml
模板撰寫複數個 job,也分成很多 stage (lint, test, build…),還需要針對順序以及 pipeline 成功與否來決定下一個階段的工作是否運行,雖然這個建置的完成度很高了,但還是有些需求需要改動,像是公司內部網域更改或是專門跑 CI 的機器掛掉了,所以需要看懂這些流程以及模板,才知道要修改哪些地方!
第二階段 - Windows Development
接下來迎來我的第二位主管,因為組織改革的因素,我與 Henry 一起被派到新的 RD Team,與開發 Windows 的同事待在同一個部門。
上一位主管是隸屬於 Android Team,這一位則是前 Windows Team 的,一開始我一樣是負責主要專案的 CI 流程維護,直到跟 Mary 一對一面談後,她理解我想要開發也喜歡寫程式研究東西,所以請我研究 Windows 的 CI / CD,這部分不難,因為跟 Gitlab 的差不多,只是差在平台不同而已,後來有成功建立 Azure Pipeline 包含了簡單的 WPF 程式以及單元測試的 pipeline。
後續學習如何在 UWP 與 WPF 中撰寫 Unit Test,因為沒有學過這兩種 Windows 視窗開發的程式框架,所以花了一些時間學習,但因為對於 C# 不熟以及本來就對 Windows 沒興趣,學習的過程變得滿辛苦的。
不過 Mary 是一個待人溫柔、很溫暖的一個人,在 1 on 1 會議中,我提到了自己未來出路的抉擇以及自己的理想與現實相互背離,她也給了我很多的想法與雞湯
Mary:雖然我跟你都是會猶豫不決的人,但沒辦法,你一定要做出選擇,趕快行動吧!
接下來,我遇到了第三位主管 Ryan,他是一位從後端起家的工程師,到現在管理許多單位並富有技術概念的資深主管!
第三階段 - Android Development
在我與 Ryan 一對一面談中,我分享了自己的 side project,說明自己很喜歡寫程式,也向他詢問學歷與工作使否正相關的問題,他也很大方的自身經歷,完全不藏私。過程中,我還闡明了自己還是喜歡 Android 開發,於是他就說了一句話
Ryan:與其做不喜歡的事情,自己做起來很不起勁,不如就做想做的事,接下來你也來開發吧!
當下聽到覺得非常不可思議,一方面覺得這就是我期望的工作內容,應該要好好把握這個機會;另一方面覺得自己的能力可能不夠,無法勝任。
Henry:你還是想做 Android 開發嘛!那我們一起加油!
在 Ryan 與 Henry 面談後,他走出來跟我說。非常謝謝 Ryan 的認可!也謝謝 Henry 容忍我!
所以再來負責 Android 大大小小的專案開發與修復 bug,有獨自開發的功能,也有接著別人的程式碼繼續開發的議題。
在這階段我學到了團隊開發 Git 的使用,因為同一個版本有許多功能同時進行開發,所以需要使用 Git 來做版本控制,並在 Gitlab 中新建 Issue 並建立 Merge Request,在將該 branch 抓下來繼續開發,其中寫的程式要有架構、命名要明確、多餘的程式碼不該留下來,有許多細節需要注意,也因為之前獨自開發用到的指令並不多,也不清楚多人開發流程長成什麼樣,做錯滿多事情,也問了很多問題,而開發完後 GameJob 另一位 Android 工程師負責 review 我們寫的程式碼,他給了我很多建議,也補充了很多多人開發中的眉眉角角,非常謝謝他!
GameJob:不用謝!你來實習就是來學東西的,盡量問!
除了 Git 的工作流程,我還更認識了 Android MVVM 的架構,其中也獨自開發了生物辨識鎖定的功能開發,學習到了 Flow 的正確用法、submoudle 的開發與更新、Shared Preferences 與 DataStore 的使用情境,還有 Firebase Remote Config 的流程設計與 A/B testing …等進階的功能。原來一個 APP 不只有功能的實現,也需要在程式上埋點並將這些資料提供給其他部門做分析,讓產品能夠命中客群,使它利益最大化。
後來又換了第四個主管,因為兩個部門的職務有部分重疊,所以決定合併部門,交由 Victoria 與 Ryan 共同管理。Victoria 是一個人脈非常好又敢說話的主管,也常常跟我分享前公司的經驗還有一位工程師需要有什麼樣的能力。
Victoria:你是一位積極學習的人,會彷徨代表你對自己有期待,失敗中學習經驗是很難得,加油!
工程師的職責
在這期間中,深刻的感受到工程師不只要有技術力,因為會遇到不同部門的同事需要釐清需求,還要有非常好的溝通能力。每天早上的早會要報告目前的工作進度以及接下來要做的事,把自己的內容濃縮並用大家都聽得懂的方式,也是一種學問!我也從話都講不好的菜雞變成能不靠 Mentor 幫我解釋的半位工程師了!
除了溝通能力,還需要有敏銳的洞察能力以及一定的膽量,在實習中一直想要接觸其他領域的同事,但是沒什麼膽子跟立場去認識其他人,OldStar 知道了這件事還跑去跟 Henry 說,叫他帶我認識其他人😂,她也常幫我站出來說話,很佩服她也很感謝她!
結語
要感謝的人太多了,有提到的人說的話是我特別印象深刻的,沒有提到不要難過,我都把你們放在心上!
下一篇是 社交篇 主要介紹職場文化及一些眉角,還有可以多做什麼融入一個環境!