大躍進!
一個關於成長、蛻變的故事

這篇會跟大家分享 大三上 112-1 修課和各種發生在這學期的一些心得、故事

# 引言

我對大三的定位是會有大幅度的進步,因為比起以前基礎課程(例如微積分、資料結構、演算法)多了很多專業課程,加上一些基本技能在之前已經打下基礎,某種程度上來說,這學期的課會有趣很多,不過因為傳聞專題和軟工會把時間全部吃掉,這學期還是不敢修太多課,就以 18 學分度過,原本想選的物聯網也在第一堂課過後打退堂鼓了,不過我不會說有一部分原因是因為程式能力不足。。

# 課程

# 資安攻防演練

好啊!終於到有能力修資安的時候了,比起資訊安全,資安攻防對我來說應該會稍微熟悉一點,畢竟大二玩了一學期沒什麼結果的 CTF 讀書會,但至少一些基本攻擊還是聽過,大概知道是什麼

整學期上資安大概都呈現同一種流程,先是「無力」,因為早九真的很早,前幾個禮拜還可以吃完早餐再去上課,後面都索性 8:30 出門買早餐直接去教室吃;再來是「困惑」,一個新主題一開始都聽不懂,都要先經歷那個過渡期才能稍微理解;接著就開始「恐懼」,因為算算時間 Neokent 差不多要走下來找人聊天了,而且不知道為什麼每一堂課都可以點到我;點完之後壓力會漸漸消失,就開始認真聽課,等 Neokent 講完一個概念大概 5 - 10 分鐘左右就會出現「自信」,對,我大概要多一小段時間才會真的理解剛剛講了什麼東西,但說實話不管什麼單元大架構跟原理我都是懂的,除了前幾次出現 Docker 和網路相關的東西(例如 shellshock 和 CSRF 那兩堂課我就爆炸了)我撐不住以外;最後應該是以「緊張」收尾,因為資安結束要換專題報告了

可是一學期的資安訓練有覺得自己進步一點嗎?有吧!尤其是 buffer overflow 的部分是真的都有了解,主要是知道 calling convention 這件事情才能真的學好 pwn,現在在看 exploitation 的時候都能完全理解了,web 部分也是有點進展,最著名的肯定是 SQL Injection,只能說 SQL Injection 真的很簡單,為什麼以前都聽不懂呢?

這邊要謝謝呱呱和 Stanly 之後每個禮拜四下午都跟我寫資安作業,至少我可以確定一個禮拜有一天有人陪著寫資安,雖然進度都緩慢到一個下午可能只有兩小題 SEEDLab,但有人陪著寫作業感覺真的很好!

# 系統程式

簡單來說是很酷的一堂課,不管是課程內容還是老師還是助教。這堂課在學的基本上就是編譯以後的事情,像是組語、組譯、linker、loader 這些,最後附贈一些 Linux system call,大概也是這學期最開心的地方,感覺就是穩穩地對系統更進一步的認識,如果再加上下學期的作業系統,硬體方面應該就更熟悉了

老師很酷,上課常常講一些自己的見解,各方面都是,尤其要我們去了解系統運作的原理這部分,不要硬記,不過也因為說話比較直讓我滿喜歡這堂課的。助教的話,就是很用心很用心,每堂課都會跟課,下課幫同學解問題,寄 email 回一封的內容比我一學期寄過去的量還多,改考卷也很用心,會知道是因為期中的時候我不知道哪裡來的勇氣跟天借膽直接寫我覺得有兩道題目有問題,結果其中一個還真的被我說對,被助教說是有認真在讀書不是只記考古題的人,其實助教也是吧!沒有單純拿解答來改而是每個人的解答都去理解在給分的。不過最可惜的會是專題,專題要自己寫一個 SIC assembler 出來,雖然只要支援一小部分的指令,但以正常的我應該是會把所有加分,什麼 literal, block 之類的全部做出來,但最後我沒有,甚至只弄一個 pass 1 然後 symbol table 架起來就算了(期末太忙)

但還有一個遺憾其實是沒在這堂課聽到 IO multitasking,因為計網的關係,知道 select()epoll() 滿重要的,最後學會 select() 反而是為了寫計網的 HW3 才自己去學,還有資安攻防最後一次上課提到才接觸到

# 計算機網路

網路對我來說很重要,大概高中就察覺到了,因為我對網路真的是一點概念都沒有,所以說實話對這堂課抱有很大的期望,大概就是希望上完這堂課之後可以成為 Network Master 那麼遠大的抱負,沒,只是希望別人講跟網路有關的東西的時候自己能稍微知道那是什麼

先說結論,目標有達成嗎?大概 70% 吧我覺得!大架構是有了,網路雖然很年輕,但他變化太快了,很難把所有東西都學會,果然資工系的課還是只能靠自己多碰一些東西才可以

