1 of 44

「進階電腦系統理論與實作」

課程說明 (2017 Fall)

Jim Huang (黃敬群) <jserv.tw@gmail.com>

台灣國立成功大學資訊工程系

2 of 44

有了Wikipedia後,文組和理工

人之間的距離縮減

  • 2016年第4季Chanel大秀的主題是Data Center Chanel
  • 以前測驗一個人是否具備電腦科學知識,就是拋出些經典的演算法題目,不過現在幾乎都可在極短的時間內找到
  • 理工人不僅得解決「眼前的問題」,還要「持續解決更多更深入的問題」才行

Source: https://www.facebook.com/marieclaire.tw/posts/10154530051917744

3 of 44

駕馭資訊科技的門檻大幅降低,你的價值呢?

  • 《暮光之城:無懼的愛》系列電影的女主角 Kristen Stewart 最近發一篇人工智慧相關的論文“Bringing Impressionism to Life with Neural Style Transfer in Come Swim”

Source: https://qz.com/889668/actress-kristen-stewart-yes-that-kristen-stewart-just-released-a-research-paper-on-artificial-intelligence/

4 of 44

教學目標

  • 「哥教的不是知識,是GUTS

讓學生有能力、有勇氣面對資訊科技種種挑戰

  • 學生就算撕掉畢業證書,一樣能大方展現自己的專業和視野,獲得內行人的認同
  • 系統程式在台灣科技產業有迫切需求,但大學院校對此往往無法有效進行。消弭產學的鴻溝

5 of 44

測驗自己的C語言能力

  • 計算表示式 1 << 2 + 3 << 4 的結果
  • 完全不使用任何比較器(comparator)、不透過加減法,以位元運算子實作 x == y 等價的表示
  • 考慮某些硬體平台執行乘法的時間較長,我們會以 (x << 5) - (x) 取代 * 31,那麼 * (-6) 該如何用shift搭配add/sub實作呢?

6 of 44

誠實面對自己

從Data到Information,報告結束後,還剩下什麼呢?

沒有動手實踐的話,連簡單的C程式都無法開發出來!

這樣你憑什麼做研究呢?

就算讓你接受正規資訊教育,但最終成果毫無強度可言,憑什麼要求企業老闆給你較高的薪資呢?

Source: https://twitter.com/TheSmartJokes/status/896884082809819137

7 of 44

「證書」的思考

  • 我不會說「學歷無用」,而是強調「沒有強度的學習或學歷,不要也罷
  • 證書的英文是certificate,也就是證明,證書只說你繳過註冊費並在某時畢業,不代表能力
  • 憑証書找工作,真的很瞎

「書寫者最困難的地方在於你寫了一輩子,但你不知道自己是誰,你寫了一輩子卻沒有一句話被人記住。」

—— 霍俊明

8 of 44

隱性的「戒嚴」

  • 蔡志浩博士在2017年7月8日表示:

再過一週,台灣解嚴就滿三十年了。但是人心還在戒嚴。

不是政治,而是人們不去探索與創造新機會。

仍舊期待被提供工作,被教導生活,被國家照顧。

Source:

https://www.gvm.com.tw/Boardcontent_32033.html

9 of 44

紙上得來終覺淺,絕知此事要躬行

白話文:書本上得來的知識感到膚淺,要透徹地了解某事物就一定要親身實踐

出處:南宋 陸游《冬夜讀書示子聿》

Marvin Minsky (1927-2016)

麻省理工學院人工智慧實驗室的創始人

10 of 44

誠實面對自己

「不懂不可恥,不學才內疚」 --〈30秒過後〉

很多人耳聞「世界上可以分成10種人:懂二進位的人,以及不懂二進位的人」這笑話時,都會認為自己是前者,但在大學囫圇吞棗,就能夠理解二進位,得以和電腦對話嗎?

Source:

https://twitter.com/omgthatspunny/status/755719954507370496

11 of 44

檢驗自己對二進位的認知: Count Leading Zero (clz)

以下C程式可計算一個32-bit數值,二進位值開頭有幾個零

int clz(uint32_t x) {

int n = 32, c = 16;

do {

uint32_t y = x >> c;

if (y) { n -= c; x = y; }

c >>= 1;

} while (c);

return (n - x);

}

能否改寫以避免迴圈?又,這樣的clz運算有何應用?

