「Linux 核心設計」/「Linux 核心實作」: 全台灣唯一探討最新 Linux 核心技術的正式大學課程

各位好,我是資訊系黃敬群 [1],自 2012 年回母校任教至今,希望將自己二十逾年來在資訊科技產業的所見所聞分享給有緣的學生。有鑒於產業對於 Linux 核心技術的迫切需求,我在資訊系/資訊所開設「Linux 核心設計」和「Linux 核心實作」課程 (二門課程的教材完全相同,之所以建立二門課程,是希望學生可拿到更多學分和避免衝堂,以下簡稱「Linux 核心課程」) [2],不僅是全台灣唯一探討最新 Linux 核心技術的正式大學課程,也直接將產業的專業需求拆解為一學期的學習進度,我保證充分參與 (定義為完成全數作業和報告要求、高分通過大部分的隨堂測驗,和著手貢獻程式碼到 Linux 核心) 本課程的學生,一定可到一流的資訊科技公司任職,我也會適度推薦優秀學員給企業主管。 「Linux 核心課程」的策略是,與其包羅萬象地探討 Linux 個別子系統,我們更在意能否引導學員強化必要的基礎認知,如 C 語言程式設計、閱讀規格書、並行程式設計、Linux 核心主體設計概念、檔案系統和介面,並且藉由工具來理解複雜的系統 (而非臆測)。考慮到學員的就業環境,也會探討裝置驅動程式,像是無線網路 (cfg80211)、多媒體 ( V4L2),及虛擬化 (主要是 KVM) —— 前述都可對應到科技公司的職務描述 (job description),讓你畢業前就有足夠的能力和視野,得以滿足產業需求,消弭「產學落差」這個假議題。 課程著重於 21 世紀對於大規模應用、大量資料分析,以及各式高效能系統的設計,並從小處著手,嘗試回顧電腦科學軟體、硬體,及數學等基礎知識,帶領學生以專業解決真實世界的各項難題。我一直相信:教育的使命之一,是讓畢業生真正被這社會需要,從而創造新的需求。 你或許會遲疑:「我連 Linux 上的應用程式都沒寫過,可選這門課嗎?」嚴格來說,Linux 只是作業系統的核心,其上可運作多種程式,搭配不同的程式開發框架更讓應用程式變得目不暇給。反過來說,作為依循 POSIX 這項 IEEE 規範的作業系統核心,Linux 核心提供 (絕大多數) 有明確規範的系統呼叫,儘管變革快速,但始終堅持這項原則。Linus Torvalds在 2001 年 10 月說過: "From a technical standpoint, I believe the kernel will be"more of the same" and that all the _really_ interesting stuff will be going out in user space.”「Linux 核心課程」的定位是帶著學員探索Linux核心的奧秘,其中不免會接觸到經典的系統呼叫,例如 fork 和 mmap。為免去「舉燭」,我們安排大量的實作和分析訓練,引導學員從使用者層級 (user mode) 到核心層級均有一定掌握度。抱持「做中學」的態度進行即可 —— 遇上什麼不懂,就去補強什麼,反正你原本學習的東西可能也不扎實。 課程採用美國電腦科學系排名第一的卡內基美隆大學 (CMU) 資深教授編撰的 Computer Systems: A Programmer's Perspective (縮寫為 CS:APP) [3] 教科書為主軸,把程式設計及最佳化、數位電路基礎、指令集架構、組合語言、儲存裝置、連結器與載入器、行程和執行單元、虛擬記憶體等等自各不同的學科的核心知識攪和在一起,並以程式開發者的視角呈現。過程中,我們針對各大資訊科技公司的軟體工程師專業技能需求,斟酌調整課程的涵蓋範圍,還會不時提醒科技公司面試的「必考題」(這句不精確,應該說常考題目以及應答的技巧)。 歡迎選修和旁聽,沒有特別的限制 —— 記得寫作業。本課程也安排線上説明會,歡迎參照:
(事後安排錄影,請留意 YouTube 頻道) 注意事項 a. 你來這裡最主要的目的是為了「翻身」,當然該有對應的付出,我和助教會盯著你 b. 學員所有的作業和報告都公諸於世,接受社會各界的指教,見證學員的成長 c. 本課程上滿 18 週,當週若遇到國定假期不停課 (斟酌調整授課時段),額外加課 2 次到 7 月 2 日才停課 (繳交成績的前一日) [1]
[2] 課程大部分的教材都可公開存取:
[3]
LikeBowWow
153
52 comments