作者penut85420 (埃及貓神a奴僕)
看板NTOU_CS
標題[閒聊] 分享這一兩年的日子
時間Sat Nov 19 03:28:48 2022
剛進研究所的時候非常興奮
有自己的機器、IP
有超寬闊的實驗室還附帶一張床
一整天的時間都是自己的
想寫什麼程式就寫什麼程式
想研究什麼技術就研究什麼技術
前一年半的碩士班生活真的過的很快樂
後一年半的碩士班生活壓力開始逐漸倍增
身邊的同伴都一個接著一個畢業
來自家裡的壓力急遽上升
寫不完的論文、做不完的實驗
日夜顛倒的生活已然習以為常
看到太陽出來了就知道該去睡了
最後半年,疫情爆發
拜疫情所賜,我得以居家做研究
而且也不會有突如奇來的訪客打擾
算是在喘不過氣來的生活裡一點點的救贖
到了最後衝刺論文的階段真的是非常可怕
每天都是兩罐三罐偉恩咖啡,紅牛當水在喝
日夜顛倒的作息甚至趨近於規律
感謝我媽煮的好幾鍋咖哩
三餐不用煩惱,直接咖哩微波下去就有
寫論文寫到崩潰痛哭什麼的
後來我才知道很多人都經歷過
到了距離口試的最後幾天
我的心態突然變得十分平靜
彷彿過去將近二十年來的學生生涯
都是在為這刻做準備
口試當天,我的自信心爆棚
報告順暢,對答如流
最後口委宣布我通過口試了
我的內心卻覺得絲毫沒有任何波動
只覺得努力這麼久,通過也只是應得的
其實口試結束後,我已經將近 20 個小時沒睡覺了
但我卻絲毫沒有睡意
繼續看著電腦
但我不知道要做什麼
就在上一刻,我三年來的目標終於達成了
那我接下來要做什麼
沒想到毫無目標竟是如此的可怕
抱著這股空虛感,一過竟是三個月
已經畢業的我,選擇當個家裡蹲
試圖嘗試當個另類的遊戲實況主
結果卻是遭到圖奇永 Ban 收場
===
收到圖奇的永 Ban 後
我也乖乖的打開 104
開始撰寫我的履歷
一開始就想投投前後端工程師什麼的
一方面對研究有種心疲力盡的感覺
一方面覺得混口飯吃就好
對人生實在沒什麼太大的夢想
後來接到第一個面試
跟面試官聊了一下之後
他覺得我的學經歷應該更適合 AI 工程師之類的
這段時間,真的是名副其實的懷疑人生
懷著忐忑不安的心
去找了一些跟 NLP 有關的工作投履歷
我的第一份工作就這樣隨之而來了
===
從學校踏入職場真是一種非常奇特的體驗
過去的研究想做就做,不想做就耍廢
現在每天早上九點就開始做研究
一路做到晚上六點下班回家
就算是以前,我自認對寫程式很有熱情的一段日子
都沒辦法這樣一天 Coding 八小時,持續四五天
我想最大的差別就是連續 Coding 20 天之後
可以領到薪水吧 ((x
===
開始工作後,非常有感自己的能力突飛猛進的提升
一開始想 Port 個 Pytorch 的模型上樹莓派
先別說 Pytorch 了(我以前是學 Tensorflow 的)
連 ARM 我都是第一次接觸
Python 在這種 Embedding 裝置上效率其實很糟
更別說是深度學習的模型了
四秒的音檔要花一分多鐘來辨識
所以主管就跟我說「那改用 C 寫吧」
這句話在當時的我來說
聽起來真是有夠可怕
我已經不知道多久沒碰 C 了
還要把 Pytorch Model 寫上去
毫無頭緒怎麼開始
主管要我先去研究一下 LibTorch
開始研究之後發現好像沒那麼難
畢竟一天有八小時讓你研究
研究個一兩天也開始有個雛形出來了
四秒的音檔進化到 30 秒內辨識完
不過 30 秒還是超久的啊
然後我們就去研究另外一個 ONNX 框架
當時微軟的 ONNX Runtime
沒有 ARM 的版本,要自己 Cross Compile ...
那真是我的夢魘,完全沒接觸過
嘗試了好幾天都編譯不出來
做惡夢都會夢見我在編譯 ONNX Runtime
雖然當時我並沒有這麼做
但現在要在 Intel PC 上做 Cross Compile 其實很簡單
用 QEMU + Docker 拉一個 ARM64 的 Ubuntu 下來
接下來就照表操課,該 apt 的 apt,該 pip 的 pip
然後直接編譯,速度快又穩
如果是用 WSL 的話
記得把編譯環境放在 Linux 的檔案系統裡面編譯
在 NTFS 裡面會編譯到崩潰的
最後終於把那個 Library 編譯出來了
最後要完整 Implement 出來對當時的我真的超痛苦
從麥克風收音全部用 C 寫
音檔要取 Filter Bank 全部用 C 寫
人聲偵測 VAD 也全部用 C 寫
串接 ASR 也全部用 C 寫
ASR 的 Output 要做 CTCDecode 也全部用 C 寫
最後拿 ASR Result 去跑 NLU 也全部用 C 寫
然後出了 Bug
發現我用的是 Release 版的 Library
要重頭回去編譯 Debug 版的 Library ...
錄音跟辨識會用到多個 Thread
Mutex Lock 真的的運用非常重要
這也是我第一次親身經歷 Deadlock ...
幾乎每個環節我都要開個專案
反覆測試之後才有把握整合在一起
而且 Code 複雜度也開始讓編譯時間變得很久
然後我就去學了一下 Makefile 怎麼寫
Makefile 真的超讚
不管是不是寫 C 都真心推薦學一下
最後終於全部整在一起做了個小 Demo
我也很快樂的領了第一個月的薪水
沒想到這麼浩大的工程
其實也才 20 個工作天過去而已
(而且每天都準時下班)
這段過程我一度有點懷疑自己
是不是只有我才會被搞得頭這麼痛
很多問題在 StackOverflow 上都找不太到
很多東西也都不太懂,花了很多時間去理解
有那麼幾天情緒其實非常低落
我真的值得領這份 Pay 嗎
不過 Demo 搞定之後
心態也比較豁達一點了
感覺經歷了這些
我好像也沒那麼怕這些未知的 Challenge
隔天老闆跟主管把我叫去會議室
說隔壁部門走了三個工程師
整個部門只剩一個 RD
想把我借調過去
那邊寫 C 寫 Java
可能還會面對客戶之類的
握草,我沒想到未知的 Challenge 會往這個方向發展欸
當週我把 Demo 交接給同事
開始看新部門同事分享的一些網路教學文件
第一次安裝 Android Studio
什麼 Gradle, CMake, NDK 完全是第一次看到
在 Android 上面跑 C 真是有夠硬核
那些教學文件看到我一直打瞌睡
我後來才發現我在學新東西的時候一定會打瞌睡
難道這就是睡眠學習法?
隔週我就抱著我那台主機
咚咚咚的搬去隔壁部門
接手離職同事留下來的一大堆東西
這是我第一次接觸到 SDK Level 的 Library
這種先 Init 後 Release 先 Start 後 Stop 的框架
什麼 Callback 之類的,常常聽到,從未搞懂
而且前同事的 Code 非常寬
一行 Code 可以放一兩百個字在裡面
原本說是 Java,結果蠻多都是用 Kotlin 寫的
當時看 Code 真的看得很心累
不過同事人真的很好
會一步一步跟我一起 Review 這些 Code
一起尋找、推敲問題的來源
下班後我也努力多看一些 Java, Kotlin, JNI 相關的文章教學
Issue List 上原本琳瑯滿目的問題
也一條一條的被解掉
接手這幾份專案一兩個月之後
我才開始覺得我真的習慣了職場生活
做事的方式也開始比較有條理
對自己的能力到哪裡也開始比較有個底
同事問我這件事情我大概要花多久完成?
我也比較能回答出一個相對精準的時間
相較於寫程式的能力而言
我覺得這些時間規劃跟溝通表達的能力也是蠻重要的
這邊推薦 Google Keep 或自己架 CodiMD 當作筆記軟體
===
這段期間我做了一個專案
要把手上的某個系統改寫成 Web Service
用 C 寫 HTTP Server
用 C 也不是什麼大事了
真正的大事是 HTTP 的部份
我又再次陷入毫無頭緒的狀態
同事就推薦我去跟隔壁雲端部門交流一下
帶著我去跟雲端部門的資深 RD 聊了一下
雖然只是短短十分鐘的交流
我卻感覺獲益良多
就像為美好的世界獻上祝福的主角和真講過的一句話
「這不正是我所憧憬的冒險者之間的對話嗎」
就是如此熱血
雲端部門 Golang 用的比較多
但對方還是找到一份 C 的 Sample Code 給我參考
這份 Sample Code 我越看越覺得熟悉
喔幹,這不是我們大二電腦網路的回家作業之一嗎
馬上打開 GitHub 來看當時上傳的作業
雖然是 Windows 版的有些差異
但 API 的用法大同小異,運作邏輯完全一樣
整份抄下來修修改改一下,一切搞定
我第一次深刻的感受到何謂學以致用
真的是別再說學校教的都沒用了 QQ
===
疫情二次爆發,我們公司進入居家上班模式
一開始覺得還挺爽的
每天都可以睡到快九點再起床就好
六點準時打卡下班,直接無縫打 Game
過一段時間之後,開始覺得居家上班缺點蠻多的
很多事情靠文字溝通很難表達清楚
語音會議也不會一直開
很多轉頭跟同事講兩句話就有的東西
變得常常都要 Delay 很久才能搞定
一些 On Device 的 Demo 效果也變得很難傳達
這段期間做了一份純 Kotlin 的專案
覺得 Kotlin 真是越用越順手
難怪變成 Google 主推
真的解決了很多 Java 的痛點
所以宣佈解除居家上班後我特別的開心
終於可以跟真實的人類講話了好欸
雖然因為太久沒動,第一天回公司差點走路走到鐵腿 ((?
(而且那時候天氣有夠熱,沒被烤熟已經阿彌陀佛
===
原本當初說借調半年
但這半年間一直招不到新的 RD
所以又一路多拖了兩三個月
直到前部門的同事決定離職
幾乎一整年以來,我們工作上的交流非常頻繁
當初我第一天上班帶我去吃午餐的也是他
(雖然後來就沒有了,我都自己吃午餐 QQ
我覺得我們還算熟吧,所以這件事非常震撼我
也因此我要調回前部門,接手同事的專案
因為這份專案也是我們部門一直在用的 Library
只是從 Dev 變成 Owner 而已
回到研究部門繼續過著看論文做實驗的生活
===
經歷了這一整年的工作
心情上覺得非常充實
每天都在學習新的知識
每天都有技術上的成長
===
最後說說結論吧
我覺得最重要的就是不要侷限自己
一開始我覺得我要跟 Python 過一輩子了
但後來開始做其他語言的專案,發現其實沒那麼可怕
C, Cpp, Java, Kotlin, Swift
很多很久沒寫的,也有第一次接觸的
其實學一下就好,多看多做多練習
程式語言真的不是障礙
真正的障礙是對新事物的恐懼
過去的我總是不敢跨出舒適圈
不想去嘗試,也不敢去嘗試
但成長的本質就是不斷的嘗試
在學校裡面
比起學習寫程式這件事情
我覺得更重要的是學習「如何學習」這件事情
不斷的去學習,維持學習的熱忱
才能不斷的成長,充實自己的人生
共勉之,感謝各位閱讀這篇落落長的廢文 m(_ _)m
----
Sent from
BePTT on my ASUS_Z01RD
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.206.195 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/NTOU_CS/M.1668799730.A.B76.html
→ penut85420 : 希望各路大神也能分享一下自身經驗給學弟妹們參考 11/19 03:29
推 LinLinJim : 推 閒暇之餘也來分享我的經驗 11/19 17:23
推 zxcj04 : 好神 有空真的該約吃個飯了 11/22 02:40
→ penut85420 : 約,都約 11/23 19:40
推 k9120303 : 大神不推不行 11/25 21:19
推 cseslowpoke : 2023 膜拜 01/11 13:56