就「網路」這個概念來講,說實話大概上到 Application layer 那時候我都還很努力找這堂課的定位,原本想說是不是就是記住每個 protocol 長定義、記憶 packet format,但後面才發現不太一樣,每一個 protocol 的 header 長相其實網路上就找的到了,要用在去網路上找就好,好像也沒問題,反而是 protocol 說了什麼、哪些應用,甚至是有些特殊的設計,比方說 TCP 在處理 reliable data transfer 的時候為什麼從 RDT1.0 一路講到 RDT3.0,但後面 TCP 又不完全使用這套邏輯,反而是有自己的 RDT 策略,老實說網路這個東西設計層面很好理解,真的是從中看到很多設計的藝術,如果說能從這些觀念裡面發現他「美」的地方,應該就是有學到東西吧!(開始對得起程式設計師設計兩個字了!)

就去「台大修課」來講,算是不錯的體驗。跟師大比起來有兩點不一樣:一個是地理位置,台大資工系館大概是我從師大出門要花 15 分鐘左右才會到的地方,原本 14:20 的課變成 13:30 就要先出門(因為我又習慣提早到教室,莫名其妙就越來越早),但這也養成我這學期敢在台北街頭亂騎 Ubike 的習慣,至少這點我覺得很值得,不然對腳踏車一直有種畏懼,也不知道什麼時候會突破,但現在要在街頭騎個 Ubike 已經不是難事了。另一個是上課氛圍,師大的課不能說底下學生不互動,但台大學生很明顯會超主動提出問題,討論來說也滿熱絡的,就連 NTU Cool 上的 forum 討論也可以滿踴躍的,在這種環境學習真的會進步很多,大概是這堂課和這學期九學分 Neokent 的課的緣故,現在上課回答問題和平常跟老師講話比較沒壓力了,不然為什麼以前不敢去上程式設計呢?(*゜ー゜) b

就「作業」來講,三次作業對我來說都滿有挑戰性的。台大的作業基本上都不是課堂上有關的,有關也只是純粹專有名詞一樣,但都是自己要另外學一些東西。第一次是紙本作業,難度肯定是低的,有點像在玩 CTF,什麼題目給你一連串截到的封包,跟你說裡面有人在要授權碼、裡面有期中考考題,讓你自己去找,整體來說還算有趣,不過第一次真的沒有好好把握住,時間跟資安一人一個禮拜就分掉了,最後甚至在上家教前趕著上傳作業?第二三次就是程式作業,第二次是簡單的自架 server, client,可以傳送訊息,支援一下 DASH 就好,嗯。。這邊說簡單,但我當初一點分數都沒拿到,後面想想今年有一個很大的收穫是寫程式的習慣,以前就只是「寫程式」,很少走到比較藝術層面的「設計」上,大一大二那種手刻演算法或一些功能的時候,只需要按照那個輪廓刻出來就好,沒什麼特別設計的成分在,但大三很多東西都比較大,如果沒有好好設計就下去開發,其實不到中期就會覺得很亂,這一次作業很嚴重的問題就是沒有經過好好設計,所以很多地方站在不穩的基礎上繼續蓋就更歪斜了,原本還慶幸作業延了兩、三個禮拜,有機會重新來過開發出一些東西,但最後因為沒有好好用 git 的關係導致我不小心刪掉整個作業,這邊提醒大家 git 要好好用,然後使用 rm -rf * 之前真的要小心,以後乖乖用 rm 就好,不要沒事在那邊 -rf ,尤其是那個 -f 。第三次是給 FSM 實作 SACK protocol,有了之前的經驗,這次的設計真的是超級用心,不過敗筆應該是 FSM 本身是一個陷阱,既然 FSM 寫好,代表很多東西都要好好按照 FSM 去實作,有一兩個地方不一樣就會導致整個 FSM 的邏輯錯誤,尤其這次評分是透過 log 檔自動化評分,所以一個地方出問題可能連帶影響後面所有地方,這也是為什麼我最後第三次作業成績也沒多好看的原因

BTW 原本以為師大的朋友們修過網路,我在修網路的路程中有問題很多人可以求救,怎麼每個人都跟我說「蛤!我是上蔡老大的網路耶!」到底發生什麼事了!

不過這學期修課的經驗來說事都還不錯的,老師很用心,助教也超認真,甚至還會私底下問修課狀況、作業狀況,很充實的一堂課!
下次有機會在修台大的課肯定是要再去嘗試的,但要報團一起去,一個人壓力真的很大。。

# 遊戲程式設計

怎麼會有人想在一學期開發兩個遊戲,絕對是瘋了

