生科轉資工1:一年表現狀況

 

這篇主要描述2021年我讀完一年資工所的表現狀況,我會給予一些量化的數據與質化的觀察,去剖析我從生科跨資工後一年內做了什麼?以及有什麼成長?我會透過課程、作品集、社團與其他表現去呈現我的狀況。


一、前情提要

我是中山生科學士,中山資工碩士,目前(2022年)是碩二的學生。我讀過高醫醫檢所,只不過半學期就休學了,想要了解我的人生觀,可以讀『研究所休學』這篇,會比較清楚當時我對自己的自我懷疑。

關於我為什麼想要離開生科?以及我為什麼選擇資工?可以讀『從生科轉資工的初期過程|十個問答』這篇文章。關於我如何用甄試的方式準備資工所?背景如何?自傳怎麼寫?以及我的方式成效如何?可以讀『跨科仔準備與分析中山資工所的過程』。最後我找教授的過程如何?我對於教授的觀察又是如何?可以讀『中山資工所 找教授|柯正雯、楊昌彪、程正傑』。


二、課程表現

(一)碩一上

碩一上成績

碩一上主要修了四門選修課程,分別為:物件導向程設、群體智慧、資料壓縮與UNIX,主要是以程式設計與演算法為主。學期GPA為3.86(86.67分),排名78/92 = 85%。雖然成績很高但排名卻很低,是因為通常碩班的分數會打的比較高。至於為什麼UNIX會是低空飛高,因為這門課同時也是大學的必修課,再加上老師考試很難😢。


1. 高等物件導向程式設計

高等物件導向程式設計

這門課讓我對於C的指標和C++的類別、繼承、多型在理論上有很深刻的理解,早在入學前,我其實已經把C和C++的基礎都看過一遍,所以有些基礎是可以理解的。不過有些細節真的是看書時覺得懂,但仔細想想就會覺得怪怪的,印象很深刻的是繼承模式與存取權限的部分,當時就問老師一個問題『private繼承不是讓所有存取權限變成private嗎?為什麼衍生類別依舊可以存取基礎類別?』,如果你對這問題很困惑,或許可以閱讀我的筆記,我就不爆雷了!更多細節請參考以下連結:

▎高等物件導向程式設計

  1. 物件導向程式設計|模擬真實世界的方式|江明朝
  2. AOOP Homework source code
  3. [筆記]109-2高等物件導向程式設計 期中考
  4. [筆記]介面與實作、運算子多載、左值右值、參數傳遞、回傳多值|C++
  5. [筆記]陣列與指標|C++
  6. [筆記]類別、特殊函式、內嵌函式、函式物件|C++
  7. [筆記]繼承模式與存取權限|C++
  8. [筆記]多型與繼承的關係|C++
  9. [筆記]static / const成員資料與函式|C++
  10. [筆記]夥伴函式與類別、不夠朋友問題|C++


2. 群體智慧

群體智慧

這門課比較偏演算法的課程,群體智慧是一類超啟發演算法,而這類演算法屬於非監督式學習,所以也算是人工智慧的一環。這門課對我最重要的是實作的部分,因為我使用物件導向的方式去建構DE演算法,類別、繼承和多型全部都有用上,真的是學以致用😂。還有我在處理資料的時候,因為資料量有點大(100多萬筆資料),所以我是用UNIX指令去幫我做簡單的前處理(剩下約不到100筆),最後再用Python去繪出80張圖。如果這些流程都是用Excel處理,我一定發瘋。更多細節請參考以下連結:

▎群體智慧

  1. 群體智慧|以眾人的力量尋找更好的解|蔡崇煒 - 1
  2. 群體智慧|以眾人的力量尋找更好的解|蔡崇煒 - 2


3. 資料壓縮

區塊鏈

不要問我為什麼資料壓縮的課程是在教區塊鏈,這窩也不知道,可能是區塊鏈比較香吧!我是覺得區塊鏈技術蠻有趣的,至少可以知道什麼是挖礦?什麼是智能合約?以及零知識證明是什麼?我覺得零知識證明很神奇,因為它可以辦到『驗證者相信證明者會證明,但驗證者還是不知道證明者如何證明。』是不是看不懂?沒關係,我也不知道我在說什麼。更多細節請參考以下連結:

▎區塊鏈

  1. 區塊鏈1.0|比特幣 Bitcoin
  2. 區塊鏈2.0|以太坊 Ethereum
  3. 區塊鏈3.0|IOTA、公開匿名


4. UNIX