https://twitter.com/ProductHunt/status/745051306386202624

12 of 44

我們關注什麼?

著重於21世紀對於大規模應用、大量資料分析,以及各式高效能系統的設計,並從小處著手

本學期嘗試回顧電腦科學軟體、硬體,及數學等基礎知識,帶領學生以專業解決真實世界的各項難題。

13 of 44

光是Linked List就充斥著大量你未曾思考過的議題

過去concurrency(並行)parallelism(平行)議題歸類於分散式運算,相當「高大上」,現在完全不是這麼一回事。

在軟硬體技術高速發展的今日,哪裡有異質多核心的環境呢?有,就在你我每天使用的智慧型手機中。

我們將思考concurrent資料結構操作,這是許多雲端運算背後的原理。

Scalability: 當服務規模(設備數量、自動化操作次數)的負載增長時,系統能被擴展來滿足需求(彈性擴展服務能力),且不降低服務品質

14 of 44

不用急著搜尋關鍵字,你可能沒學會C語言

考慮以下程式碼:

#include <stdio.h>

int main() { return (*******puts)("Hello"); }

能否編譯並執行呢?若可,為什麼呢?

為了解釋前述程式,我們需要重新學習C99規格!

第一手資料學習:大文豪寫作都不免要查字典,庸俗的軟體開發者如我們,難道不需要翻閱語言規格書嗎?難道不需要搞懂術語定義規範嗎?

Source:

https://twitter.com/Hahapoem/status/877562031741607936

15 of 44

誠實面對自己,從現代C語言開始學

  • ISO/IEC 9899 (簡稱"C99")
  • 在規格書搜尋"object",共出現735
  • 搜尋"pointer",共出現637

但許多人往往不談object,而急著談論pointer,殊不知,這兩者其實是一體兩面。

依據C99 [6.2.5] Types

“Array, function, and pointer types are collectively called derived declarator types. “

什麼?!array, function, pointer這三者竟有關連?

16 of 44

如果凡事僅是走馬看花,那根本

不會有深度可言,自然不可能

培養出任何核心競爭力,

當然在職場沒有話語權。

有能力才會被人尊重!

Source:

https://twitter.com/FreeMemesKids/status/883071762304512000

17 of 44

編譯器最佳化

告知gcc編譯器採用C11標準,用預設編譯組態,看得到輸出有abcde字串 ☞

命令列的-O3表示開啟編譯器最佳化,結果abcde字串連同89離奇消失?! ☞

memcpy of a string literal is converted to store of a long double value. long double has 4 bytes of padding and the corresponding chars are lost. Plus this particular long double value is abnormal and gets munged by gcc losing 2 more chars.

18 of 44

這世界不會等你

最初由英國遊戲公司Core Design開發的一款冒險遊戲「古墓奇兵」(Tomb Raider),現已發展為跨媒體品牌,這20年間見證了軟硬體技術驚人的進展

可是你就算到了資訊工程系就讀,還是不懂箇中原理呀 (*茶*)

Source:

https://twitter.com/9GAGTweets/status/903925521536385024

19 of 44

這世界不會等你

iPhone X在單核心效能評比已超越內建Intel Core-i5的MacBook Pro (2017)

iPhone 7單核效能和內建Intel Core-i7的MacBook Pro只差8%

可是你連處理器都不懂呀!究竟要拿什麼東西來戰文組呢?

承認吧,你只是當年數學考試分數較高,對電腦的認知仍非常有限

https://thenextweb.com/apple/2017/09/12/apples-new-iphone-x-already-destroying-android-devices-g/

20 of 44

誠實面對自己!

理論和實做本來就是一體兩面

不要再說「學校只教理論」這種鬼話,你可能連是否理解理論都說不清楚

https://twitter.com/StoryInPicture/status/680983964094300160

21 of 44

25年始終默默支持你我生活的ARM

ARM公司授權給全球各式廠商的ARM處理器出貨量達到860億。

以年份對應的出貨量來說,1997年約為900萬,而2014年則是120億,隔年則持續成長到150億。

https://yourstory.com/2016/07/arm-holdings-story/

22 of 44

還有無所不在的Linux,也屆滿25歲

1991年8月25日,當時年僅21歲的赫爾辛基大學學生Linus Torvalds在新聞組貼出訊息,表示自己正在開發一款免費的作業系統,同年9 月17日發布Linux核心的0.01 版Linux。