遊戲程式設計對我來說真的不難,就是一些小東西,花一點時間做成果而已,不過畢竟是跟程式有關的通識,再看看自己學生證,「資訊工程學系」,不好好表現真的是愧對自己,變成每一次作業、專題其實都滿努力做的,現在要說我覺得沒有愧對這堂課吧

Processing 這個程式語言應該不是很流行很常用的語言,感覺資料滿集中在官網的,也沒有到很多論壇都會出現,真的遇到問題很多時候還是多看一些範例 code 或自己慢慢推敲,不然就是問 GPT 老大而已,一開始看到要用他那個醜醜的環境真的好不適應,還我 vim

認真說這堂課沒有到很多心得,對我來說就是一堂通識,可能有一點點點的成就感吧!畢竟程式這種東西在資工系都是信心受挫居多,難得在這邊有一些成果

說一下感受好了,算是小型軟體工程現場的感受,這堂課沒有特別按照軟工的方式開發,都是超隨便的且戰且走,只是剛好跟著軟工的進度就模仿一下寫個需求規格書、設計規格書、README 等等,專題開發團隊也只是粗略分個功能開發,不過對一個有程式開發的專題應該抱有的態度我倒有些意見。我們這次分成兩個美術、兩個文書跟三個程式組,理論上程式給三個程式組寫我是沒什麼意見,畢竟這就是程式組工作,但成品做出來之後的測試、回饋應該要是所有人都有上去載下來玩玩看給意見的,不知道為什麼會有「我不是程式組所以不碰程式是合理的」這種想法出現,感覺跟選課初衷都不太一樣了

# 桌球

這是在師大第二次的桌球課,感覺是老師和上課氛圍的影響,這是少數會期待也很喜歡的體育課,因為學的到東西、上課也不會尷尬

亦婕老師的這堂桌球課剛好採用教育模式上,所以課堂中學生間會透過在組內擔任的角色跟其他人有比較多的互動,像我就是組內的教練,為什麼是教練?因為我對桌球的實力很有信心(才怪),因為公關要嗨的人,但牡羊座就不是很嗨的人(為什麼要把牡羊座拖下水?);隊長要帶操,雖然我可以確定我會全勤,但我不太想帶操;裁判的話。。我不懂規則,耶!不過很慶幸我們這組的人都滿天使的,該講話會講話、會一起練習、還有搞笑的時候,相處起來還算自然

我們這邊有一個哥哥超級厲害,大概也是我每次上課的動力:想去練練球技,而且桌球能跟厲害的人打,那個手感真的不一樣,可以恣意的揮拍,基本上只要姿勢正確球打出去都是舒服的,而且可以放心地準備接第二球,因為球一定會回來。曾幾何時看到我正手揮得這麼隨便?但也是很謝謝這位哥哥,不然要期中一分鐘 100 顆反手、期末一分鐘 100 顆正手我應該也是有問題。。

最後,沒想過居然能在班內小組賽打到第三名,拿到六包小熊餅乾的感覺真讚!

# 大三專題

說實話,Neokent 這邊有一個很好的福利是直接對上 Neokent 開會,而不是跟著學長姐做事,這種直接的感覺對於專題進展來說真的很有幫助,雖然每個禮拜一資安上課壓力就很大了,還要接著去辦公室吃飯 meeting 壓力更大。。

做研究是什麼樣的感覺,整學期的時間一半在讀 paper,一半在想演算法,說實話沒有很深刻做研究的感覺,可能是覺得自己想出來的東西沒什麼吧!之前看過有人說第一次讀 paper 的人會一個字一個字讀進去,所以看很久,但第二篇開始就不會了,感覺我就是這種人,那時候剛開始接觸 CPABE 就真的從 abstract 跟 introduction 開始讀,然後發現根本一堆東西不知道,只知道出了很多人名,每個人都做了一些些事情,但那些事情在幹嘛根本不知道,結果最後被說 introduction 是床邊故事?不過真正開始有做專題的感覺大概是在成功看懂一點點 CPABE 那套機制怎麼出來的(BTW 那時候我超開心 meeting 有東西可以說,結果 Neokent 直接說這部分我可以跳過嗎,他不想聽,那是我這禮拜唯一成果的說),後面讀證明、想演算法就比較有在軌道上。但現在做的這套演算法說實話也不是多厲害,反而效率差得要命,是不知道能不能撐過下學期就是了

聽說做密碼學的人很帥,因為別人都聽不懂他們在說什麼,我現在做密碼學,我可能連我在說的東西都不知道是什麼了。。

還是要謝謝 Kenneth 大二時答應跟我一起做專題、每個禮拜陪我想 meeting 要說什麼、一起在很冷的禮拜五在誠正中庭寫演算法。也謝謝 Neokent 老大的悉心照料,一個人接了超過十個學生真的很扯,但該顧到的地方其實都有顧到了。當然還有 Neokent 門下做研究的弟子們,尤其 Andy 老師跟深深,每次沒想法真的就是跑去找他們求救,雖然 Andy 老師說出來的東西我聽得懂的應該一半左右而已

