coins

在 2017 到 2018 年間,我以 PhD 為目標申請了許多學校,最終選擇了 CMU 的 Master of Language Technologies Program 就讀。說起來這樣的結果實在也不是原本的我所能預期,實際上,最早我本來是想先去當研究助理的,但後來跌跌撞撞的就做了這種選擇。這背後的故事,得從一開始的困境講起。

冒名頂替症候群

雖然當初在做機器學習的相關工作,但其實那時我對機器學習的認識是相當淺薄的。早期的我一直是走純碼農路線,甚至到了研究所的初期也沒有對機器學習有很深入的了解,甚至也沒有選太多直接跟機器學習相關的課程。研究的項目雖然有碰到機器學習,但其實主要就是做些特徵工程 (feature engineering),而對機器學習的理論沒有太過深入的了解,一直到研究所晚期才對機器學習有了興趣。

然而雖然有興趣,但畢業後就沒有太多時間可以學習了。於是到了要找工作的時候,就試著找找看機器學習相關的工作,想說可以邊工作邊學。相當幸運的居然還真的錄取了「機器學習科學家」這樣一個聽起來彷彿相當「機器學習」的職位。

然而好景不常,雖然原本是想說邊工作邊學,但實際做起來卻一直感覺不到進步。對於各種工作上的需求,雖然最後好像還是有完成。但總有一種不求甚解,不確定做的東西是否真的有意義的不踏實感,挫折感也很強。總覺得自己只是不小心進來了,可能一不小心就會被看穿自己根本就不太行的事實。

另一方面,雖然那時就很想出國。但發現國外的機器學習相關職缺門檻實在很高,加上自己也不太有信心,所以難以想像自己有天能找到國外的機器學習的職位。同時,雖然如果找純碼農機會較大,但如果直接這樣以碼農的姿態出國,或許就一輩子再也沒有時間好好學習機器學習,彌補目前的遺憾了。因此就算真的有獵人頭寄信來邀請,也無法下定決心回覆。

在此同時,身體的狀況也愈來愈差,逐漸失去精神力,使得要做各種決定都變得更加困難。當時的狀況就好像陷入了流沙一樣,就算想要掙扎也只會越陷越深。於是,最後終於下定決心要想辦法走出這樣的困境。

具體的來說,最重要必須解決的問題有二。其一是「彌補目前對機器學習的遺憾」好好學習並找出自己到底適不適合,喜不喜歡做機器學習。假如答案是正向的,那麼就以申請 PhD 為目標鑽研更深,而不是停在目前這個不上不下的尷尬局面。假如答案是負向的,那也不要浪費時間在這種不上不下的局面了,直接轉以碼農為目標,機器學習就改當下班後的興趣就好,徹底放棄在工作中順便學習機器學習了。其二則是認真的花時間去檢視當時的身體狀況到底是怎麼回事,以及或許靜養一陣。以此兩個目的為出發點,幾經考量設計了去當研究助理的這個選擇。思考流程圖可見下表:

decision tree

乍看之下雖然還滿符合內心所期望的各種目標,但遺憾的是做決定的時候除了受內心真正目標的影響,同時也受著外在現實考量的影響。很多情況下,是不敢做出完全依照內心目標的決定的。最好的例子就像是〈理想的生活〉裡折衷的做法:抱著「或許存在著適合自己的工作」的期望,繼續追尋前進:一邊尋找這種工作、一邊慢慢存錢。其實要是可以不受現實考量干擾的話,就算已知這種工作確實存在只是要努力追尋,我也大概懶得去做這種追尋,而傾向直接轉向已知很快樂的生活方式就好。但實際上因為必須考量錢不夠多的現實,所以不敢做這種決定。

做研究助理的這個打算,從現實的考量來看,有不少的壞處。首先,這會讓我收入降低的時間拉長,減少我的總收入。再者,如果最後發現我不想做研究的話,那麼不論是要申請 CS MS 還是要直接找國外工作,做研究助理的這個經歷不但沒有幫助,恐怕還只會有壞處。事實上,如果我當時真的想申請 CS MS 或者是直接找國外工作的話,最好是當下馬上就這麼做而不是先去當研究助理。反之,如果最後發現我想做研究的話。雖然如果有好的發表可能真的有幫助,但如果發表很差,則或許還不如直接申請的好。再者,如果打算要發表很多,就表示我應該要在當研究助理的期間盡其所有,全力以赴。但這其實跟想減少壓力觀察身體狀況是直接矛盾的。

