交大資工所戊組第一學期 心得

set: 雜記
category: 雜記
tags: 雜記
description: 交大資工所戊組第一學期 心得
created_at: 2023/01/01 18:00:00
updated_at: 2023/02/06 00:00:00

cover image


前言

新年快樂~ 時間過的真快,學期間忙到完全沒時間再去碰東西(我左方一整疊書還堆得好好的,都生灰塵了QQ)。

這學期還沒碰論文相關的東西就快忙死了,很感謝指導教授先讓我專心修課。


碩班總共要修 24 學分,也就是 8門課(13學分)

也就是說一般來說兩年畢業(4個學期 = 2 × 4)

但是通常應該也不會拖到二下還在修?(被當就等延畢),所以可能的選擇是

  • 3 + 3 + 2
  • 4 + 3 + 1
  • 4 + 4

等等...之類的,不過我這學期就先修了五門課。

至於說為什麼要這麼拚一下選五門,可能有以下幾個原因?

  • 反正現在沒了二一制度,趁碩一還沒什麼論文壓力先多修一點,就算被當沒過也不至於被退學,學期間多少也有學到點東西
  • 之前待北商太涼有了錯覺

不過說是說五門課,實際上其中一門課是戊組的必修課(實習),所以要說 loading 的話應該是 實習 + 四門課的 loading


我修的課

  • 計算機網路
  • 圖形理論
  • 計算機架構
  • 網路程式設計
  • 校務系統開發與管理(一)

再談為什麼修這些課之前先說一下畢業條件(除了學分)

  • 大學是否修過演算法、作業系統與計算機組織三門課
  • 必須修過(且通過)一門英文授課的課程

所以入學時有交新生背景審查,當中就要調查大家是否修過那三門課,如果沒修過的話碩班要修完才能畢業(看要修大學部的還是研究所的都可以,總之就是要修),然後計組是可以用計算機架構來抵的,雖然我已經修過計組了。

而修的原因就是入學的時候跟我同學討論要修什麼課,因為他沒有修過計組(不過他自己學過),而計算機架構剛好又是英文授課(所以我就打算抱大腿了)。


計算機網路

授課老師: 趙禧綠

評分方式:

  • 期中: 30%
  • 期末: 35%
  • 期末報告: 35%

這門課是我修的這些課平時最涼的一門,完全沒有作業,但是 loading 就會壓在期中期末上。

這門課的期末報告比較特別,是你要自己找一個網路相關的主題來做,然後是要實作寫 code 的那種。

一開始是預計要實體報告,但是後來老師評估修課人數太多會花太多時間,所以今年改成交報告的形式。

至於我的報告做什麼,我也還沒做,1/13前要交


圖形理論

授課老師: 林政寬

評分方式:

  • 出席: 10%
  • 作業: 10%
  • 期中: 40%
  • 期末: 40%

這門課對演算法有興趣,或是你是選手出身的的應該都不太難,上課認真聽都跟得上,老師很認真XD

不過期中期末是重了一點,40%真的很可怕QQ,不過考試的內容應該都是上課的內容,也就是上課認真聽有跟上,作業有做,應該都不是太大問題。

平常不太點名,老師覺得點名很浪費時間,偶爾抽點(單號雙號?點一半?),但是之後越來越接近期末感覺點的頻率有稍微上升,甚至有特別冷的天氣就特別給他點一下

這門課雖然會吃到一點數學,不過證明的方法不是唯一,意思對了就有分數(應該吧我猜,至少我覺得XD),所以數學不好,有興趣還是可以修。

不過說來慚愧,快接近期末的時候正忙,後幾次上課吸收不是很好QQ,所以最近應該會來看課程錄影複習,這門課的考試比較晚,是在第 918 週,(也就是我 1/10 還有考試QQ)。


計算機架構

授課老師: 單智君

評分方式:

  • 作業: 10% ~ 20%
  • 期中 + 期末: 50% ~ 70%
  • 期末報告: 20% ~ 30%

這門課的評分方式不固定,所以比較難評估自己的分數夠不夠QQ,這也是我這學期最沒把握的一科。

雖然修過了計組,不過因為是全英文授課(上課就聽不懂),加上這門課本來就不是我的強項,很感謝我同學願意在期中期末前救我,雖然考出來的成績還是不太理想QQ

不過雖然這樣我還是讓自己每次都去上課,至少沉浸在那個環境下聽,吸收多少是其次,雖然很可惜沒有出席成績

這門課作業會用抽的讓大家做,每個人分配 2 個題目交,其他題目盡量還是要練習,因為你不做考試可能就不會(?)

