[訪談記錄] 自身興趣和實作 在工作上找到歸屬感與成就

AlphaCamp 第二學期的第三份訪談,幸運的請到一位自高中時期認識的神人朋友,來聊一下他的程式學習歷程。

interview laptop cafe


相關訪談


1.什麼契機下開始接觸程式?

小學的時候有去資策會上過 RPG 製作大師的課程,使用這個軟體來製作 RPG 遊戲,算是寫程式的入門吧。其中我覺得比較重要的是「開關」、「事件」系統,讓同一個 NPC 能因應玩家的遊戲進度,而有不同的應對。除此之外也有參加國語日報舉辦的 Visual Basic 課程,這才算是進入比較正式的程式設計的領域。Visual Basic 在 UI 介面設計上的所見即所得相當直覺,很適合作為 GUI 應用程式的入門。
雖然高中的電腦課有教授 C++,但是真正深入學習程式設計應該是大學之後了,其中讓我印象最深刻的應該是網路與多媒體實驗。它是系上十選二選修實驗中份量最重的實驗之一。我在這個實驗中主要使用 C# 進行開發了一套即時通系統、Windows Phone 手機遊戲、Kinect 體感互動遊戲,讓我對於 GUI 程式設計開始有比較深入的認識。而我也以此為基礎,開發了一些 Windows Phone 的應用程式並且上架讓人下載使用,獲得了些許的成功。
碩士班的時候加入了分散式系統實驗室,畢業論文也是分散式系統相關的主題,主要是透過規劃快取的方式讓加速分散式系統的資料處理速度。一般來說,處理已經存在於記憶體內的資料相對於處理在硬碟中的資料速度來得快,因為記憶體的速度遠快於硬碟,但是記憶體的容量有限,因此如何有效的運用記憶體空間便成了重要的課題。在我的碩論中提出了如何有效規劃快取的方式,而也成功的減少了資料運算的執行時間。

2. 目前工作的產業及職務內容?

目前仍在學,故以之前在 Facebook 的實習為例。我在 Facebook 內屬於後端的組別 Realtime Data Team,其主要工作就是監控 Facebook 內部的軟體服務、硬體資源。舉個例子來說,我們會在內部服務中蒐集數據,例如服務的 CPU、記憶體用量等,將之顯示於即時圖表上,此服務開發者可以設定一些警告,例如當 CPU 用量達到 90% 以上時就會發出警告等。我們組內有很多服務跟工具來進行整個 Facebook 基礎設施跟內部服務的監控,我們的工作就是維護這些服務、並且進行更進一步的開發和修正。

3. 堅持在工作上的動力是什麼?

除了薪水(笑)之外,大概是成就感吧。不論是從無到有把一個服務、產品做出來,或是針對現有程式在效能上、使用上的改進,每達成一項任務都是很有成就感的。


4. 你認為大家普遍對工程師工作的誤解是?

或許台灣人對軟體工程師的外表普遍是這樣理解的:
engineer IT不過在美國(尤其是矽谷)的軟體工程師大概如下文所描寫的:T-shirt、帽T和牛仔褲,且熱愛他們的工作的一群人。
“The T-shirts, hoodies, jeans — you still see a lot of that, especially with coders and engineers,” said one tech contractor who works in Silicon Valley. “They’re really proud of where they work, so there’s a lot of company logos.” Lee, A. (2019). The Evolution of Silicon Valley Chic.

5. 前職需要與他人大量接觸或是合作嘛?

大量合作應該是不太會,但是和組內的合作不會少。首先先介紹一下開發流程:
1. 寫一段新的程式/修改一段程式
2. 測試
3. code review
4. merge

通常在開發新的服務或是在現有的程式中要引入別組開發的服務時,往往最快上手的方式就是直接去問要如何將他們開發的服務整合進來。Facebook 有個員工專用內部網站,可以直接到不同組的群組中發問,而該組在 oncall 的人會負責回答。除此之外,如果修改到別人的程式碼時,在 code review 時往往會需要原始作者加入來確認修改不會影響到現有的功能。

6. 如何認定自己已經掌握一個新技術?

我自認沒有掌握過什麼技術,只能說有這些經驗而已。
我覺得要能夠掌握一個技術,應該是要從最底層到最頂層都要能完全了解,而最好的方式應該就是從頭開始自己土砲,畢竟全部都是自己寫的。但現在的環境有太多現成的東西可以使用,從頭自己土砲相當於重新打造輪子,不但沒必要且費時。
不過在使用這些現成的輪子時,往往會有很多細節藏在你看不到的地方。畢竟這些輪子並非自己所寫,常會有意想不到的狀況發生。

按讚加入粉絲團

延伸閱讀