雖說如此,直接申請 PhD 同樣也跟我的目標感覺有某種程度上的直接矛盾,當初到底為何會走到此種地步,實在也理不清。只能說是隨波逐流,將自己困進了奇怪的處境。但最後為何會在錄取的學校裡選擇 CMU 的 MS,倒是很容易理解。因為其實 CMU MLT 就是做研究助理的「困難版本」,或者說是一個對真實目標來說稍劣,但對現實考量來說稍好的作法。同時,這個作法又保留著一定機率可以成功實現原本想達成的兩個目標。他是研究型的 MS,所以或許有機會讓自己理清對機器學習的疑惑。而且,如果最後決定念 PhD,就只要直升就好,不會浪費時間。反之,如果最後決定不念,就只要畢業直接找工作就好,不會浪費時間又還要去申請 CS MS。

但說到底,我實在是不敢在尚未理清自己身體狀況到底為何的情況下貿然去念個 PhD,總覺得大概有九成以上機率根本就念不完。或者更悲觀的想,最糟的 worst case 其實是明明無法唸完,卻將自己困進流沙之中硬要唸完,最終的最糟事態可能是一個糟到必須不顧一切也要避免,足以讓其他衡量標準全部都失去意義的最終極的糟糕事態啊。一想到存在著這個 worst case scenario 就無法下定決心了。

反之,如果只是念個 MS 的話,就算真的遇到 worst case scenario,頂多可能就是休學回台了。至於為何說是個對真實目標稍劣的選項呢。這也不難理解,因為現實的來說, CMU MLT 是一個戰鬥的地方,不是一個用來理清自己疑惑的地方,也不是一個用來休息的地方。而且根據學長姐的說法恐怕也不是一個能好好做研究的地方。假設我是選擇去當研究助理的話,最後結論到底是想不想做研究還能期望有個五五波的可能性,但當我選了 CMU 這個選擇的時候,內心就忍不住覺得,最後的結論大概有九成的機率結論會是不念 PhD 了吧。

雖說如此,但總有那一成的機率或許會突破困難。因為我老是碰到什麼事都先設想 worst case scenario,所以或許能期望事情能比自己想像的更好吧?另一方面,其實就算最後是那九成的結果,其實我也達到目的了。因為我知道那時我應該就會解除對機器學習的遺憾,而能往下個目標邁進了。這聽起來其實有點弔詭,但有的時候,雖然明知會失敗,但還是非得要實際的去失敗一次看看才能甘心。而我想要的也許就是那個甘心而已呢。

說是這麼說,不管在當時,還是現在看來。還是覺得這樣的決定感覺有種作死的意謂。但就算再重作一次決定,似乎也很難找出更好的作法了。就算我能對過去的我訴說最後達成的結論,當時的我如果不自己試試看,還是無法解除遺憾,所以還是得選擇做研究助理或者是直接申請之類的奇怪選項。唯一有差的大概是我可以傳授當時我的身體到底怎麼了的資訊,要是那時的我得知了這個資訊,至少去當研究助理的時候可以比較有信心的以全力以赴為目標,而不用偷塞個不管跟什麼都會造成矛盾的減輕壓力休息一下的目標。

但要是我真的能跟以前的我傳授什麼的話,我才不會想浪費在這種奇怪的地方。最好是直接傳授大學的我趕快挖比特幣,好好的賺個幾億再說。這樣對我未來的影響性恐怕遠大過要不要當研究助理的決定。

研究與工程的歧路

當我說想弄清楚自己適不適合研究的時候,其實有兩層意義。第一層是我做起研究來開不開心,快不快樂,喜不喜歡。第二層則是我做起研究來好不好,我的研究潛力大不大。因為如果很快樂但其實自己不強的話,那多半也不適合把這件事拿來當職業。畢竟我大可選擇當已知成就感和自己實力都在可接受範圍的碼農道路。

說到自己能力好不好這件事,當時因為對機器學習實在沒有太多正統的訓練,所以覺得難以評估自己的研究能力。來了 CMU 以後,上了不少機器學習相關課程,好好的惡補了一番,終於不再有當年那麼強烈的徬徨感了。從一些面試和課程的作業上也建立的不少信心,覺得自己的機器學習能力應該是有進步的。然而,「研究能力」又是另一回事。