會想修這門課,只是覺得UNIX指令是軟體工程師的標配,所以就去修了。這門課主要教的是UNIX程設,所以是很實作導向的課程,同時就也很可怕,作業寫到藍瘦香菇。會學到一些基本檔案操作、Script、正則表示 (regular expressions)、grep、fgrep、sed、csh、awk,整體來說是個實用但又痛苦的課程。


(二)碩一下

碩一下成績

碩一下主要修了兩門必修課程,分別為:演算法與作業系統,GPA為4.26(98.53分),排名20/101 = 20%,所以我說碩班的成績都打得很高😜,參考就好。


1. 演算法

演算法

楊老師的網頁上有放上課的PPT與影片,所以可以直接看到課程的內容。這是一門篇理論的課程,對常見的演算法有一定的認知,如:Greedy Method、Divide-and-Conquer Strategy、Tree Searching Strategies、Prune-and-Search、Dynamic Programming。更多細節請參考以下連結:

▎演算法

  1. 演算法設計與分析|系統性的思維|楊昌彪


2. 作業系統

作業系統

這圖的背景知道是什麼嗎?如果有修過課的就一定會知道這是大抄,老師是允許大家考試時,看著自己手抄的大抄。更多細節請參考以下連結:

▎作業系統

  1. 高等作業系統|使用者的代理人|王友群


三、作品集

以下收錄2021年自己覺得比較完整且有一些獨創性的作品,一個Android APP、一個桌面軟體和兩個演算法,沒有任何原創性的作業程式我就沒有放進來。

(一)Schedule Z

Schedule Z

1. 軟體價值

Schedule Z為一個多行程最短路徑排程的Android APP,是屬於作業系統的一個專題,不過這份專題題目自由發揮,所以我當時就想做這個排程程式,去解決之前我在工作時所遇到的問題,其軟體價值如下:

  1. 在實用性上,可應用在客戶拜訪、景點安排、工作規劃,具有娛樂與商業價值。
  2. 在新穎性上,Google日曆與地圖並無提供這類的整合性的最佳規劃。
  3. 在技術性上,TSPTW問題是屬於NP-Hard,演算法需特別設計,才能有好的品質。

2. 軟體意義

Schedule Z對我的意義除如下:

  1. 第一支Android APP
  2. 第一支真正拿來解決實際問題的軟體
  3. 第一支JAVA程式:由於是使用Java撰寫的,所以我要用Java寫演算法,可是我在這之前沒有學過Java。因此我只花一天學習Java,兩天寫演算法,兩天測試與除錯,共歷時五天完成演算法。不過學過C++後,要快速上手Java其實不難。

關於Schedule Z的軟體使用說明、演算法、結果、結論、心得與載點,可以參考以下連結:

▎Schedule Z

  1. 排程力 Schedule Z 1:軟體使用說明
  2. 排程力 Schedule Z 2:演算法介紹|VIG_VNS for TSPTW
  3. 排程力 Schedule Z 3:結果、結論與心得
  4. Schedule Z載點
  5. Schedule Z程式原始碼


(二)Voronoi Diagram

Voronoi Diagram

Voronoi Diagram為一個均勻分割空間的桌面應用程式,是一個極具里程碑的專案,因為這份專案是我第一支完整的 GUI 程式且也是學習 C++一週年的集大成者。雖然我花不少時間在熟悉 Qt 框架,但真正最難的是設計正確且有效的演算法。因為Qt 的英文資料非常豐富,所以只要花時間找資料,通常都能解決。

關於Voronoi Diagram的軟體使用說明、演算法、結果、結論、心得與載點,可以參考以下連結:

▎Voronoi Diagram

  1. Voronoi Diagram 1:軟體使用說明
  2. Voronoi Diagram 2:程式設計
  3. Voronoi Diagram 3:實驗結果
  4. Voronoi Diagram 4:結論與心得
  5. VoronoiDiagram source code


(三)Differential evolution

Differential evolution

這是我C++程式碼破千行的程式,同時也是我第一個看著論文虛擬碼時做出來的程式。😚

使用差分進化演算法 (Differential evolution, DE)與其三個DE變型體(APTDE, EPSDE, MPEDE)去找十個目標函數 (objective function) 的全域最優解 (global optimal solution)。APTDE採用自適應群體數;EPSED採用自適應參數;MPEDE採用多群+自適應參數。整體表現上,(優)MPEDE > EPSDE > APTDE > Basic DE(差)。更多細節請參考以下連結:

▎Differential evolution

  1. 差分進化演算法 Differential evolution - 1
  2. 差分進化演算法 Differential evolution - 2|APTDE|自適應群體
  3. 差分進化演算法 Differential evolution - 3|EPSDE、MPEDE|自適應參數、多群
  4. 差分進化演算法 Differential evolution - 4|APTDE, EPSDE, MPEDE比較結果
  5. DE, APTDE, EPSDE, MDEDE source code