Linux 源自80386個人電腦,扣除桌面系統以外的領域,幾乎都獲得巨大成功,舉凡手機、伺服器、超級電腦、防火牆、路由器、火星探測器、娛樂影音設備,甚至ARRC也採用Linux作為火箭控制系統的基礎。

據Linux Foundation統計,Linux核心程式碼超過2千2百萬行,每日新增4600多行,每小時收錄7.8個程式修補,9到10 周即推出新版作業系統核心。全球有來自1300多家公司、超過13500名開發人員貢獻Linux核心開發。

https://www.facebook.com/itsfoss/photos/a.182637675210341.43761.115098615297581/

758109827663120/

23 of 44

我們該做什麼?

蔡志浩博士:

  • 不要花太多時間追逐看起來很實用的專業。世界變化太快,這類專業多半存活幾年就會被取代。你還是要能從本質上了解現象與知識的關聯,才不會被每天冒出來的新詞迷惑。良好的基礎科學訓練仍然是把實務專業做好的基礎。
  • 啞鈴讓你變得更強,但它們本身不能幫你解決任何問題。教育就像健身,目的從來不是學什麼,而是訓練出能夠面對未來挑戰的強大自主學習能力。學用落差是假議題。

24 of 44

回顧資訊科技產業

  • 曾經全球接近一半的IC設計公司設立於台灣,供應從類比到數位整合的多樣解決方案,再者,台灣人設計的資訊系統也在工業控制等高品質要求的領域使用
    • 沒必要成為國外廠商的抬轎
  • 30年前,個人電腦上很大比例的軟體由台灣人開發,舉凡中文系統、文書編輯器、排版系統、繪圖程式、資料庫管理系統等等
  • 20年前,採用GAIS技術的搜尋引擎就是世界上幾個影響重大的先驅;台灣人對於Linux與BSD的貢獻遙遙領先亞洲諸國
  • 可惜這十餘年間,台灣的狀況完全改觀
    • 在系統軟體發展的短視、與開源世界脫節
    • 加劇導致台灣資訊科技產業的困頓

Source:

https://twitter.com/iingwen/status/900711672733507585

25 of 44

策略:擁抱開放原始碼技術和積極展現實力

  • OpenStack Foundation董事程輝:「每天泡在開源發展,每天都跟大牛合作,不牛逼也難」
  • 貿然投入Linux核心一類大型專案開發很難,於是改用漸進式開發模式
    • 全程使用開源技術作為教學工具,培養學生開源素養
    • 透過在Linux Foundation的眾多研討會發表的方式,獲取認同和知名度

實際產出

  • 2016年參與過本課程的畢業生到Google和阿里巴巴集團擔任工程師,12位到聯發科技,前20%的學生年收入超過120萬元
  • 從2015年開始,計有9位學生到國際頂級研討會發表研究成果
  • 和旅居矽谷的華人工程師交流,畢業生到國內外一流資訊科技公司服務

26 of 44

胡適:「發表是最好的記憶」

(下方為參與過系列課程的學生,其中6人在大學畢業前就躍上國際舞臺)

  • 2015年
    • 廖建富: 在Linux Foundation舉辦的Embedded Linux Conference發表uClinux最佳化成果
    • 林展翔: 在Real-Time Linux Workshops發表Xenomai 3在ARM處理器的效能分析
  • 2016年
    • 張家榮: 在Linux Foundation舉辦的OpenIoT Summit發表uVisor開發成果
    • 高魁良: 在Linux Foundation舉辦的LinuxCon Japan發表Linux container成果
    • 鄭聖文: 在開放原始碼機器人研討會ROScon發表低成本自走車雛型
  • 2017年
    • 呂紹榕: 在世界最大的開放原始碼研討會FOSDEM發表嶄新的IoT作業系統
    • 楊宗凡: 在Linux Foundation舉辦的Embedded Linux Conference發表即時Linux效能工具與改善方案
    • 許耕福: 在Linux Foundation舉辦的Open Source Summit發表高度可擴展動態記憶體管理機制
    • 黃宇強: 在Linux Foundation舉辦的Open Source Summit發表以ARMv8為基礎的雲端基礎建設

27 of 44

只是出賣勞務來

支撐自己生活,

可以過多久?

你真以為學長姊去XX電工作,主要以智慧財產來盈利嗎?