雖然這樣的心態或許不健康,但自己的能力好不好常常是跟別人比較出來的。平常在寫程式的時候,不管是以前在學校裡,或是職場裡,抑或是在 CMU 校園裡。常常可以偶爾遇見一些人,在寫程式的時候,其實並不是那麼認真的追求甚解,而是只要成功做出來了,就結束了。也會遇見一些人,明明告知有更好更快的做法,甚至實際展示確實比較好了,他們還是會固執己見不想學新的東西。也會遇到一些人,宣稱技術和工具日新月異,所以沒必要花時間學,不如用心在晉升管理階級上。當自己在認真啃磚頭書的時候,也知道有些人不會,也不想花時間啃這種書,但他們還是能過得還不錯。這種時候就會意識到我們之間存在某種本質上的差異,而只要我一直 exploit 這種差異不斷前進,我們之間的差距就會越來越大。說起來這讓人有種安心感,就算趕不上前方的前輩們,至少知道存在的大量趕不上來的人們,其實也過得不錯,那麼自己應該也能過得不錯吧。

但在研究能力上,這樣的本質差異似乎就不存在了。或者說,如果有存在這種本質差異的話,感覺我好像是那個被鴻溝隔在後面的人。比如說,其中一個很可能跟研究成果好不好有高相關性的基本功大概是「讀 paper」,但我總覺得彷彿大部分的人都讀比我多 papers,但我想要去加強這種基本功的時候,感覺起來很不自然,至少跟啃程式磚頭書比起來還要不自然多了。(當然這是否是本質性的差異還是只是暫時性的現象還有待考究,一部分的我覺得目前我之所以很難專心念很多 paper 恐怕跟 CMU MLT 的設計與自己的個性有某些關聯性,不過這是題外話了。)雖然我因為已經累積了多年經驗所以好像在機器學習的課堂上也常常表現的不錯。但我沒辦法跟後方的人建立起越來越大的鴻溝,在此同時我和前方的人的鴻溝卻彷彿越來越大。另一方面,研究能力跟機器學習能力好像也是兩回事。

想理清這個思緒,就得談到第二個判準,即做研究開不開心這件事。

最近的我漸漸的發覺到,自己的成就感來源似乎比較傾向來自因為自己變強了,所以有成就感,而不是自己做出了什麼好東西而有成就感。假設以職業來做比喻,覺得最好的例子大概就是「運動員」了。運動員平時透過不斷的訓練讓自己「變強」,而最後的比賽,不過只是用來驗證自己變強而已,但其實金錢收入是因為有比賽才存在的。

我不知道運動員的想法如何,但如果是我的話,我絕大多數的成就感來源很可能會來自賽前的那些訓練,以及意識到自己慢慢變強的這個事實。而最後的比賽雖然贏了也有成就感,但其實是次要的。以至於如果沒有賺錢的現實考量的話,就算不比賽其實也無所謂了。

這樣的想法在軟體工程上也有其危險性,例如他可能讓工程師傾向使用高難度的奇計淫巧,導致其他人看不懂。又或者是不斷追求完美不斷 refactor,結果真正的功能反而做不出來。但這些問題多半還在可控制的範圍之內,且就算控制了這些問題,還是能夠有個人的追求的。

但在研究上,或許討論「研究能力進步了」是一件太過奇怪的事,也很難想像有天會說因為做了某某某研究,自己的研究能力進步了。本質上,研究終究是一種發現的過程,其中絕大多數的成就感是來自發現了什麼有趣的東西,而這樣的成就感我也曾體會過,但來自自己進步了的成就感就很少了。或者,也許這是我自己的問題,而非研究的普遍現象。我發現我找不到自己的研究能力的座標,而且也無法衡量自己的研究能力是否有進步。原本我以為是因為對機器學習的經驗太少所至,但目前看來,或許這本身就是一個無法主觀衡量的事。

基於以上的理由,我終究決定不要以研究作為我的主要職涯目標了。(當然這種理由又是一種內在的理由,正常的人可能會選擇使用外在的理由來做職涯的選擇。)不過因為機器學習的信心比起以前更強了,倒也沒像以前那麼極端要完全放棄機器學習的職涯改走全碼農。畢竟,機器學習不過就是工程師百寶箱裡的其中一個工具,要用的時候就好好拿出來用就行了。

當年想完成的兩個目標,第一個雖然總覺得如果當初做了不同選擇,也許會有不同結果,但勉強算是完成了。第二個目標雖然嚴格說起來沒有完成,但也算是大有進展了。反倒是現實的考量,因為疫情肆虐加上各種政策即將改變的風聲,其實我也不知我的未來在哪了。

要是早知機關算盡也無法達成現實的考量的話,也許當初該給真實的目標更多的重量才對。