研究所時期的經驗回顧、工具分享
研究所的課程、碩士論文的撰寫常常需要研讀大量的文獻、進行重點摘錄,在我大四剛成為預研生,因為找不到正確的方法而吃足了苦頭,白白浪費了許多時間在「抄寫」資訊,在真正需要這些資訊時卻好像完全沒讀過,只好重新再閱讀一次。
知識的串接
研究所的最終目的是撰寫碩士論文,然而在確定題目前需要進行極大量的文獻閱讀,目的在於找出現階段研究主題的知識邊界在哪裡,然而大部分時候我們連有哪些研究主題、研究主題的內容都不清楚了,很難清楚的發掘邊界在哪裡。
深度學習大神Andrew Ng 分享的建議我覺得十分受用!
在面對大量的文獻時,建立自己的「知識地圖」是非常重要的,我在研究所時期讀了許多論文,每篇論文讀完都很認真的做筆記,盡量弄懂論文的架構、技術,但在報告時老闆最喜歡問:「這篇論文跟你現在的研究有什麼關係?」,結果就是回答「感覺這篇論文跟我的研究主題有一點點相關...」等等不知所云的答案,換來老闆皮笑肉不笑的回應xD
建立知識地圖的好處在於建立自己對於特定領域的架構圖,隨著地圖越來越廣,看到新論文時也能更快的進行分類。另一個好處則是在撰寫碩士論文時,需要大量的引用前人的論文,我常陷入「好像有一篇論文是在講這個...」,然後就開始狂翻之前做的筆記,等找到時已經忘記原本腦中的靈感到底是什麼了。
“建立知識地圖能讓你把各篇論文的內容,「累積」成對於這個領域的了解 ”
程式碼的架構
在寫碩士論文的實驗時,曾經做了兩個版本,第一個版本深深體會到「檔名地獄」的痛苦,不改看不懂、要改很痛苦,最後只好忍痛砍掉重來。
此時剛好Mentor學長推薦我一篇文章:
我們以實驗性質嘗試模仿文章中的架構,在為期四到五個月的密集實驗過程中,得到了相當不錯的效果,沒有讓程式碼過於雜亂,稍微記錄在這裡,大家可以根據自己的需求尋找最適合的方式。
我自己整理出的原則如下:
- 務必要把「實驗元件」模組化,並與「實驗過程」分開。
「實驗過程」可能會有許多版本,裡面包含許多「實驗元件」、資料的匯入及匯出、結果的視覺化等等...
在實驗的過程中常因結果的不穩定、新文獻的發現等種種因素,需要回過頭來修正自己的「實驗元件」,如果「實驗元件」與「實驗過程」沒有分開,那麼每一個「實驗過程」都需要重新修改,是個極為龐大的工程...
2. 文件以及紀錄寫得越詳細越好。
研究初期我對於寫實驗日誌這件事情嗤之以鼻,「反正都是我自己的程式碼,記錄下來要幹嘛?」,然而請不要高估自己的記憶力,尤其到了後期睡眠不足的情況下,你可能忘記兩天前的自己到底做了哪些事情。
良好的文件紀錄也能幫助你確認哪些方向已經嘗試過、尚未嘗試過。
3. 實驗用的大型資料,不建議進行版控。
雖然Github有Git Large File Storage (Git-lfs)的機制來管理大型檔案,然而是有「容量限制」的,當管理的檔案到一定的數量,會要求你額外付費購買容量,如果不願意付費的話,基本上每次Push/Pull都會收到警告不讓你執行。所以後期我們都用學校無限的Google Drive來存放實驗用的資料。
在結合上述文章及原則的嘗試下,我們最終的程式碼架構大概長這樣:
這個專案的程式碼以Python居多,版控則是使用Github。
實用的工具
接著我想推薦在研究所時期我常使用的工具:
筆記類
HackMD是一個非常方便紀錄及分享的筆記工具,使用Markdown語法可以很方便地進行縮排,且在圖片剪貼、程式碼高亮、多人協作都有很好的支援。
使用場景:
- 需要多人共同編輯時。(團體共同研讀論文、做筆記時)
- 需要分享筆記給別人時。(透過網址傳送即可、行動裝置易讀)
- 包含許多數學符號、剪貼圖片、程式碼區塊。(支援Latex語法、程式碼高亮)
Evernote則是相當有名的筆記工具,在筆記的分類、搜尋上有非常好的效率,免費版可以同時在兩個裝置使用,我常常在開會時使用手機版將白板紀錄下來、加入簡單的註記,有空時再用電腦重新修正筆記。
使用場景:
- 會議記錄。(有預先建立好的模板、可以快速搜索、支援多平台撰寫筆記)
- 自己研讀的論文筆記。(搜尋方便、有筆記本及標籤等分類機制)
- 網路上看到的技術文章。(Chrome有專用套件可以一鍵儲存)
- 紀錄自己解決的技術問題。
這是IPad上的一個付費軟體,要價299台幣,但必須說它絕對是物超所值。支援PDF閱讀、劃記,是App Store上有極高評價的筆記軟體。我用過之後就沒有再換過其他手寫筆記軟體了。
使用場景:
- 閱讀論文、手寫筆記。
- 存放電子書,上課時直接帶IPad就好,課本筆記一把罩。
專案管理類
- Google Keep
以便利貼的形式來進行專案管理,我個人喜歡透過便利貼顏色來區分事情的緊急性 / 重要性。
- GitKraken Glo
GitKraken其實是Git的IDE,比起Sourcetree來說,介面華麗許多。 Glo算是GitKraken後來開發的專案管理工具,與常見的Trello相同,都是屬於卡片式的專案管理,因為研究所的專案通常都是與程式碼有關,在版控的同時進行專案控制是個蠻好的選擇。
編輯器
- Visual Studio + Remote-SSH
在跑實驗的後期一直受到遠端工作的困擾,實驗都要在實驗室的主機上跑,但常常需要從其他地方連線回去,初期都使用TeamViewer作為遠端的工具,但是使用一長,就會被認為是商業用途,直接被踢掉。
後來找到最穩定的解決方式就是透過Visual Studio 加上它的套件Remote-SSH來達到穩定、快速的遠端編輯程式碼。它可以做到「讓你在Client端使用編譯器時,不會發現你是在遠端主機上工作」,非常的流暢。
當初設定時參考的文章在此:
結語
在實驗室的這幾年總覺得除了技術能力的培養外,更重要的是學習如何「自我管理」:如何在課堂、專案、生活、健康中取得平衡,正因為要從課堂及專案中節省時間用來好好生活,才更需要使用工具協助自己。
除了好的工具外,好的夥伴也很重要,身邊大部分的人都是進了研究所才開始學習如何做研究,在過程中與自己的Mentor、同學多討論,常常會有意想不到的收穫,可能自己糾結一整天的結,在別人身上會有很快的解決方式。
研究所時期常覺得時間太少、工作太多,也因此開始接觸「生產力」跟「筆記術」等主題,對我自己影響很大,有機會再來分享。
特別感謝我的Mentor兼研究好夥伴家瑄,在研究所時期不斷跟我交流好用的工具及流程,讓我能慢慢摸索出自己的一套工作流程。