(四)Page replacement

Page replacement

如果記憶體已經滿了,就會尋找一個犧牲者 (victim),移除犧牲者,將新分頁從硬碟載入記憶體中,並更新分頁表。尋找恰當的犧牲者,就是分頁替換演算法 (page replacement algorithm)要處理的問題。更多細節請參考以下連結:

▎Page replacement

  1. Page replacement 1:演算法介紹
  2. Page replacement 2:實驗結果與結論
  3. Page replacement source code


四、社團表現

研究所我除了顧課業外,也兼顧社團,目前是中山性善社社長,同時也是NSYSU GDSC美宣組長。

(一)性別友善社

中山性善社

左邊四塊圖是我做的,同時這四個活動也是我主辦的,活動規劃、行政流程、金費核銷、行銷宣傳、⋯⋯,基本上我都可以獨立完成。不過大學時,我早就擔任過中山性善社社長3年,也辦過50多場活動,所以這對我來說不是太難的事情。


(二)Google Developer Student Clubs (GDSC)

NSUSY GDSC

這PPT是我做的,上學期我做美編,這學期我在帶專題。專題的部分想要回應聯合國17個永續發展目標中的性別平權,至於我想到的專題是什麼?可以來加入NSYSU GDSC,或者等我做出來,我在公佈。😘


五、其他表現

(一) 大學能力程式檢定CPE

CPE成績

從CPE成績中,可以看得出來我入學前真的是程式小白,經過一年多的時間,從原本只能解1題進步到可以解4題。雖然4題不是很厲害,但對於學習速度來說,我是很滿意這速度😇。訓練的方法主要是刷題:

  1. CPE有出秘笈本,我有去買秘笈本,邊看邊練習,至少一星全部寫過。
  2. Leetcode我大概刷20多題


(二)實習

我從2022年2月到3月,目前投了至少20家公司的暑期實習缺:AICS、Acer、Cadence、Google、IBM、Intel、Microsoft、Synopsys、Yahoo、美光、聯詠、默克、台積電、聯發科、威盛電子、時刻科技、玉山銀行、研華科技、緯創資通、趨勢科技。

目前只有3家有訊息:AICS、默克、趨勢科技,AICS和趨勢科技完成線上程式測驗,而默克和我約面試時間,其他目前沒有音訊。

▎實習相關文章

  1. 暑期實習0:背景、面試、結果|趨勢、默克、時刻
  2. 暑期實習1:趨勢科技面試過程|2022
  3. 暑期實習2:默克集團一面過程|2022
  4. 暑期實習3:默克集團二面過程|2022
  5. 暑期實習4:時刻科技面試過程|2022


(三)正職

正職這部分我沒有很認真投,畢竟現在投似乎還太早,但我之前有在就業博覽會留我的資料給一些廠商。目前有2家廠商聯絡我,一家是台積電南科CIM部門,另一家是鈦坦科技。台積電已經面試完了,而我有通過鈦坦的線上程式測驗,人資口頭說等快畢業再安排面試時間。


六、結論

在半年內,我可以閱讀電腦科學的論文並將虛擬碼實作出來,且會使用類別、繼承、多型去建構出破千行的程式。在一年內,我可以快速學習其他程式語言以及一些框架,去開發Android APP和macOS / Windows跨平台桌面軟體。在一年半內,我CPE成績從1題進步到4題,並且能夠拿到一些軟工的面試機會。

我的表現絕非是神等級的,但可以看到我是穩健成長的,每一次的成長都是有跡可循的,這樣的成長才更為真實。沒有人一開始就很強,每個人都是從初心者開始打怪練功的,一步一腳印,持續堅持下去,通常會有所收穫的。但還是要說,轉職的路上,也有很多人放棄,因此努力的前提是選擇。要選擇一個適合自己的道路,再努力才會事半功倍,不然就會徒勞無功。

然後除了課業外,我也會花一些時間在課外活動上,舉凡:社團、部落格、社交、運動、⋯⋯等,畢竟生活還是要有所平衡,不可能都在讀書,還有很多事情是比讀書更為重要的。


七、相關文章

  1. 研究所休學
  2. 教育所準備過程分享與分析|中山、台師大
  3. 跨科仔準備與分析中山資工所的過程
  4. 中山資工所 找教授|柯正雯、楊昌彪、程正傑
  5. 從生科轉資工的初期過程|十個問答
  6. 生科轉資工1:一年表現狀況
  7. 生科轉資工2:二年表現狀況1
  8. 生科轉資工2:二年表現狀況2

留言