至於期末報告則是分組(2人一組),然後找一篇論文報告,用錄影的方式(全英文,20~30分鐘,兩人平均分配),所以當初也是感覺很頭痛,不過至少不是實體報告(那我第一週應該就退掉了),這裡也是很感謝我同學幫助很多。

比較麻煩的是期末會拖得有點久,以今年的時程的話是

  • 1/2 交報告錄影
  • 1/12 交心得單(看別組的影片+提問至少4個問題)
  • 1/18 回覆別人提的問題

會今天生出這篇文章就是因為剛好把影片處理完了,放下一顆大石頭


網路程式設計

授課老師: 吳毅成

評分方式:

  • HW × 1 + Project × 4: 約80%
  • 期末考: 20%

這門課好像是交大招牌課? (很久很久之前網路上找評論的時候看到的)

Project量很大,作業(HW)基本上是送的,分數應該佔(5%~6%左右的樣子),其他平均分配到四個 Project

作業規定要用 C/C++ 去做,而我之前並沒有在寫 C/C++ ,我的經驗大概就

  • 看演算法的書還可以,畢竟就幾個核心邏輯?
  • HelloWorld

所以修這門課也是當作一個實驗,同時負擔五門課加上不熟課程要求的程式語言,有沒有辦法完成這門硬課

當初選這門課還有幾個原因

  • 真的想學
  • 他只看作業不看出席,身為一個選手強就在實作

然後這門課有遠距連結,然後他開在晚上到九點多,身為一個天天通勤的學生我不想那麼累(加上那天又只有那門課),如果9點多下課回到家我應該快12點了XD,所以我一次都沒去過,都在家上課,除了 Demo Project 還有期末考。

不過有個缺點是老師為了鼓勵學生到場,線上的品質不是很好,例如不見得會有黑板的畫面、偶爾會有收音的問題(前幾次印象中比較慘,後來有好很多)。

這門課的四個 Project 需要到場 Demo 評分,所以會消耗掉你的四個禮拜六(預計),第一次上課老師也會說如果你認為那四個禮拜六對你很重要你不要修XD

不過時程只是預計,可能有點微調,例如這次有一次的 Demo 在禮拜三,也有一次 Deadline 延期。

一個 Project 大約是兩個禮拜,每個 Project 可能會花你 >= 10 hours

我的 Project 不是寫的特別好,所以就不放上來了,不過還是可以說說大概是要做些什麼東西(精簡過,修課會有給 Spec 看)。

  • NP Shell
  • Remote Working Ground Server
  • HTTP Server and CGI Programs
  • SOCKS 4 Server

NP Shell

主要是實作 Pipe(|) 的功能,就是你在 Linux 寫的

cat xxx | grep yyy

類似這種東西

比較特別的是有數字 Pipe,可以把 stdout 轉到 n 個指令之後,例如(直接貼 Spec 上的範例),假設 number 是幫你加行號

% removetag test.html | number
1
2 Test
3 This is a test program
4 for ras.
5

再來是把輸出導向到1個指令後

% removetag test.html |1 # pipe STDOUT to the first command of next line
% number # STDIN is from the previous pipe (removetag)
1
2 Test
3 This is a test program
4 for ras.
5

這樣還不夠,看我疊加

% removetag test.html |2
% removetag test.html |1
% number |1
% number
1 1
2 2 Test
3 3 This is a test program
4 4 for ras.
5 5
6 6
7 7 Test
8 8 This is a test program
9 9 for ras.
10 10

大概就是這種感覺。

再寫下去篇幅會太長,就不每個 Project 說明了(之後有機會在拿一篇出來說明細節),不過要提的是第一個和第二個會有關聯,三跟四會有關聯,所以基本上一掛了二就掛了,依此類推。

然後今年 Project 要多做一個 Shared-Memory 的版本,之前只要做兩個 Server,今年變成要做三個,今年也就這個作業的 Deadline 有延一個禮拜,也是我花最多時間做的一個 Project


Demo Project

作業交完之後,接近 Demo 的日子之前助教會開 Google Sheet 讓大家上去填要 Demo 的時間,一個人差不多 10 分鐘,然後 Demo 流程如下:

  • 找對應助教報到(這一次有四個助教,填時間可以填要幾號助教,有點像掛號)
  • 評分你的程式(Project 1 and 2直接跑測資,Project 3 and 4會人工測試)
  • 問你一些有關這次作業的實作細節相關的問題
  • 抽題目讓你去找位置改程式(40分鐘)
  • 改好程式找助教看,看好分數就可以走了

分數分配大概是:

  • 程式: 70%左右
  • 問答: 10%左右
  • code: 20%左右

