研究所剛畢業兩年,相當於剛在業界打混了兩年, 分享一下自己的程式學習經驗,希望可以幫到新進來的同學。

個人是應用數學系跨考資工所的。在決定要考試 (大三) 才開始去修資工系的資料結構 跟演算法,基本上是那時候才算開始真正學程式,之前應數系雖然也會教 c/c++,但是非 常的淺。印象很深刻的一點是在大三那時候,連什麼是建構子都不知道。

之後開始讀考試的書,這時候開始會嘗試實作考試會用到的一些資料結構。

這階段程式能力雖然有進步,但是渾渾噩噩沒有個具體方向, 擔心未來能力不足。在確定考上之後,給自己訂了一個目標:寫一個足以上架的 app。

為了達成這個目標,開始學習 Java,物件導向,簡單的 Android。最終最終變成了: S2TDroid,一個可以在手機端繁簡轉換的 APP。透過這個 APP,打下了良好的物件導向基礎,對於之後的工作,這個基礎帶來許多 幫助。而這個作品也在剛畢業找工作的時候給了蠻多幫助。讓面試官提問的範圍縮小到自 己較有把握的部分。

到了研究所為了更進一步精進程式,選了幾堂份量較重,或是程式難度較高的課。 印象比較深刻的是寫了很多 ML 功課,還有 JPEG decoder。尤其是該死的 JPEG,使出寫 渾身解術寫完後,覺得對於 C 的理解昇華了…

研究所這段時間自己給予的目標是在開源社群中貢獻,因自己很喜歡看小說,也有在玩 Andoird 刷機,最終在 GravityBox 以及 JNovelDownloader 有了數筆 commits。

但因為研替是在碩一下就找工作,這兩個在找研替工作並沒有給到幫助,但自己覺得這是 一個不錯的經驗跟自我實現,學會追 code,以及能夠改變世界,幫助到其他人的成就感。

碩士兩年,最重要的事情就是畢業,並且繼續精進程式,正常來說這兩件事情並不會衝突 就是了。

對於跨考找工作是否會有影響,個人心得是如果有心學習,那是不用擔心的。身邊有幾 個同事都是跨來資工的。

開始工作後,接觸到較大的程式,剛開始總覺得自己跟不上同事的腳步,但隨著對於架構 越來越熟悉,就能漸漸的上手了。這段時間自己的心得是,保持上進心,有學習的機會就 學。以及雖然快速把事情做完很重要,但是學到東西同樣重要,舉個例子來說,有時候可 能可以猜一下 bug 在哪,並且快速修改一下接著馬上測試也沒問題就進了,但是其實這 時可以放慢腳步學習 debugger 的用法,並透過 debugger 真正確認的問題在哪。

而在工作中因為是許多人在維護一個 project,會有許多在學校中無法學到的經驗,比方 說:Review,溝通,架構設計等。

在工作中,當 project 漸漸上手後或許會有點鬆懈,為了不要太過安逸,許多同事都有 自己的方法,就自己所知,有的同事每星期都會寫 leetcode contest,有的會參加開源會 議去發表議題或是聽演講學習新知。也有同事下班會去看 C++ pattern 的書之類的。

而個人是對開源程式挺有熱情的,目前閒暇是繼續看 open source,最近在 QemuMagisk 也有一點點的貢獻。

個人從開始學程式,到現在的旅程,大概就如文章所說,或許有點老生常談,但簡單總結 一下幾點:

  1. 給自己一個目標,然後真的想盡辦法去完成他,應該會挺有收穫的。
  2. 知道自己的缺點,想盡辦法改善。以這篇來說因為知道自己程式比不上別人,所以挑選 較需要程式的課程精進。
  3. 如果有心的話,可以嘗試使用開源軟體,並回饋給開源,可以學到許多東西,也是面試 時的籌碼之一。
  4. 學會使用工具也很重要。(grep 追 code、用 tag 快速找函式、debugger 等)
  5. 保持寫 code 的手感。

有問題歡迎一起來討論。

謝謝