用生命和健康換來房🚗地位,然後呢?人生真有選擇嗎?

你我在21世紀都該以專業獲利(技術授權、商業模式、顧問諮詢),並非一味出賣勞務

Source:

https://twitter.com/andyyeung12/status/893640794464071681

28 of 44

本課程可解讀為電腦科學「總複習」

回顧(或說「重新學習」)電腦科學背景知識

  1. C語言:你未曾學會過的種種
  2. 資料結構和演算法
  3. 線性代數
  4. 離散數學
  5. 編譯器原理
  6. 作業系統概念
  7. 數位邏輯
  8. 處理器設計

只有耐心圓滿完成簡單工作的人,才得以習得輕易完成困難工作的技巧。

Only those who have the patience to do simple things perfectly ever acquire the skill to do difficult things easily.

18世紀德語劇作家兼詩人 Friedrich Schiller

Source: https://twitter.com/WarrenWhitlock/status/876025077178957824

29 of 44

基礎穩固後,我們也會探討加密貨幣、區塊鏈、JavaScript / WebAssembly、物聯網等熱門主題,屆時大家會發現穩固基礎的重要

Source: https://twitter.com/CryptKeeperBTT/status/887310320745803776

30 of 44

數學的魅力,點亮每個人的生命

「我們當中的絕大多數人花了人生的十二年時光 —— 六年小學、六年中學 —— 被數學摧殘。我們只知道數學是敲開大學校門的一個敲門磚,自打上了大學之後,這個東西就被我們當作人生當中最痛苦的經驗,被刪除了。我們這一代人也想吶喊:「數學滾出高考,好不好?」,但是,直到我讀了《費瑪大定理》這本書,我才知道,原來數學是如此有魅力,它的魅力是光芒萬丈,吸引那麼多智力卓絕的人,把自己的性命獻奉上去。整個數學史,就是一曲波瀾壯闊的史詩,這個時候我才知道數學的好,讀完這本書我才知道,人類知識領域、智力領域的任何豐碑,從來都不是用強烈的目的性才創造出來的,它的每一塊磚、每一塊瓦,都是由興趣堆積出來的。興趣不僅導致了最後的成功,而且點亮了其中每一塊磚、每一塊瓦,每一個人的生命。」

2014年第27集〈費馬大定理

31 of 44

不能掌握數學原理者,就是新的文盲

  • 「文盲」不是說一個人笨,而是無法掌握得以跨越物理限制的工具、方法,或通訊媒介,所以古代的「文盲」沒辦法跟視線以外的人對話,也無法從前人的經驗學習
  • 21世紀的「文盲」只能整天喊著「雲端」、「物聯網」等 buzzword,自己卻有如「和尚看春宮」,什麼事也作不了,遑論要跟這個世界對話或互動
  • 數學就是引導我們,重新理性地看待世界的重要基礎

「過去說寫程式用不到數學的這些人看到 Machine Learning 都後悔了」 —— c9s

未來學趨勢大師Alvin Toffler 曾說:「在第三波中,文盲並非不識字的人,而是不能再學習的人」

32 of 44

具體來說,我們引導學生理解並「體驗」以下:

PEN = Portability, Efficiency, Negotiation

  • 電腦系統的背景知識
  • 現代資訊系統的設計考量
  • 高效能多核心程式設計
  • 高可靠系統、形式化驗證
  • 編譯器和虛擬機器

Source: https://twitter.com/9GAGTweets/status/787689996539027456

33 of 44

特別聲明(1)

我的教學技能只有兩個,請不要期待太高:

  • 講古 ☞從歷史觀點,解釋技術背後的發展脈絡和原理
  • 罵學生 ☞加速學生「誠實面對自己」的過程

基礎知識你本該知道,我當然不會教你,但我會指出不足認知錯誤之處:

  • 微積分、普通物理、線性代數、離散數學可用在哪?
  • 以往學習到的資料結構及演算法如何影響你我每日生活?
  • 數學、物理、程式語言與電子電路等基礎科目,究竟為何而學?

34 of 44

特別聲明(2)

  • 部份教材提供錄影,授課時段主要作「師生互動」
  • 本課程不歡迎「玻璃心」
  • 真強者不會在意世俗的批評,而著重「自己對所處產業的影響與貢獻」
  • 你在國立大學就讀,要想想納稅人「被迫」投入多少資金在你身上,如果�發現自己不適合這個科系或環境,不用4年就知道,不要死撐,否則沒臉面對廣大的納稅人
    • 我就是「為納稅人而教」,才拋開賺大錢的機會,來這跟你們相處,不是為了什麼理想

