在 CMoney 實習的那段日子 | Software Engineering Intern 面試、介紹、吃喝玩樂及實習心得

Brian Konr
12 min readFeb 17, 2023

--

不知不覺也在 CMoney 實習了將近 8 個月,真心覺得這段旅程對我來說是不可多得的寶貴經驗。加上之前找實習都受惠 於一大堆網路的心得文,也是時候該回饋這個社群了(?),因此這篇文章會介紹 CMoney 的申請動機、面試流程及實習心得,希望能夠幫助到系上學弟妹以及同樣在軟體開發領域想要找實習磨練實力的人~

申請動機

坦白說,當初在找實習時我沒有考慮過 CMoney,一方面是當時有其他在面試中的機會,一方面是我也不知道這家公司是在做甚麼的…(因為我沒在理財投資,但如果你有的話應該會聽過理財寶,就是 CMoney 家的產品)。而會接觸到 CMoney 的實習,是因為 CMoney 的 CTO Jason 在 104 上敲我,當時想說面試看看也沒有損失,所以就與 Jason 約了後續的面試時間。值得一提的是 Jason 可能也知道大學生如果沒在投資可能就不知道他們,所以在走正式面試流程前還特地花了 30 分鐘跟我開線上會議讓我了解這間公司在做甚麼未來我進去的話可以接觸到甚麼技術。從這邊就可以看出 CMoney 在用人用才上有他們自己的一套準則,而且要一個 CTO 願意花時間跟還不確定會不會繼續面試的學生介紹實習計畫,代表他們也很重視這份實習,後來實習後也驗證了我的想法,每天上班都深切感受到主管、夥伴對我的照顧,真是太感動ㄌ,佛心公司無誤。

面試流程

與 Jason 聊完後就安排了後續的流程,包含筆試跟面試。我當初是先筆試再面試,但 CMoney 好像也不會因為筆試寫差了就不安排後續的面試,會等到兩個都結束後再綜合評估。

筆試

這邊的筆試不是丟 Codility 叫你上去寫白板題,而是偏比較邏輯數學(?)的那種測驗。簡單來說就是考一些邏輯跟簡單的數學題,印象比較深刻的是有考了類似費米推定的問題,像是請你推算在台北市每天有多少人喝咖啡或是 PChome 一天的營業額會是多少,蠻有挑戰性也挺有趣的。

面試

這真的是我印象超深刻的一場面試,因為當天我原本打算在家跟面試官線上面試,但就在面試前半小時前我遇到了驚天動地的台灣之星大斷訊,在家裡瞬間變得跟原始人一樣,連電話都打不了,真的是差點哭出來。於是只好飛奔到附近的咖啡廳連他們的網路面試...。(阿不就還好咖啡廳有網路,不然也不會有這篇文章了 = =。)

回歸正題,自我介紹完就是面試官俐落的發問時間,問了許多 OOP, 資料結構以及 的問題,而我因為完全沒有準備,之前也沒好好練習 OOP,所以答得蠻爛的 = =,一開始還想要硬擠出一些我想得到的專有名詞回答,後面就直接放棄(:不好意思這題我不太會)。最後就是一個白板題是給定一個牌堆,希望我實作一個把牌洗亂的函數。現在想覺得很簡單,但面試時加上前面一大堆答不出來的問答題,真的是心態炸裂沒辦法好好思考,這題也解得很爛,面試官看起來不甚滿意,然後就結束面試了。結束面試後我靜下心來想一下剛剛的白板題,發現就很簡單,真的是有夠不甘心,所以我馬上重寫了一份,然後透過會議資訊找到面試官的信箱寄給他。當時也不是想著要補救糟糕的面試表現甚麼的,但就是覺得自己應該可以做得更好,結果沒想到這一個我不以為意的舉動,成了我能夠進入 CMoney 實習的最大功臣。

我先寄信向面試官說明我的想法,也沒預期他會回覆,沒想到過不久後面試官就回我而且還給我很多回饋,包含記憶體配置問題、設計得太複雜反而讓人不易理解等,還沒進公司就已經先被 code review 的概念(回想起來也覺得有點荒謬 XD)。我也馬上照著面試官的建議改了第二版傳給他,面試官就回覆我說這個寫法挺好的,實務上也會用這樣來解決,算是結束了這一回合(merge request has been accepted?)。

當天下午我就接到 CMoney 工程部的主管打給我,大致上就是:哎呀雖然你的面試表現挺差的,但你最後那個來回分享想法的過程我們挺欣賞的,就賞你一個實習機會吧(謝…謝謝)。我是真的受寵若驚,沒想到 thank you letter 在某些時候會展現意想不到的力量(像是被石鬼面刺到的迪奧…懂的都懂),同時也對 CMoney 的好感更好ㄌ,於是就開心收下 offer,準備開啟我的實習之路啦!(可能會有人好奇我不是一開始說我還有另一個面試中的機會,恩…恩對就是這樣,別問了!!)