而期末考後會有一次給大家補交(要是成績不滿意),但是補 Demo 成績會打七折,我是覺得滿傷的,以我的情形的話 Project 2 成績比較差,但我應該也不會想去補 Demo,因為感覺 CP 值不高(打七折太傷了)加上又很趕QQ(這次的情況是1/5)

至於期末考的部分則是上課講的那些,老師也說基本上不考需要背的東西(例如什麼 signal 幾號?,stdin file no 幾號? 我只是隨便舉例)

期末考前也會給一份 sample 考卷,估計大概 6~7 成都在那個上面了。

所以喜歡實作的滿推薦修的,但是不建議修了這個還修其他硬課或一堆課,你真的會很累QQ


校務系統開發與管理(一)

這門課是戊組必修,其實就是實習,然後每週(實體,期中期末考週除外)要報告工作進度,然後一學期要分享兩次技術相關的東西,我第一次報的東西是軟體測試,第二次是 Lighthouse CI

然後每個人分配到的校務系統不同,所以 loading 應該也不盡相同。

我這邊的話吃掉我滿多時間的(每週開一次會),雖然說一週表訂吃 10~15 小時,但我又做不到那種時間到就拍拍屁股走人之類的QQ

然後他們又希望在12月中下旬上線(雖然我從當初暑假剛進來就在救火?),不過最後還好,沒意外應該下禮拜就會上線了(雖然還要改東西,你沒看錯,就是一直改)。

七八月還沒有登記時數,不過從九月開始我自己被吃掉的時數是這樣(供參考)

  • 09: 83.58 hours
  • 10: 69.75 hours
  • 11: 47.5 hours
  • 12: 92.59 hours

其中期中期末考的時間是

  • 期中: 10/31 ~ 11/04
  • 期末: 12/26 ~ 12/30

我這邊的話前後端全部都是我做的(前端除了後來多出一個子功能請其他同學做),只有資料庫不是我負責(可能牽涉到學生資料)

技術的部份的話主要是:

  • 前端: Vue3 + TailwindCSS + MSW
  • 後端: Laravel + MSSQL
  • 其他: DockerGithub Actions

然後我在這次專案中正式去寫測試,盡可能追求測試覆蓋率 100%,不過也只是盡可能,像是前端因為後來加入負責一個子功能的同學,因為他沒有寫測試,所以影響到了整體的覆蓋率,但因為之前覆蓋率就都維持 100%,所以實際上並沒有掉很多,雖然看起來還是不太開心QQ

而我這邊採用的方式是,我只測 Compoent 之類重複使用的東西,不測實際的 View 呈現邏輯,畢竟需求一直變,不想搞死自己,重複利用的元件經過測試保護確定功能都正常,對於 View 來說只是使用他而已。

Test Files  52 passed (52)
     Tests  173 passed (173)
----------------|---------|----------|---------|---------|-------------------
File            | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------------|---------|----------|---------|---------|-------------------
All files       |   99.95 |     99.8 |   98.42 |   99.95 |

而後端的部分

  Tests:  115 passed
  Total Coverage ................................................... 98.9 %

有些特殊情況目前還沒測到,但我覺得那些情況好像不太重要?

例如學號查學生總不可能回來兩筆以上吧?(對我寫了 else 來處理,所以他進不去那個 branch)


一點點實習心得

這個實習的心得的話,我是覺得現在正在慢慢改變(?),之後進來的開發體驗應該會好一些,就慢慢傳下去。 (一)

因為以我的例子,負責設計的人當初沒有設計網頁的經驗(可能偏平面設計),當初第一次給版還用.ai,後來建議他使用 figma,但我也還是改了三版(上面的需求變動..)

然後我卡在中間比較尷尬就是要刻前端要等設計,要寫後端要等 DB,因為到底有什麼資料我都還不知道(因為負責資料的人要串接各處室資料),等於說沒有 interface,就算我前端用 mock api 也沒辦法先跑,後端也是。

然後最累的就是資料分散在各地,光是對資料可能就要花你一個小時(?)

太多細節不知道怎麼吐苦水了(上線前還在改東西你就知道),希望之後制度起來不要再這麼累,可以讓開發人員專心在開發上。


總結

修五門課(含硬課的話)真的會很累(雖然我想實習的影響應該也滿大的,看他那吃的時數),試想一下如果作業重疊會有多可觀(?),通常作業期限都是兩週為單位,所以重疊率還滿高?

所以我會比較建議最多還是四門吧,不要想不開


好久沒寫文章,寫起來也是好花時間,我要繼續做報告+準備期末考了

希望能夠 All Pass QQ


2023-02-06 更新

順利 All Pass 拉~~~




最後更新時間: 2023年02月06日.