還有一學期,希望一切順利!

# 軟體工程

對軟工是期待的,感覺就是師大資工大三學生必經過程,但也是緊張的,因為修課後聽說會度過很多一天超過 24 小時的日子

從來沒有想到今年軟工題目是手遊,老實說看到主題是手遊其實有覺得跟前幾年相比比較簡單,因為是大多數人熟悉的題目,實作起來應該輕鬆一點,而且理想中測試的時候因為是玩遊戲,應該不失樂趣,這邊先說事實證明我錯了,每個主題都有他難的地方,而且真正的測試會是自動化,才不是真人下去玩,雖然如果我是測試組測試這樣做可能比寫自動化工具省時間?

就簡單說一下我負責的部分:玩家配對。一開始我們秉持著不要重新開發輪子的原則,決定使用 Unity 現有的函式庫開發,因此花了大半學期學習 Unity Lobby, Unity Relay, Unity Matchmaking Service 等功能,也嘗試使用官方提供的範例程式逐步修改,直到變成適合我們的專案,但礙於 Unity 本身版本更新速度太快讓我們採用的 3.9 版與範例程式的 3.4 版有些微落差,在使用範例程式時要顧及版本差異就顯得略為麻煩;又範例程式所做到的效果與我們專案的需求也不是百分之百符合,所以花了很長一段時間在處理如何把範例程式搬到我們的專案中,處理「搞懂範例程式、將 code 轉換成我們專案」算是我們遇到最大的問題。就結果來說,我們沒有開發出來,所以算不上擁有甚麼解決方案,但如果說重新開發,應該會從頭就不用內建函式庫,而是去了解 server 怎麼寫,直接去處理這部分。

其實軟工想寫很多的,但時間似乎有點遠了,很多經驗還是放在心裡,等下一次機會來的時候再拿出來展現吧!現在機會是來了現在機會是來了,就能做多少吧!

# 家教

延續上學期的家教,這學期課程主要著重在三角、指對數和向量,原以為地獄會是指對數,沒想到我家弟弟在指對數的表現反而最好,甚至考得比我好,不知道是我的問題還是出題老師問題了,相信壢中朋友應該都印象深刻!

要說這學期家教有沒有進步,我覺得沒有。。到後面還是跟上學期一樣亂來,越來越沒有理清那個順序,最想說的是向量那邊,明明可以很有邏輯的上下去,但給我那種上法我自己應該也會覺得很亂吧!

教學過程中有簡單的教法也有困難的教法,簡單的教法會讓老師變得比較輕鬆,但可以確定那是我在高中的時候不喜歡的方式,不過如果用困難的方式上,似乎還是要看學生的程度,畢竟不是所有人都跟我一樣超熱愛高中數學證明,講證明對學生來說超無聊的。。

教育真的不容易啊!每個地方都有好多該注意的小細節,還是應該要好好去檢視每一次上課不足的地方,一步一步調整才是

這學期上課最大的心得:上課前不開嗓整堂課就掰了,各位家教老師可以注意一下!

# 未來

願望分三個面向寫吧!

# 在資工

資工嘛!

當然是希望自己可以做出更多東西,不只是大三專題可以有一個好的結果,還希望能趕快做出一些專案,讓自己經歷豐富一點,也可以學到很多有的沒的東西,像是說要學很久的 C++ 這種基本功

資安這條路當然要繼續走下去,修完資安攻防,如果再加上下學期的資訊安全應該會對資安更有想法,應該是不會打退堂鼓吧!

這邊先許兩個願望,暑假要找到實習,強迫自己多做一些事情,另外就是隔年的碩班,不管推甄還是考試,都希望會有不錯的結果

2024,應該也有很多事情會發生!

# 在教育

教育嘛!

家教還是得好好上,尤其弟弟邁入高二下也差不多該準備學測了,不只我壓力大,他壓力也要來了

教程還剩一堆學分,剩下的三個學期就算累好像也不能說不修課,所以能修就盡量修吧!希望還是能從教程中遇到一群好人,學到很多酷東西,最好是畢業前順利把課修完!

PASSION 那邊,應該真的要等大四吧!有點等不及想回去接觸那群孩子了!如果有機會,我下學期或暑假一定去花蓮找你們!

# 其他

其他嘛!

希望下學期還是能跟好朋友們一起讀書、一起寫作業,這學期的感覺真的很棒!

另外,還是希望每學期都能做一些不一樣的事情,寫這篇的時候已經找到了,等到時候有成果再來分享到底做了什麼!

一切順利!


References:
Cover from here