不甘心地寄信給面試官 = =
面試官的迅速回信…真的是受寵若驚阿阿阿

Takeaway

  • 線上面試真的要確認好設備,然後隨時準備 plan B 以防網路等不可抗力因素造成的問題
  • Software Engineering Intern 的職務多半挺看重 OOP 的概念,雖然因為比較進階,擺在資管系大一程式設計最後的章節,所以沒考。但學弟妹你們一定要好好準備阿…(OOP 三大重點:Inheritance, Encapsulation and Polymorphism 務必精熟!)
  • 面試跟考試很像,就是某種層面的心理戰,因此儘管可能你在一半時覺得自己已經 f*cked up,但還是要穩住然後展現自信,這樣才不會影響自己後續的回答,以免搞砸原本該會的東西!(不會就算了,但明明你會但卻搞砸才是最後悔的)
  • Thank you letter 真是個好東西,大家可以視情況使用(?)

實習內容

在 CMoney 的實習過程可以分三段:新人訓練、專案協作與部門實習。接下來我會一一介紹:

新人訓練

CMoney 的新人訓練共有兩個關卡,設計上都挺有巧思的。而且公司真的超用心,都會為每位實習生指派一位前輩當關主協助我們進行 code review 並在卡關的時候給予我們一些建議。以下分別介紹兩個 SWE Intern 會接觸到的訓練關卡:

百萬筆股票交易資料的讀檔及查詢
因為公司使用 C# 開發,而普遍資訊領域相關大學生如果沒特別用 Unity3D 寫過遊戲,應該都沒有接觸過這個由 Microsoft 開發的程式語言。因此公司的第一個新人訓練就是用 C# 寫個讀一百萬筆股票交易資料的 csv,並且設計簡單的 UI 供使用者依照不同股票做成交量、價格相關的搜尋與計算。而因為這個題目相對挺簡單的,因此我們也被規定程式要在一定的時間內跑完,也就是要考慮我們使用的各種方法其時間複雜度是否合乎標準。這也讓我學習到善用 multithread 及演算法設計來減少不必要的時間浪費。

不使用 if-else 等 condition statement 完成一台具備完整功能的計算機
在開始講下去前,要先說明這邊的不用 if-else 不是指我不能用 if-else 來判斷使用者按下甚麼鍵,而是當你知道使用者按下一個鍵,舉例:數字 5 後,你的程式應該要能夠不使用判斷來完成後續的動作。為甚麼這件事很難呢?因為當你按下 5 後,你必須要先知道你前一個按下的是甚麼,才能做後續的事情:

switch (前一個輸入)
{
case: 數字
// 要把 5 append 到目前的數字字串中
case: 加減乘除
// 這個 5 是新的一組數字,要跟前面的數字字串做加減乘除
case: 等號
// 這個 5 是新的一組數字,而前面的流程已經完成了,要恢復初始狀態
}

如果我們像上面一樣用 condition statement 來解決的話,就會造成很多巢狀 if-else 的發生,整個程式碼會變得難以閱讀及維護,而且我們會在很多個地方都做重複的判斷,這樣或許可以解決問題,但絕對不是個好解法。因此我學習到利用 OOP 的精神搭配酷酷的 design pattern 設計我的解法,並畫了 class diagram 幫助自己理解各 classes 間的互動關係。如果沒有這一關,我可能還是個只會紙上談兵,說說 OOP 大道理卻不知道怎麼運用的小菜雞。也謝謝公司設計得超好的關卡,讓我能感受到進步的快樂。

這邊介紹的兩個關卡都是屬於個人的訓練,我們不會與其他人合作開發。但因為公司都會安排實習生在同一間辦公室,所以跟我同期進來的電機系學長就成了我每天瘋狂討論的對象。我們那時候常常就是進辦公室後倒了杯牛奶、拿個餅乾,就開始在白板上亂寫亂畫,討論怎麼改善效能、怎麼運用 OOP 在關卡中…。回想起來真的挺有趣的,有困難時可以一起討論,不只吸收到不同的想法,也讓我們實習生變得很熟,每天在辦公室都很歡樂。這個經驗實屬珍貴!

有興趣的人可以看一下我如何用 state design pattern 設計計算機

如果對 design pattern 有興趣的人,也可以參考這本書:Head First Design Patterns [Book] (oreilly.com)

專案協作

你以為在 CMoney 就都是一人單打獨鬥、孤軍奮戰嗎?不!在完成個人的新人訓練後,我們同期的實習生就會被指派一個專案要共同協作完成。我們當初收到的任務是要將公司的人工招募流程以自動化方式取代,因此我們需要設計一套包含 web crawling, UI, Data 以及 Email Service 等等的系統。公司使用 Scrum 來輔助開發,因此我們每天早上都會有 stand up meeting 分享資訊,讓彼此能夠了解對方的進度。而關於串接相關,我們則會再各自敲 meeting 做討論。而因為 agile 的精神,我們常常會有新的需求要開發,有些會影響到原有系統設計,因此需要做系統的重構,這過程實在是非常痛苦阿…但感受到自己有在進步的感覺還是挺快樂的…,這就是痛並快樂地活著嗎(?)。總之透過這次的專案,我算是從零到一真正了解開發產品的流程及過程中要注意的眉眉角角,也跟夥伴們變得更好,最後也算是順利完工啦!