35 of 44

https://www.facebook.com/5iakuei/photos/a.138450382892440.25394.134451469958998/916128038458000/

36 of 44

課程期待的學生特質

任何人都可選修/旁聽,但請尊重授課要求,需要「課堂互動」,敬請配合

  • 不懂就 ( 重新 ) 學,不會急忙裝懂,願意「誠實面對自己」的人
  • 樂於助人,願意分享所學知識
    • 在打群架的年代, 隔壁的同學就是夥伴 !
  • 願意花時間寫作業,且自主學習課程所需的前備知識及課程參考資料
    • 前5週,每週應該投入超過16小時(不含聽課)
  • 願意花時間和身邊的同學進行討論

我不是妙X,但可以叫我「腦禪」,請用大量的作業供養我 -- jserv

37 of 44

不建議選修的學生族群

  • 覺得自己無論怎麼努力,仍比隨便一位台大資工系畢業生還差的人
  • 覺得光靠著拿著成功大學的畢業證書,就能在資訊科技產業有尊嚴地享有優渥生活
  • 覺得每週看著游泳教練或鋼琴教師表演,但自己不動手,卻又妄想能學到什麼技能的人

Source: https://twitter.com/TweetMe4Moji/status/777333082839842816

38 of 44

課程密度

  • 前5週是密度最高的時期,我們會上滿18週的課程
    • 不是這門課程很操,是你過去欺騙了自己
    • 可能會不小心從晚間一路忙到看日出,稍微休息又繼續趕工,請拿出決心來
    • 為了大家避免期末過度熬夜,現在改為「開學第一週就開始熬夜」
  • 其他時段會由授課教師引導,讓學員打造有強度的專案,最終將開放原始碼

39 of 44

  • 老頭的要求過份了嗎?他那近乎殘酷的要求為了什麼?
  • 如果沒有折磨、沒有敵意,年輕人會再次走回台上、打出可能是他一生中最精彩的節奏嗎?
  • 如果沒有折磨、沒有痛苦,這兩人最後能融為一體嗎?

還是你想說:「我這輩子從來沒輸過棋,因為我從來不下棋

40 of 44

踏實

  • 一件事新不新其實一點都不重要,關鍵是「做得好不好」
  • 人類煮飯已有十餘萬年,但至今「把飯煮得好吃」仍是一門藝術
  • 創新唯一原因是原本的不夠好;創新唯一方法是把事情做好;創新的唯一價值是它真的好到解決問題。除好之外別無他物

I'm now a 10X programmer.

Source: https://twitter.com/RichRogersIoT/status/807644258165395457

41 of 44

時間和地點

  • Sep 22, 2017 – Jan 12, 2018 (每週五) 09:10-12:00
  • 成功大學資訊工程系新館65304電腦教室 (新大樓三樓走到底)

  • Office hour: 每週末00:00-23:59 (需要事先預約)
    • 資訊系舊館一樓研究室
    • 發訊息給「Jserv與他愉快的小夥伴

「幸福」�「這邊不能進去」

Source: https://twitter.com/Leto19871987/status/792060971644624896

42 of 44

評分方式

  • 期初測驗: 20%
    • 在2017年12月底前,可反覆申請補考、重新測驗
  • 隨堂測驗作業 + 分組專題/報告 : 30% ( 針對資訊產業需技能,所濃縮的訓練 )
  • 學生自我評量 : 50%
  • 加分 :
    • 對開放原始碼的系統軟體專案做出程式貢獻:

一旦經授課教師認可,最多加總分30分

Source: https://twitter.com/HistoricalPics/status/844164254093770755

43 of 44

課程資料

44 of 44

開始挑戰前,請思考這席話

「夢想到底是什麼?有的時候,我覺得夢想遭到濫用。而夢想和白日夢的差別又在哪裡?對我來說,夢想,缺乏一個步步為營、量力而為的態度,以至於夢想一直都像夢一樣,你實在說不出一個所以然,也不知道如何實現他,你也沒有實際的目標,遇到抉擇的時候,你還是選擇玩樂,以至於,夢想就真的成為了一個夢想」 -- c9s