經過激烈討論的重構系統互動之混亂白板

部門實習

在完成基本功的磨練跟 cowork 練習後,就準備進入不同部門實習啦!CMoney 工程團隊有很多部門,包含社群、股市、資料、服務等等。選組前主管也召集了我們實習生進行各組的說明,也邀請各組負責人和我們分享進組可能會接觸到的任務。我選擇的是股市組,負責協助重構股市組既有的服務,讓整個流程變得更簡潔俐落。過程中學習到如何利用 Producer-Consumer pattern 設計服務,也接觸到 Elastic Search 學習紀錄 log(這真的是超寶貴的經驗,每個服務都應該要記錄 log,避免發生問題時沒有辦法 reproduce error)。唯一比較可惜的是,我當時與其他兩位實習生一起進股市,但開學後我們的時間幾乎都對不上,因此在開發上會變得綁手綁腳,沒辦法隨時掌握對方進度。不過後續和主管反應後主管就讓我們改成負責個人的任務,避免了難以溝通討論的窘境。雖然損失了部分協作的經驗,但也讓我們後續的實習過得更順利。

吃喝玩樂

好了,嚴肅的部分已經結束ㄌ各位。現在是,吃喝玩樂時間!

Costco 零食 & 鮮奶喝到吐

最令我難忘的就是公司的鮮奶ㄌ…。每天走進辦公室一定要給他先倒上一杯,配上 Costco 的堅果,就是一個免費的客家早餐(誤)。CMoney 不是走販賣機路線,而是比較暴力地每周補貨幾大包的 Costco 零食配上超多罐塞在冰箱的牛奶,但雖然這聽起來很多,只是我們之前實習生人數實在太多,大概 10 個男生全都擠在同間辦公室,所以也有發生過鬧飢荒的問題,這時我們就會(組隊去其它樓層爆拿)克制一點,等待下次補貨的到來。

不定時餐聚及 Team Building

公司為了讓我們實習生不要與正職有太大的隔閡(?),不時會舉辦餐聚讓實習生與正職夥伴可以交流、互相認識。除此之外工程部也時常有 Team Building 的環節,會去一些保齡球館、雷射槍戰玩(雖然我沒去過),也會舉辦球類競賽關心我們的健康(抱歉我也還是沒去),感覺就是一級棒很好玩的啦!

超讚超讚超讚的升降桌

這個絕對是必須得提的福利,在 CMoney 工作真的是不用擔心坐到腰酸背痛,因為每張桌子都是升降桌,太狠了…。真的是愛調多高就多高,適用場景就像剛吃飽不想坐著就可以升高桌子站著工作,或是坐到很躁想要站起來寫程式,都可以隨便調。我只能說,yyds 升降桌。

升降桌,真享受

致謝與結語

這次的實習真的是段非常奇妙的旅程,當初誤打誤撞進來後我得到了遠比我預期多超級多的收穫,而我也想在這邊特別感謝我的主管 — Shelly。Shelly 真的是我們實習生的媽媽,我們有甚麼問題都是 Shelly 一手解決的。除了行政上的問題,Shelly 也會在百忙之中抽空到我們辦公室看看我們有沒有遇到甚麼棘手的問題,甚至常常看到一半就幫我們上了堂資料結構或演算法課程。平常也沒有甚麼架子,也很容易相處不會有上對下的那種怕怕ㄉ感覺,真的是我非常敬佩的一位主管。我真的很感謝 Shelly 提供我們實習生非常大的彈性,我們有甚麼想做的、想學的,只要是合理的,Shelly 都會非常積極地協助我們找尋公司相對應的需求,讓我們進行開發、學習。

(我與 Shelly 的合照。雖然說是媽媽,但其實 Shelly 很年輕,根本像跟另一個實習生拍照)

最後,真的非常感謝看到這邊的你們,因為我平常可是懶得打字的,打這麼多就是希望看的人最好就給我好好看完:)。我也想送給目前對職涯還不太確定或有想要找實習但不知道該投遞甚麼職位的讀者一句話:

Every Choice You Make is the Right Choice

我當初無意地接受面試,做了正確的選擇;我不甘心地重寫一次題目寄 thank you letter,做了正確的選擇;我選擇到 CMoney 這家我之前從來沒聽過的公司實習,做了超級正確的選擇。

正是這次的經驗,讓我體會到每個選擇到頭來都是成就自己的養分。所以我相信只要準備好自己,做出當下你認為對的選擇,那麼最後它一定能讓你獲得你預期之外的收穫~所以各位覺得對就衝了吧,there’s nothing can hold you back, peace!

--

--