--- title: CodeFree|喝一杯咖啡,輕鬆學電腦科學 - 上 date: 2022-10-04 is_modified: false disqus: cynthiahackmd image: https://i.imgur.com/ibijtxL.png categories: - "硬體系統 › 計算機系統" tags: - "計算機概論" - "讀書筆記" - "Hiskio" --- {%hackmd @CynthiaChuang/Github-Page-Theme %} <br> 今天又是喝咖啡學習系列,不過不是學程式,而是學電腦科學。筆記內容包括[上](https://codefree.hiskio.com/courses/4)、[中](https://codefree.hiskio.com/courses/5)、[下](https://codefree.hiskio.com/courses/6)三門課。 這門課看了下內文其實就是**計算機概論**,有點令人懷念的一門課...想當初算二進制算到超挫折的 XDDD 不過怎感覺這篇不是在寫讀書筆記,而是重寫了一次課程?很多東西它沒提到,是我自己忽然想到其他關鍵字就一併寫進去了 XDDD <!--more--> <p class="illustration"> <img src="https://i.imgur.com/ibijtxL.png" alt="hiskio codefree"> codefree time(圖片來源: <a href="https://codefree.hiskio.com/">hiskio codefree</a>) </p> ## CH 1|電腦的先驅:早期的機械式計算工具 這段歷史算是電腦史中的遠古史吧,想當初我好像是從馬克一號學起的?不是鋼鐵人那個馬克一號,是哈佛大學的 [ASCC MARK I](https://zh.m.wikipedia.org/zh-tw/馬克一號),等等看課程有沒有提到吧。 <p class="illustration"> <img src="https://i.imgur.com/8AtHL8c.png?1" alt="Hot Toys Iron Man Mark I"> 鋼鐵人 Mark I(圖片來源: <a href="https://www.flickr.com/photos/tales2astonish/6936821053">marvelousRoland|Flickr</a>) </p> ### 1-1|電腦之父 Charles Babbage 就是發明電腦的人? 電腦史大致可以劃分成真空管、電晶體、積體電路、超大型積體電路四個時期。但**查理.巴貝奇(Charles Babbage)** 所設計的**分析機**並不屬於這幾個時期,硬要歸類的話它是第零代的機械時期吧?所以我才會戲稱它是遠古史 🤭 嚴格說來,巴貝奇並**不是**發明第一台電腦的人;但他所設計的分析機,卻是後世電子通用電腦的先驅,也因此他才會被尊稱為電腦之父。但與其說是電腦之父,倒不如說是**通用電腦之父**可能會比較精準,畢竟歷史上可以當電腦它爹有好幾位呢,再不然電腦之祖父(?)可能也會更貼切 XDDD <p class="illustration"> <img src="https://i.imgur.com/Aor8gTa.png?1" alt="「電腦之父」巴貝奇"> 「電腦之父」巴貝奇(圖片來源: <a href="https://www.thenewslens.com/article/150721">The News Lens 關鍵評論網</a>) </p> 既然提到電腦它有好幾個爹了,我就整理一下它的親爹名單: 1. **查理.巴貝奇(Charles Babbage):通用電腦之父** 就是前面提到的那位,這邊不提了。 2. **艾倫.圖靈(Alan Mathison Turing):電腦科學之父** 這位大家應該也很熟,尤其是資工系的同學應該都對他又愛又恨?像是圖靈機、圖靈測試,還有圖靈獎都跟他頗有淵源。 <p class="illustration"> <img src="https://i.imgur.com/1e0o1hE.jpg" alt="艾倫.圖靈本人與劇照"> 艾倫.圖靈本人與劇照(圖片來源: <a href="http://kaka3011.pixnet.net/blog/post/410232427">卡卡的異想世界|痞客邦</a>) </p> 3. **約翰·阿坦那索夫(John Vincent Atanasoff):電子電腦之父** 這位大神是第一位用真空管做出電子電腦,也第一台電子電腦的發明者,這部電腦在日後被稱為阿塔納索夫-貝瑞電腦(Atanasoff–Berry Computer,ABC 電腦)。其它特點還有只能解線性方程式、使用二進制...等。 4. **約翰·馮紐曼(John von Neumann):現代電腦之父** 這位大家有很不陌生吧?傳說中的**馮紐曼模型**,這是現代所使用的電腦的基礎!理論上等等課程中應該會出現...如果沒出現...那就...沒出現吧 XDDD 不過應該很難跳過才對。 #### 單元測驗 1. **請問電腦之父巴貝奇是發明第一台電腦的人嗎?** - [ ] 是,他發明的分析機就是第一台電腦 - [X] 否,雖然他被稱為電腦之父,但他發明的分析機僅是電腦的先驅,並不算是第一台電腦 ### 1-2|「加法計算器」、「步進計算器」與「自動化織布機」的誕生 它這邊真的打算從機械時期說起...而且還是由齒輪帶動的機械開說起...剛好補一下我的遠古史 XDDD #### 加法計算器 滾輪式加法器,又稱帕斯卡計算器。由法國數學家**布萊茲·帕斯卡(Blaise Pascal)** 於 1642 年發明,用於協助父親算帳,但我看過另一個版本是為方便自己算帳而發明的。果然懶,才是推動世界發展的真正動力 XDDD 帕斯卡計算器的設計利用齒輪及槓桿原理,在其包含了一組相連的齒輪,只要在上面撥動數字,齒輪之間互相轉動後便會算出累加後的值,再顯示於小窗口上。 <p class="illustration"> <img src="https://i.imgur.com/Vy15eKF.jpg" alt="帕斯卡計算器"> 帕斯卡計算器(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 是說,數學家跟帕斯卡這個組合讓我感覺很熟悉,查了下著名的**帕斯卡三角形**果然跟他有關。另一個跟他有關的則是壓力單位**帕斯卡 (Pascal, Pa)** ,這個單位也是為了紀念他所命名的。 #### 步進計算器 在 1673 年時,德國人萊布尼茲(Gottfried van Leibniz)在研讀了帕斯卡的論文後,決心將加法器升級成有**乘除**的功能步進計算器。 步進計算器中有一連串的齒輪,每個齒輪有十個齒,表 0 到 9,每當一個齒輪轉過 9,它會轉回零,並同時讓旁邊的齒輪前進 1 個齒;做減法時,則是反向運轉;至於乘除,則是運用了累進的加減的概念! 不過這兩個版本的計算器都有相同的問題:==造價太高、需求太少==。 <p class="illustration"> <img src="https://i.imgur.com/2wI68vn.jpg" alt="步進計算器"> 步進計算器(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 是說這位萊布尼茲也是個狠人,除了有句:「**讓優秀的人浪費時間算數簡直侮辱尊嚴**」名言外。他最廣為人所知並讓莘莘學子都對他咬牙切齒的功績就是—**微積分**!他是微積分的創始人之一,現今所使用的微積分符號也都是他的版本。 :::info :information_source: **微積分大戰** 關於他跟牛頓(對!又是牛頓)的微積分大戰有興趣的,可以參考這篇—[〈世紀的審判〉](http://episte.math.ntu.edu.tw/articles/sm/sm_17_04_1/index.html)。就最終的結果看來,牛頓雖然贏得當時了皇家學會的審判,但歷史的審判卻站在了萊布尼茲這方。 ::: #### 自動化織布機 前面兩項發明嚴格說來是方便的計算工具,但仍不算電腦/計算機(computer)。由電腦構成的三要素(硬體、資料與軟體)來看,它既**不能儲存資訊**,也**無法儲存指令並重複執行**。 第一台引入這兩個要素的機器,是在 1801 年由法國人約瑟夫.傑夸德(Joseph Jacquard)為了織布而製造的自動織布機。它可用打孔卡片來記錄織布的圖樣,讓機器根據打孔卡孔的有無來控制經線與緯線的。 <p class="illustration"> <img src="https://i.imgur.com/9uz2X3n.jpg" alt="自動化織布機"> 自動化織布機(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 這台自動織布機為電腦的發展引進兩個重要的觀念: 1. **編碼**:資訊可以在打孔卡片上編碼(Coded) 2. **程式**:資訊可以儲存在卡片上,當卡片組合在一起就可做為一連串的指令。 所以嚴格說來,約瑟夫不僅是自動織布機的發明者,也是**程式設計的發明者**。 #### 單元測驗 1. **「加法計算器」、「步進計算器」與「自動化織布機」有著不同的貢獻,你可別搞混囉!請你判斷下列敘述何者正確呢?** - [ ] 加法計算器引進了「編碼」、「程式」兩種重要的觀念 - [X] 步進計算器是第一部能加減乘除的計算器 - [ ] 自動化織布機內部包含了一組相連的齒輪,只要在上面撥出數字,齒輪之間互相轉動後便會算出累加後的值,再顯示於小窗口上 ### 1-3|「差分機、分析機」與電器化時代的「打孔卡片處理器」 看到這標題,我第一個反應是...電腦終於要有電了嗎 XDDD #### 差分機、分析機 而巴貝奇的設計要來到 1823 年,他首先設計了用來解多項式**差分機**,由英國政府補助出資研發。雖然差分機被證實理論上可行,但最終因財政、製作延宕、故障頻率與私人因素...等,導致巴貝奇失去了政府的金援。 說到製作延宕,就必須提到巴貝奇的三心二意,不僅經常朝令夕改,還常常開新的支線任務,才會導致差分機的製作一延再延。而在他的支線任務中,最有名的就是**分析機**。在這部機器包括**輸入裝置**、**處理機和計算器**、**指揮工作和計算順序的控制單元**、**儲存裝置**、**輸出裝置**等五大部門,這正是後來設計電腦的構想。 <p class="illustration"> <img src="https://i.imgur.com/RdWKNOI.png" alt="差分機與分析機"> 差分機與分析機(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 說到分析機,就必須提提愛達·奧古斯塔(Ada Augusta),她為分析機寫了假想的程式(虛擬碼?),因此被認為是**世界第一位程式設計師**。挖屋~祖師爺欸! <p class="illustration"> <img src="https://i.imgur.com/760cKR1.jpg" alt="愛達勒芙蕾絲 197 週年誕辰"> 愛達勒芙蕾絲 197 週年誕辰(圖片來源: <a href="https://www.google.com/doodles/ada-lovelaces-197th-birthday">Doodle 作品資料庫</a>) </p> #### 打孔卡片處理器 真正進入商用的時期,則是赫勒里斯(Herman Hollerith)的打孔卡片處理器,他採用 Jacquard 的打孔卡片原理,使穿過孔的細棒構成一個電路來計算,這項發明也使得計算器的==機械時代移轉到電器化時代==。 早期的打孔卡片處理器是為人口普查而設計,因此僅具備加法器的功能;後來經過改良整合萊布尼茲的步進滾筒,使知能完成四則運算。 <p class="illustration"> <img src="https://i.imgur.com/sf7WN1A.png" alt="打孔卡片處理器"> 打孔卡片處理器(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 他有成立成立一家名為「製表機器公司」(Tabulating Machine Company)的公司,並於 1911 年與另外三家合併為「計算—製表—記錄公司」(Computing-Tabulating-Recording Company,C-T-R)。這家公司也是大有來頭,它在 1924 年更名為國際商業機器公司,英文名稱 International Business Machines Corporation,也就是我們現在熟知的 IBM。 #### 單元測驗 1. **你還記得差分機、分析機~打孔卡片處理器的演進嗎?現在就來考考你,下列敘述何者錯誤?** - [ ] 巴貝奇被尊稱為「電腦之父」,他發明了「分析機」,其包含輸入裝置、處理機和計算器等五大部門,這正是後來設計電腦的構想 - [x] 赫勒里斯發明的「分析機」使計算器的機械時代移轉到電器化時代,電腦技術也從此開始發展 - [ ] 愛達.奧古斯塔為「分析機」寫了假想的程式,是一種用來送入分析機,並能使這部機器執行工作的指令,類似於現在的程式碼,因此她被喻為「第一位程式員」 ## CH 2|一覽電腦的發展史 電腦的發展始於 1944 年,從繼電器做簡單四則運算,一路演進至今。依其組成的元件可以將電腦的演進過程分成:真空管、電晶體、積體電路、超大型積體電路四個時期。 喔,1944 年就是哈佛大學的 ASCC MARK-I 被製作出來的時間點,它是台電氣機械式的電腦,使用了 3,000 個以上的繼電器(Relay)和多量的齒輪,被認為是第一部**通用型電腦**,也是第一部被實作出來的**全自動電腦**,無須人為介入。相比同時期的電腦可靠不少,因此被認為是==現代電腦時代的開端==。 <p class="illustration"> <img src="https://i.imgur.com/WKyrLnC.png" alt="ASCC MARK I"> 真實存在的馬克一號 XDDD(圖片來源: <a href="https://zh.wikipedia.org/zh-tw/馬克一號">維基百科</a>) </p> ### 2-1|1946年~1954年 第一代電腦 真空管時期 普遍認為**最早的通用電子電腦**,是在二戰期間賓州大學的莫奇來(Dr.John W.Mauchly)博士和他的學生埃克特(J.Presper Echert)因應美軍要求,設計用來計算砲彈彈道的 **ENIAC**。 ENIAC 是第一部以**真空管取代繼電器**的通用電子電腦,設計上總共使用了 18800 個真空管,總長 50 英呎,寬 30 英呎,總佔地 1500 平方英呎、大約 42 坪,且重達 30 噸。換算下來這台電腦大約是一間半的教室大、六隻大象重,現在應該很難想像有這們龐大且笨重的電腦。 它的計算速度在當時算快,每秒鐘可以做 300 多次乘法運算或 4500 次的加法運算。但由於它的所有的程式都是由**機械碼**撰寫、是以硬體上的變化做為依據,因此在運算過程中會產生大量的熱量、不易冷卻,同時消耗大量電力。除此之外,真空管的損耗率也極高,每 15 分鐘就可能燒掉一支,且操作人員須再花 15 分鐘以上找出壞掉的管子進行更換,使用上極為不便。 是說,現在家用電腦,每秒鐘都能達到 10 的 8 次方以上整數加減乘除的速度... <p class="illustration"> <img src="https://i.imgur.com/dR7bTnK.jpg" alt="ENIAC"> ENIAC(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 另一個小趣聞是,ENIAC 是在 1946 年 2 月 14 日發表的耶!不虧是工程師,情人節還是跟電腦作伴,還顛覆世界了呢!是說,它是為二戰設計,但 1946 年二戰應該結束了吧? <br> 在 1973 年以前,ENIAC 普遍被認為是第一台現代意義上的電子電腦。但是在 1973 年時,美國聯邦地方法院註銷了 ENIAC 的專利,認定 ENIAC 發明是從 ABC 電腦那裡繼承了電子電腦的主要構件思想。因此,ABC 電腦被認定為世界上第一台電子電腦,而這台 ABC 電腦,就是我們之前提過阿坦那索夫在 1937 年所發明的。 :::info :information_source: **誰才是第一部電子電腦?** 如果對段歷史有興趣的可以去看看這兩篇: - [〈誰才是第一部電子計算機?——靠 650 美元誕生、曾被遺忘的 ABC 電腦│《電腦簡史》數位時代(九)](https://pansci.asia/archives/193242) - [〈第一台通用型電子計算機——專利糾葛、優劣並存的 ENIAC │《電腦簡史》數位時代(十)〉](https://pansci.asia/archives/193801) ::: <br> 不過嚴格說來,ABC 並**不是台圖靈完備的電腦**,也**沒能實現儲存程式結構**,更**不具備通用性**,就這幾點看來 ENIAC 完勝只能解線性方程式的 ABC。 然而,這 ABC 電腦中的 3 個關鍵仍是現代電腦組成的一部分: 1. 使用**二進制**表示所有的數值和資料。 2. 使用**電子元件**進行所有操作,而不是滾輪、棘輪或者機械開關。 3. **計算和儲存**在系統中分離成兩部分。 前面雖然把兩者相比較,但有趣的是,ENIAC 其實跟 ABC 電腦很不一樣。例如:在 ENIAC 中,還是使用十進制來計算,而非二進制,這是兩個剛好互補嗎?我的缺點是你的優點,你的缺點是我的優點 XDDD <br> ENIAC 的另一個致命缺點,就是它是使用機械碼,換句話說它必須**依靠重新接線、切換開關的方式來切換不同程式**。即便它計算迅速,但每每更換程式,就得花半天的時間,嚴重拖累整體效能。 因此,數學家**馮紐曼(Dr. John Von Neumann)** 提出==程式必須儲存在記憶體的重要概念==。程式可用打孔卡片編寫,再輸入到記憶單元中儲存起來,如此便可輕易更換不同程式,又不會影響運作速度;但若要將程式儲進記憶體中,這表示程式必須與資料一樣都是二進制的儲存方式。 <p class="illustration"> <img src="https://i.imgur.com/hS4qFJ7.png?1" alt="記憶體中的程式與資料"> 記憶體中的程式與資料(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 喔對,把程式獨立出來的概念並不是由馮紐曼提出,而是圖靈提的圖靈機(Turing Machine);馮紐曼提出的是程式==儲存在記憶體==的概念。 <p class="illustration"> <img src="https://i.imgur.com/K94p899.png" alt="記憶體中的程式與資料"> 記憶體中的程式與資料(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 故此,在 ENIAC 之後完成的電腦,如:離散變量自動電子電腦(英語:Electronic Discrete Variable Automatic Computer,EDVAC)、電子延遲存儲自動計算器(英文:Electronic Delay Storage Auto-matic Calculator、EDSAC),這些電腦在開發時都採用**馮紐曼模型(Von Neumann model)** 來建構,因此它們的硬體可分成四個子系統:**記憶體**、**算術邏輯單元**、**控制單元**及**輸入/輸出**。 <p class="illustration"> <img src="https://i.imgur.com/mZnhxIY.png" alt="馮紐曼模型"> 馮紐曼模型(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> #### 單元測驗 1. **真空管時期的電腦是屬於第一代電腦,可別忘記囉!關於真空管電腦,下列敘述何者正確呢?** - [ ] 第一部真正的電腦是機械式的計算器 - [X] 以真空管取代繼電器為電子元件的自動電腦名為「ENIAC」 - [ ] 真空管電腦消耗的熱量極低,且極為省電,因此在當時蔚為風潮 ### 2-2|1954年~1964年 第二代電腦 電晶體時期 - 1964年~1970年 第三代電腦 積體電路時期 #### 1954年~1964年 第二代電腦 電晶體時期 1948 年美國貝爾實驗室的科學家約翰.巴丁(John Bardeen)、華特.布拉頓(Walter Houser Brattain)和威廉.肖克利(William Shockley)共同發展出電晶體,這項發明給一般的電子應用帶來極大的變革。 此時期的電腦其電路板都裝有磁芯記憶體和獨立的電晶體,電晶體的大小只有真空管的二十分之一,使電腦的==體積更小、重量更輕;且耗電量、散熱量減少、故障率也直線下降==。 這個時代除了電晶體的應用外,**高階程式語言**也發展出來了。感謝這發明,讓我不用真的得跟機器打交道,我硬體學的超差的 XDDD <p class="illustration"> <img src="https://i.imgur.com/MRwnoJR.jpg" alt="電晶體"> 電晶體(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 1964年~1970年 第三代電腦 積體電路時期 在 1958 年傑克.基爾比(Jack Kilby)和羅伯特.諾頓.諾伊斯(Robert Norton Noyce)都發明了以**矽**為材料的積體電路(IC, Integrated Circuit)。 隨著半導體積體電路的出現,各家廠商陸續投入研發,直到 1964 年,IBM 公司正式推出成功以積體電路研製的 IBM SYSTEM-360 型電腦,從而宣告第三代電腦時代的來臨。在一片比 1/8 英吋還小的晶片上,包含了幾百個電子元件,使電腦體積更加的輕巧,而且計算速度又快了幾百倍。 除此之外,相較前兩個時代,其耗損率又進一步的下降,大約使用 3300 萬個小時後,才可能發生故障,進一步壓低了成本。 <p class="illustration"> <img src="https://i.imgur.com/GamrRzw.jpg" alt="積體電路"> 積體電路(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 是說,這篇筆記到此提到的人物都是一時人傑,像傑克.基爾比這位是 2000 年諾貝爾物理學獎得主,另一個小趣聞是他在 1998 年首次訪臺時獲得交大的榮譽博士學位;另一位羅伯特.諾伊斯則是英特爾的共同創始人之一。 #### 單元測驗 1. **可別忘了,第二~三代的電腦有著巨大的發展!下列敘述何者正確呢?** - [x] 電晶體時期的電腦大小比真空管電腦小,且更輕、更省電,且故障率更低,計算能力更快 - [ ] 電晶體時期的電腦耗用能源較積體電路時期的電腦少,成本也更為低廉 - [ ] 第一代至第三代電腦發展的順序依據為真空管、積體電路、電晶體 ### 2-3|1971年~至今 第四代電腦 超大型積體電路時期 #### 1971年~至今 第四代電腦 超大型積體電路時期 1975 年,**超大型積體電路(VLSI,Very Large Scale Integrated Circuit)** 被完成,這是以積體電路改良而成。密度更高的超大型積體電路,能在一片晶片中可以裝進數萬個電子元件,體積比第一代電腦小了百倍,計算速度卻快了千倍。 以超大型積體電路所製造的電腦,就是現在的個人電腦(PC,Personal Computer)。而延續超大型積體電路而發展的微處理機,更可實際應用於日常的每一種機器上,如:微波爐、冷氣機、音響、電視、洗衣機等等。 課程給了張演進史,方便一覽電腦的演化: <p class="illustration"> <img src="https://i.imgur.com/IWQPfqa.jpg" alt="電腦的演進史"> 電腦的演進史(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 第五代與第六代電腦 一般在找資料時前文所提到的四個時代是公認,之後的第五代與第六代電腦似乎就有些待定了。 第五代電腦被提到機率對半,我想這是因為它跟前面幾代的變革方向不太一樣,第五代電腦在 1982 年被日本科學家定義屬於**人工智慧(AI,Artificial Intelligenec)的時代**,感覺是偏向**軟體**上的突破,或是應用上的改變。當然硬體也是有所突破,但卻不像是之前的是全新的一種技術,而是偏向製程的革新,所以以這個的角度不將它歸入似乎也合理? 至於第六代電腦我在多數的電腦演進史都沒看到,但有在部分詞條是寫**生物電腦(Biological Computer / Biocomputer)**,我還以為會是量子電腦(Quantum computer)哩。不過看了看資料,不管生物電腦還量子電腦都是發展中的的技術,究竟哪個會先進入商用成為一個新的時代,這還有待觀察。 #### 單元測驗 1. **關於第四代電腦,下列敘述何者正確?** - [x] 第四代電腦使用的電子元件為超大型積體電路 - [ ] 人工智慧電腦的時代也被歸類為第四代電腦 - [ ] 第四代電腦的最終目的是開發一部擁有「超級電腦的運算效能」和「可用的人工智慧」的電腦 ## CH 3|1111 + 1 ≠ 1112? <p class="illustration"> <img src="https://i.imgur.com/lrZBpzw.png" alt="二進位"> </p> ### 3-1|二進位制與八進位制 據說,因為人類有十根手指頭,所以人類記數時是採用十進制;而電子的訊號只有**開跟關**兩種狀態,因此在記數時是採用基底為二的數字系統。 題外話,我之前想過人有十根手指,但我所能表達的數其實有 11 個吧?也就是 0、1、2、3、4、5、6、7、8、9、10,那為什麼用不是 11 進制?我同學說是不是 0 太年輕了(0 的概念是較後來才出現的),所以在算的時候忘了算它?笑死我了,妳當作是點名的時候太矮沒算到嗎? 🤣 不過說真的,搞不好真的跟 0 的概念出現較晚的原因有關。 🤔 #### 二進位制 剛剛提到電子的訊號只有**開(1)跟關(0)** 兩種狀態,而在單條電路上的開關狀態被稱為 1 個 **bit**,這也是電腦可以**儲存的最小單位**,若是表達複雜的訊息,則會需要更多的電路、表示更多位元,這也就是二進制雛形。 二進制是一種==滿 2 進位==,基底為二的數字系統,所以只有 ==0 和 1 兩個數字==。跟我們常用以十為基底的數字系統,每進一位就是多乘 10 一樣,在二進制系統中,**每進一位時就是多乘 2**。 所以下圖中 `1001` 與 `1100100` 的計算則是: $$ 1001_2 = 1\times2^3+0\times2^2+0\times2^1+1\times2^0 = 9_10 \\ 1100100_2 = 1\times2^6+1\times2^5+0\times2^4+0\times2^3+1\times2^2+0\times2^1++0\times2^0 = 100_10 $$ <p class="illustration"> <img src="https://i.imgur.com/WbpuNFt.png" alt="十進制與二進制"> 十進制與二進制(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 八進位制 八進制和二進制雷同,數字符號為 0、1、2、3、4、5、6、7,是==逢 8 進位==的。 所以下圖中 `144` 的計算則是: $$ 144_{8} = 1\times8^2+4\times8^1+4\times8^0 = 100_{10} $$ <p class="illustration"> <img src="https://i.imgur.com/cw0JekX.png" alt="十進制與八進制"> 十進制與八進制(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 單元測驗 1. **可別搞混二進位制與八進位制的規則喔!請問用八進位制表示 100 怎麼表示呢?** - [ ] 1100100 - [x] 144 不用算,第一個選項如果是八進制,光 $8^3$ 就超過 100 更別提 $8^6$。 ### 3-2|十六進位制 舉一反三,十六進制就是==逢 16 進位==的系統。但一般數字只有 0 ~ 9,因此 ==10 ~ 15 會使用 A ~ F==。 我們知道二進制是電腦用的數字系統,所有的輸入都會被轉換成一連串二進制的指令;但必須說,二進制並不是一個有效率的數字系統。以 1024 來說,我們用十進制來表示時只需要 4 位元,但用二進制時卻需要 11 位元($2^{10}=1024$),這打到後面少了幾個 0 可能都沒發現吧 XDDD 所以,當我們要輸入相關設定時,習慣上會將 4 個位元轉化成十六進位制,像我們習慣的色碼 `#FFFFFF`,就是常見的十六進位應用! <p class="illustration"> <img src="https://i.imgur.com/SrOnsuV.png" alt="進制對照表"> 進制對照表(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 單元測驗 1. **現在你學會更複雜的十六進位制了!請問用十六進位制表示 12 怎麼表示呢?** - [x] C - [ ] 2A - [ ] 12 ### 3-3|圖解進位制轉換規則 接下來介紹介紹一些常見的進位制轉換規則。 #### 十進位制轉換為其他進位制 將一個數分成**整數**與**小數**兩部分來討論: 1. **整數** 在轉換整數的時候是用==除法==,將==整數/欲轉換進位數==,一直除到商數為 0 為止,最終再將餘數**逆向**取出。用短除法的話,就是**由下往上**。 <p class="illustration"> <img src="https://i.imgur.com/vQdMyOV.png" alt="將十進位整數轉換為其他基底流程"> 將十進位數字轉換為其他基底流程(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 計算示意如下: <p class="illustration"> <img src="https://i.imgur.com/TXlyasO.png" alt="轉換十進位整數計算示意"> 轉換十進位整數計算示意(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 實際計算就是做短除法啦,不過計概課本這邊的把計算過程打橫了,所以可能看起來會有點不太習慣。一開始黑底的數字是十進制的 $35$,除以 $2$ 得到商 $17$ 和餘數 $1$,一路向左計算,最終得轉換結果 $35_{10} = 100011_{2}$。 <p class="illustration"> <img src="https://i.imgur.com/k9fgjzl.png" alt="顯示如何把 35 轉成二進位"> 顯示如何把 35 轉成二進位(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 2. **小數** 至於小數部分是使用==乘法==,將==小數\*欲轉換進位數==,乘積的整數位保留,小數位繼續運算直到為 0 或是位數足夠時候,最終再將整數**依序**取出。 <p class="illustration"> <img src="https://i.imgur.com/5wQWguQ.png" alt="將十進位小數轉換為其他基底流程"> 將十進位小數轉換為其他基底流程(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 計算示意如下: <p class="illustration"> <img src="https://i.imgur.com/YtlmdVn.png" alt="轉換十進位小數計算示意"> 轉換十進位小數計算示意(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 因為這例子沒有整數部分,所以不考慮它了,直接看小數部分。黑底的數字 $0.625$,乘以 $2$ 得乘積 $1.25$,故保留 $1$、$0.25$ 繼續向下計算,一路向右運算,直到為 0 或終止運算,最終得轉換結果 $0.625_{10} = 0.101_{2}$。 <p class="illustration"> <img src="https://i.imgur.com/aOEdlvv.png" alt="顯示如何把 0.625 轉成二進位"> 顯示如何把 0.625 轉成二進位(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> #### 其他進位制轉換為十進位制 把轉換來源的每個位元乘上它的以基底所得出的位值,最終將每個位元的計算結果相加,即可的得到十進位的結果。 <p class="illustration"> <img src="https://i.imgur.com/DxEuXqy.png" alt="其他基底轉換成十進位"> 其他基底轉換成十進位(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 所以下圖八進制的 $1144_{8}$ 轉回十進制的計算則是: $$ 1144_{8} = 1\times8^3+1\times8^2+4\times8^1+4\times8^0 = 612_{10} $$ <p class="illustration"> <img src="https://i.imgur.com/h7ayeS3.png" alt="八進制 1144 轉十進制"> 八進制 1144 轉十進制(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 十六進制的 $1144_{16}$ 的轉換計算則是: $$ 1144_{16} = 1\times16^3+1\times16^2+4\times16^1+4\times16^0 = 4420_{10} $$ <p class="illustration"> <img src="https://i.imgur.com/5GgjH9v.png" alt="十六進制 1144 轉十進制"> 十六進制 1144 轉十進制(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 二進位制與十六進位制轉換 16 為 2 的四次方,所以在進行二與十六進制互轉時是以 ==4 個位元為一組==。以小數點為基準,分向左右兩邊,以 4 個為一組進行分群,若**整數**不足 4 位則**前面**補 0,若**小數**不足 4 個位數則**後面**補 0。 <p class="illustration"> <img src="https://i.imgur.com/OTAWE1c.png" alt="二進制與十六進制轉換"> 二進制與十六進制轉換(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 以 $$111010011.101_{2}$$ 轉換為例,首先把二進位數以 4 個位為一組作整理:$1$、 $1101$、 $0011$、 $.$、 $101$,左右兩邊不足 4 位數的補零變成:$0001$、 $1101$、 $0011$、 $.$、 $1010$,然後將各組轉成十進制分別是 $1$、 $13$、 $3$、 $.$、 $10$,再換回十六進制就是最終答案了 $$1D3.A_{16}$$。 <p class="illustration"> <img src="https://i.imgur.com/jdgRW1T.jpg" alt="二進制 111010011.101 轉十六進制"> 二進制 111010011.101 轉十六進制(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 至於十六轉二進制,核心概念也是 4 個位元為一組。當一個十六進制數轉成二進制表示,若不足 4 位數則要在該組**前面**補 0。舉例來說,$24C_{16}$ 要成二進制,$$2_{16}$$ → $$0010_{2}$$、 $$4_{16}$$ → $$0100_{2}$$、 $$C_{16}$$ → $$1100_{2}$$,最終結果為 $$001001001100_{2}$$。 #### 單元測驗 1. **學完這些進位制,該來點進階題了!請問將 62.25 (十進位制)轉換為二進位制 要怎麼表示呢?** - [ ] 100100.1 - [X] 111110.01 ## CH 4|1 與 0 的邏輯運算 ### 4-1|布林代數與邏輯閘 布林代數是處理數位邏輯的代數運算式,用來表示**是**或**不是**,在實際電腦中會以 **1** 和 **0** 來表示。 這邊舉個例子,網頁要檢查你現在是不是點擊叉叉關掉了頁面,此時會有兩種可能: 1. **是,點擊了叉叉** 布林代數會記錄此情況為 **True 真**,而電腦會以 1 記錄表示成立。 2. **否,沒有點擊叉叉** 反之,會記錄 **False 假**,並記錄 0 表示不成立。 <br> 不過實際運行時,整個系統是多工處理,可能會同時檢查好幾件事,並根據這些事件來做出反應,這時就會用到**邏輯閘**/**邏輯運算**了。 一樣是按叉叉的例子,網頁想要知道你是不是同時點擊了叉叉和重新整理這兩顆鍵,因為它想要崩潰給你看 XDDD。這時它需要做幾件事: 1. 檢查是不是按了叉叉 2. 檢查是不是按了重新整理 3. 檢查兩個事件是不是都成立 用來釐清所有條件之間的關係,檢查兩個事件是不是都成立,就是邏輯閘的工作了。這些布林代數或者說是 0 和 1 ,在經過不同的閘時會產生出不同的結果。 <br> 最常用的邏輯閘可歸納為 8 項,最基本的 4 個分別為 **NOT**、 **OR**、 **AND**、 **XOR**,另外的 **NOR**、 **NAND**、 **XNOR** 則是前述的反向結果,最後 **Buffer 緩衝器**在這邊先別管它,因為它是起到緩衝或強波的作用,並不會對布林值的輸出有任何的變化。 <p class="illustration"> <img src="https://i.imgur.com/zRzYzFD.png" alt="8 個基本邏輯閘符號"> 8 個基本邏輯閘符號(圖片來源: <a href="http://content.saihs.edu.tw/chapter_htm/chapter3/3c/c_03.htm">松山工農</a>) </p> #### 單元測驗 1. **如果我要「電腦隨時檢查你是不是同時按了叉叉和 F5 這兩顆鍵」,需要使用到下列何者?** - [ ] 布林代數 - [x] 邏輯閘 其實兩個應該都要用到才對,但它是單選題 =____= ### 4-2|NOT 閘(NOT Gate) NOT Gate,中文叫做**反相閘**,又稱為**反相器**(Inverter)。不過在記邏輯閘名稱的時後,我沒用過中文啦,一來是當初考試都是英文、二來寫程式的時候也都是英文或符號居多,至於最後一個原因等等你們看到其他閘的中譯就知道了...那絕對會亂掉的! NOT 是 7 個邏輯閘中,唯一一個**一元運算子**,它的工作就是負責**唱反調**,你說 True 它就回 False,反之你說 False 它就回 True。就好像你說你有妹妹的時候,內建 NOT Gate 的鄉民會回答:「其實你沒有妹妹!」就是這個意思。 最後附上一張精美的真值表(truth table)。喔,真值表就是定義了各種可能輸入與其輸出值的表格: <p class="illustration"> <img src="https://i.imgur.com/krQadKn.jpg" alt="NOT Gate 真值表"> NOT Gate 真值表(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 單元測驗 1. **如果我輸入 1 ,那麼 NOT 閘會輸出什麼呢?** - [ ] 1,因為 NOT 閘「遇 1 則 1 」 - [x] 0,因為 NOT 閘「遇 1 則 0 」 ### 4-3|或閘 (OR Gate)、反或閘(NOR Gate) #### 或閘(OR Gate) 從這邊開都是二元或是多元運算子。OR Gate 被直接翻譯成**或閘**,它的特性就是只有==所有人都否決的時候,事件才會被否決;一旦有一人同意,事件則會成立==。 舉個例子,依民法規定,如果妳想結婚,要嘛妳成年了或是妳的法定代理人同意,只要其中一個條件成立妳就可以去戶政事務登記了;不然妳未成年、代理人又不同意的話,那就只能從長計議...嗯...這個例子要成立的前提是妳有結婚對象了 XDDD | 成年 | 法定代理人同意 | 結婚 | | ---- | -------------- | ---- | | X | X | X | | O | X | O | | X | O | O | | O | O | O | <br> 我們把例子換回符號,我們已經知道,否決表示不成立,記為 0、False;反之同意則為 1、True,因此其真值表如下: <p class="illustration"> <img src="https://i.imgur.com/Bds8kYy.jpg" alt="OR Gate 真值表"> OR Gate 真值表(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 反或閘(NOR Gate) NOR Gate,看文字就知道它是把 OR 跟 NOT 組在一起。因此其結果就是或閘被套了反相,只要所有==條件都不成立時,事件才會成立==。簡單易點的記法,我會先做 OR 再對 OR 結果做 NOT,這樣你只要熟悉前面兩個邏輯閘 舉個例子,如果你未成年、或是喝了酒,只要符合其中一項,按規定不能開車上路;如果你**不是**未成年、也**沒有**喝酒,那麼你就可以安心上路啦(嗯...安心上路...好像哪裡怪怪 XDDD | 未成年 | 喝了酒 | 開車上路 | | ------ | ------ | -------- | | X | X | O | | O | X | X | | X | O | X | | O | O | X | <br> 真值表長這樣: <p class="illustration"> <img src="https://i.imgur.com/FXn9lYY.jpg" alt="NOR Gate 真值表"> NOR Gate 真值表(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 單元測驗 1. **如果我輸入 1 與 1 ,那麼反或閘會輸出什麼呢?** - [X] 0,因為反或閘「當所有輸入端都是 0,輸出才是 1」 - [ ] 1,因為反或閘「當所有輸入端皆為 0,則輸出方為 0」 ### 4-4|及閘(AND Gate)、反及閘(NAND Gate) #### 及閘(AND Gate) 如果說 OR Gate 是只有所有條件都不成立時事件才不成立,哪麼 AND Gate 則是相反,只有==當所有條件都成立時事件才會成立==。 例如,只有當你成年且在該地住滿六個月才有投票權,如果你未成年或是住不滿六個月,那麼你就沒有這次的投票權。 | 成年 | 住滿六個月| 投票權 | | ------ | ------ | -------- | | X | X | X | | O | X | X | | X | O | X | | O | O | O | <br> 換回符號長這樣: <p class="illustration"> <img src="https://i.imgur.com/AeeV8us.jpg" alt="AND Gate 真值表"> AND Gate 真值表(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 反及閘(NAND Gate) 一樣 NAND Gate 就是 AND Gate 的相反。 舉例,在跟騷法規定中,只有當存在騷擾行為且是持續進行的情況下,行為人不符合無罪認定;若僅符合其中一項條件時,會被認定是無罪的。 | 通訊騷擾 | 針對特定人反覆或持續 | 無罪 | | -------- | -------------------- | ---- | | X | X | O | | O | X | O | | X | O | O | | O | O | X | <br> 真值表: <p class="illustration"> <img src="https://i.imgur.com/QlTQfd8.jpg" alt="NAND Gate 真值表"> NAND Gate 真值表(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 單元測驗 1. **如果我輸入 1 與 1 ,那麼及閘會輸出什麼呢?** - [X] 1,因為及閘「遇 0 則 0」,而當所有輸入端皆為 1,輸出才會是 1 - [ ] 0,因為及閘「遇 1 則 1」,只要輸入端有 1,輸出就會是 1 ### 4-5|互斥或閘(XOR Gate)、反互斥或閘(XNOR Gate) #### 互斥或閘(XOR Gate) ==兩個輸入值相同,則輸出 0;若相異則輸出 1。== 舉個真實例子,某次紅燈右轉被員警逮個正著時,這時員警問我想要未依交通號誌行駛的罰單、還是紅燈右轉的罰單,很明顯我只能選擇其一,即便我都不想要,而他也不能都開 XDDD | 未依交通號誌行駛 |紅燈右轉 | 取締成功 | | -------- | -------------------- | ---- | | X | X | X | | O | X | O | | X | O | O | | O | O | X | 我記得那次好像要了未依交通號誌行駛的罰單。因為兩張罰單的罰緩一樣,但號誌那張記一點,而紅燈右轉記三點,一次就用掉了一半的扣打,笨蛋才選這個。 <p class="illustration"> <img src="https://i.imgur.com/xHxQndJ.jpg" alt="XOR Gate 真值表"> XOR Gate 真值表(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 反互斥或閘(XNOR Gate) XOR Gate 的相反,當==兩個輸入值相同,則輸出 1;若相異則輸出 0==。 糟糕,這我真的想不到可以用的例子,有沒有誰要提供一個跟日常法律相關的例子 XDDD <p class="illustration"> <img src="https://i.imgur.com/E67Ix0K.jpg" alt="XNOR Gate 真值表"> XNOR Gate 真值表(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 奇怪,現在看來很簡單阿!我當初真值表怎麼背得半死的? <p class="illustration"> <img src="https://i.imgur.com/T1ZvCyL.png" alt="感到疑惑的女性"> 感到疑惑的女性(圖片來源: <a href="https://www.pexels.com/zh-tw/photo/3808008/">Andrea Piacquadio|Pexels</a>) </p> #### 單元測驗 1. **如果我輸入 1 與 1 ,那麼互斥或閘會輸出什麼呢?** - [x] 0,因為互斥或閘「當輸入端有奇數個 1 時,輸出為 1,否則輸出 0」 - [ ] 1,因為互斥或閘「當輸入端有偶數個 1 時,輸出為 1,否則輸出為 0」 ## CH 5|電腦如何與人類溝通? ### 5-1|字元如何被呈現? 前面的章節提過,電腦中是以 0 和 1 兩個數字來儲存及表示訊息。而這個章節則介紹了**編碼**的概念,如何將文字與符號對應到 0 和 1 的組合上 <p class="illustration"> <img src="https://i.imgur.com/z1s1ns4.png" alt="使用位元樣式表示符號"> 使用位元樣式表示符號(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> #### ASCII ASCII code 跟 Unicode 大概是世界上最廣為人知的編碼之二。 它的全名是 American Standard Code for Information Interchange,中文翻譯為美國資訊交換標準程式碼。這套編碼用了 ==7 個位元來表示每一個字元==,共可以表示出 $2^7 = 128$ 個字元,數量雖不多但足以滿足英語系國家。在如今 **ASCII 已被納入 Unicode 中**。 <br> ASCII 雖可滿足英語系國家的ㄒ但對於其他西歐語系,他們並非使用純英文表示的字元。因此後期發展出的 EASCII(Extended ASCII),就將 ASCII 閒置的首碼拿來使用,將其由 7 位元==擴充為 8 位元==,共計 256 個字元,擴充了許多符號、希臘或拉丁符號使用。 但這也導致新的問題,因為不同的國家有不同的字母,即便同樣採用 8 位元的編碼方式,但在 **128-255** 這段所代表的字母卻不盡相同,這也就形成了我們打開文件時所看的**亂碼**。 當然,對於我們亞洲語系而言,看到亂碼成因會更加的複雜。因為 EASCII 雖解決了部分西歐語言的顯示問題,但對其他使用符號更多的語言仍無能為力。因此他們被迫**採用了更多的位元組(byte)來表示一個字元**,比如說繁體中文常用的 **Big5** ,==2 個位元組表示一個字元==,所以理論上最多可以表示 $256\times256 = 65536$ 個符號。 <br> 題外話,當你在 Windows 當中使用記事本存檔時,看一下它所支援的編碼。那些 UT 開頭的跟等等的 Unicode 有關,課程還沒提到先略過不提,有趣的是第一個 ANSI 編碼。 它其實並不是某一種特定的編碼格式,在不同語系的系統中,ANSI 表示不同的編碼。在我的系統中 ANSI 其實是 Big5、在簡中系統裡則是 GB2312、韓文是 EUC-KR、日文是 JIS,而英文中的才是 ASCII。因為早期的預設編碼都是 ANSI,所以當你打開從不同的系統中取得的文檔時,才會出現亂碼的情況。 <p class="illustration"> <img src="https://i.imgur.com/zIgmgHQ.png" alt="記事本存檔時所支援的編碼"> 記事本存檔時所支援的編碼 </p> #### Unicode Unicode,稱為萬國碼或是國際碼,它使用了 **32 位元**,因此可表達 $2^{32}=4264967296$ 種符號,編碼中不同的區段分配給不同語系符號來使用,最終為==全世界所有的文字與符號都提供了一個唯一的數字代碼==。 但嚴格說來,Unicode 是一個==字元集==,它將所有的文字與符號使用一個二進制數字進行編號,卻沒有規定這個二進制數字應該如何儲存。如果使用時,不進行任何轉換直接儲存勢必照成空間上極大的浪費。 舉例來說,在前文我們已得知,英文字母只需使用一個位元組表示即可,但若 Unicode 與 Big5 一樣統一規定,每個字元必須統一使用 2 個位元組來表示,這將導致每個英文字母的第首前位元組皆為 0,這些無意義的資料會造成儲存空間的浪費。更別說 Unicode 是有 32 位元、8 個位元組的,這會導致儲存多少無效資料?就算儲存空間按摩爾定律指數增長也不夠這麼花吧! 因此後來衍生出了多種 Unicode 轉換儲存方式,其中最廣為人知的是 Unicode Transformation Format (UTF)! #### UTF-8 UTF-8 是目前==使用最廣的一種 Unicode 的轉換儲存方式==。其他實現方式還包括 UTF-16 LE、 UTF-16 BE 和 UTF-32...等。 UTF-8 最著名的特點就是==可變長度的編碼==,它採用 **1 到 4 個不等的位元組來表達一個字元**,這個變化與 Unicode 編號的有關,編號小的使用的位元組就少,編號大的使用的位元組就多。其中英文字母使用 1 個位元組表示,中文則用 3 個位元組來表示,因此與 ASCII 相容,但與 Big5 不相容。 下面是 UTF-8 編碼的範圍和對應的格式: | 編碼範圍 | 編碼格式 | | ----------------------------- | ---------------------------------- | | 0x00-0x7F(0-127) | 0XXXXXXX | | 0x80-0x7FF(128-2047) | 110XXXXX 10XXXXXX | | 0x800-0xFFFF(2048-65535) | 1110XXXX 10XXXXXX 10XXXXXX | | 0x10000-0x10FFFF(65536以上) 1 | 1110XXX 10XXXXXX 10XXXXXX 10XXXXXX | #### 單元測驗 1. **學完那麼多種編碼,你還記得他們的特性嗎?關於各種編碼,下列敘述何者錯誤呢?** - [ ] ASCII 後期的發展由 7 位元擴充為 8 位元,稱作 EASCII,共以 256 個字元所組成,擴充了許多符號、更提供希臘或拉丁符號使用。 - [x] ASCII 在中文裡稱為萬國碼或是國際碼,顧名思義它正是一套業界標準,將全世界所有的文字與符號都收錄進去。 - [ ] 電腦只看得懂 0 和 1,所以我們需要將 Unicode 轉換為 0 和 1 才能在電腦上運行 Unicode。。 ### 5-2|位元是什麼:電腦的儲存單位 我發現我剛剛在做前面章節筆記的時候,其實就用到這邊的內容了。這邊應該有都不太陌生,日常生活還滿常用到的,檔案大小幾 M 之類的。 1. **bit(位元)** 電腦中最小的儲存單位,以 0、1 來表示。同時它也是傳輸資料的基本單位,同一時間能傳達的位元數越多,代表資料傳輸的速度越快。 2. **byte(位元組)** 8bits = 1byte,也就是有 256 種狀態。電腦中通常以一個位元組來表示一個英文字母及數字,也就是剛剛提到 ASCII,至於中文字則看是走什麼編碼方式了,可能會用 2~3 個位元組來表示。 3. **word(字組)** 這單位日常表示中常用,但可能沒有被注意。字組指的 CPU 一次所能處理的位元數,因此會隨著系統而有所差異,日常說的 64 位元的作業系統,指的就是 CPU 一次所能處理 64 位元數,也就是說這台電腦的 1 word = 64 bits。 一般說來,字組長度較長的電腦,處理速度較快、主記憶體的容量較大、數值精度較高。 <br> 課程最後附了張電腦儲存單位表: <p class="illustration"> <img src="https://i.imgur.com/XQo72zk.jpg" alt="電腦儲存單位表"> 電腦儲存單位表(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 不過說實話,上面那張表只適用計算檔案儲存單位。你在買硬體時,其實走的是 SI 制或者說十進制(decimal)位元組,用的是 1000 下去換算,習慣上單位會標示成 KB、MB、GB、TB;而 Windows 系統在報告容量時,走個是二進制,顯示的數字單位實際上是 KiB、MiB、GiB、TiB。 <p class="illustration"> <img src="https://i.imgur.com/RVlFb5q.jpg" alt="電腦儲存單位表 1000 vs 1024"> 電腦儲存單位表 1000 vs 1024(圖片來源: <a href="https://zh.wikipedia.org/zh-hk/%E5%8D%83%E5%AD%97%E8%8A%82">維基百科</a>) </p> 所以你以為你買 1T 的硬碟是買 1024 GiB,但其實只有 1000 GB。這也是你在某些網誌或討論區會看到諸如下列討論的原因: - [為什麼我的硬碟機所回報的容量低於硬碟機標籤上註明的容量?](https://www.seagate.com/tw/zh/support/kb/why-does-my-hard-drive-report-less-capacity-than-indicated-on-the-drives-label-172191en/) - [為什麼SSD顯示容量小於宣傳容量?](https://www.crucial.tw/support/articles-faq-ssd/ssd-showing-smaller-than-advertised) <br> 是說,我在看資料的時候發現 Mac OS X 的檔案管理器是走十進制,而 Windows 是走二進制。我跟 Mac 不熟,所以這件事我還是第一次知道欸!所以我拿顆相同的硬碟,在 Mac 跟 Windows 上看到的數字是不一樣的?:thinking_face: 還真的是哩,我看到賣硬碟的公司還在網誌提醒了這件事,還畫了對照表。難怪我會在 PTT(還是 Dcard?)看到有人驚恐的再問她在 Mac 的繪圖資料為什麼拿到影印店時檔案變小了 XDDD <p class="illustration"> <img src="https://i.imgur.com/6XcEEcD.png" alt="硬碟大小在 Windows 與 Mac 的換算量"> 硬碟大小在 Windows 與 Mac 的換算量(圖片來源: <a href="https://www.crucial.tw/support/articles-faq-ssd/ssd-showing-smaller-than-advertised">Crucial Taiwan</a>) </p> 至於 Linux 那邊我沒怎麼注意它檔案系統用的十進制還是二進制,不過看上表應該是十進制的。因為通常我比較介意的伺服器上的空間,但沒伺服器 UI 阿 XDDD 所以一般我會用 `df` 搭配 `-h` 顯示 KiB、MiB、GiB、TiB,如果要看十進制的話就用 `-H`: <p class="illustration"> <img src="https://i.imgur.com/jNxuLb5.png" alt="df 搭配 -h 與 -H 所顯示的容量差異"> df 搭配 -h 與 -H 所顯示的容量差異 </p> #### 單元測驗 1. **看完電腦的儲存單位表後,換你試著換算看看吧!請問 1 KB 等於多少 bits 呢?** - [x] 8192 - [ ] 1048576 ## CH 6|現代電腦的擬人神經系統 ### 6-1|電腦是怎麼動起來的? > **Q**:你曾在光華商場聽商人講得天花亂墜,卻因為不認識電腦而不知道如何抉擇嗎? > **A**:...我就算認識電腦,還能直接開規格,但我還是不知道如何抉擇阿...這其實跟認不認識電腦無關...應該只是**選擇困難症**吧。 這節是講解電腦構成。就外形而言,可以分為**輸入(Input)**、 **主機運算(Process)** 及 **輸出(Output)** 3大部分。 <p class="illustration"> <img src="https://imgur.com/WMhdShr.png" alt="電腦外形構成"> 電腦外形構成(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 而就功能及理論上來說,電腦的硬體架構可分成==五大單元==:**輸入單元(Input Unit)**、 **輸出單元(Output Unit)**、 **算術邏輯單元(Arithmetic & Logic Unit)**、 **控制單元(Control Unit)** 和 **記憶單元(Memory Unit)**;其中算數邏輯單元(Arithmetic & Logic Unit)及控制單元(Control Unit)可合併稱為**中央處理單元(Central Processing Unit, CPU)**。 基本上這就是[前面](#2-1|1946年~1954年-第一代電腦-真空管時期)帶過的馮紐曼模型,這個 70 年前就提出的架構仍是現代通用電腦的模型。 <p class="illustration"> <img src="https://i.imgur.com/mZnhxIY.png" alt="馮紐曼模型"> 馮紐曼模型(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> <br> <p class="blockquote-center"> 馮紐曼模型的偉大之處,就是他通過抽象化的方式抓住了電腦的本質,你再怎麼變,也跳不出我定義的模型,任何事物都是從理論到實踐,理論要做的事情就是抽象抽象再抽象,抓住事物的本質。 </p> #### 單元測驗 1. **相信你看完流程圖後,對電腦的運作更加了解了!請選出下列錯誤的敘述。** - [ ] 電腦得到訊號後的動作依序為輸入、處理、輸出 - [x] 電腦共有 4 大單元,分別是輸入單元、輸出單元、記憶單元、控制單元 ### 6-2|輸入單元(IU)與輸出單元(OU) #### 輸入單元(IU) 負責將資料或程式讀入,並轉換為二進位傳送到記憶單元中。其作用相當於人的感官,負責接收訊息。常見的輸入單元有滑鼠、鍵盤、麥克風、光碟機、掃描器、繪圖板...等。 #### 輸出單元(OU) 負責將處理過的結果,從記憶體取出,並轉換成可閱讀的文字、數字、圖形、音訊、影像...等。其作用相當於人的反應器官,將結果表現出來。常見的輸出單元有螢幕、印表機、喇叭...等。 #### 單元測驗 1. **學習完輸入單元與輸出單元後,試著判斷看看「智慧型設備上的螢幕」是屬於輸入單元還是輸出單元呢?** - [ ] 輸入單元 (IU) - [ ] 輸出單元 (OU) - [x] 是輸入也是輸出單元 - [ ] 不是輸入也不是輸出單元 ### 6-3|記憶單元(MU)與控制單元(CU) #### 記憶單元(MU) 負責儲存輸入單元送來的待處理程式或資料,等候處理或運算;同時處理完的的資料,也會放進記憶單元中,等待輸出或進一步的處理。 記憶單元又可分為兩類 1. **主記憶體(main memory)** 又稱內部記憶體,用來儲存處理中的程式和資料。可以分成兩大類 RAM 與 ROM: <p class="illustration"> <img src="https://i.imgur.com/Dnh2l3n.png" alt="RAM and ROM"> RAM and ROM(圖片來源: <a href="https://www.opennaukri.com/how-ram-and-rom-work/">Open Naukri</a>) </p> 1. **隨機存取記憶體(Random Access Memory, RAM)** 是構成電腦中大部分的主記憶體,也是**平時所輸入的程式和資料所儲存的位置**。**具有揮發性**,一旦關閉電源關閉,則資訊就會被清除,因此只能充當暫時性的資料存放媒介。 平常我們說得的加記憶體就是加這個,它的大小會直接影響系統的整體效能,至少會讓你能開更多的軟體或檔案 XDDD。 如果再繼續向下細分,依 RAM 的技術可在分成 **SRAM** 和 **DRAM** 兩大類。 1. **SRAM** 稱為靜態隨機存取記憶體(static RAM),只要電源是開啟狀態,不需要持續充電更新即可保存資料,也不需要更新記憶體位置。SRAM 速度快但價格昂貴。因製作成本較高、存取速度較快,常被用來做快取記憶體。 2. **DRAM** 稱為動態隨機存取記憶體(Dynamic RAM),使用電容來做資料儲存,但因電容會隨時間漏失電荷,所以必須週期性充電更新才能保存資料。DRAM 速度慢但價格便宜,因為有著成本優勢,是使用最多的記憶體,常見的 DDR4 就是 DRAM。 <br> 2. **唯讀記憶體(Read Only Memory, ROM)** 看名字就知道,只能讀不能寫,一般出廠時就會將資料燒入。具備**非**揮發性,資料不會隨電源關閉而消失,因此被用來存放永久性的程式或資料,如 BIOS。 它跟 RAM 不同,與系統運行速度毫無瓜葛。它所直接影響的是能事先寫入更多的軟體或是更強大的系統,想像一下手機中的作業系統跟卸也卸不掉的隨機出廠的 App,就是寫在這裡。 是說,雖然 ROM 是為唯讀的,但你應該聽過刷機吧?它就是藉由重燒 ROM 來修改 ROM 中的資料,不過這需要借助特定的方法。糟糕,好久沒重燒 ROM 了,有點忘了該怎麼做了...想當初開發時一天得刷個 4、5 次機...。 2. **輔助記憶體(secondary memory)** 又稱外部記憶體,用來儲存暫時不用的大量程式和資料,以彌補主記憶體空間不足,當要使用才會從輔助記憶體讀入主記憶體中處理。如:硬碟、光碟等。 <p class="illustration"> <img src="https://i.imgur.com/r7cMTs0.png" alt="記憶體分類"> 記憶體分類(圖片來源: <a href="https://coggle.it/diagram/WHZL9VObPlsGuoKF/t/記憶體分類">coggle</a>) </p> #### 控制單元(CU) 負責控制、協調電腦各單元的運作。會從主記憶體中擷取並解碼指令,並傳送控制訊號到其他單元,藉以指揮及監督每一個單元,並進行資料的傳遞。就像人體中的大腦,負責發出指令。 #### 單元測驗 1. **請問硬碟屬於下列哪者呢?** - [ ] 記憶單元中的主記憶體 - [x] 記憶單元中的輔助記憶體 - [ ] 控制單元中的主記憶體 - [ ] 控制單元中的輔助記憶體 ### 6-4|算術邏輯單元(ALU) 總覺得,課程的分節有點奇怪,它竟然把控制單元跟記憶單元放一節,而不是跟算術邏輯單元歸在一起?會這麼說是因為,控制單元及算術邏輯單元兩者都是 **中央處理單元(central processing unit;CPU)** 組成的一部分。 <p class="illustration"> <img src="https://i.imgur.com/TXeFQ1v.png" alt="CPU 的組成架構"> CPU 的組成架構(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> CPU 應該是還滿常聽到的一個詞?它是電腦的大腦,是個極為複雜的晶片電路,主要用來**執行儲存在記憶體的程式指令**,**控制著數位資料的處理及運算**。前者很明顯是[上一節所提過的控制單元](#控制單元(CU))的職責,而後者則是這節的算術邏輯單元的工作。 算術邏輯單元,顧名思義就是負責**算術**與**邏輯運算**。控制單元會將程式或資料由記憶單元送來,它會負責執行四則運算、比較運算與邏輯運算,再將結果送回記憶單元儲存。 此外,在 CPU 內部還有一個極小的快速獨立儲存裝置,稱為**暫存器(register)**,是用來暫時存放運算過程中的資料或程式,依照保存資料的不同可以再分成不同的暫存器,如保留算術邏輯單元中間計算結果的資料暫存器、存放從記憶體中所擷取的多個指令的指令暫存器、以及記載程式中變數的程式計數器...等。 <p class="illustration"> <img src="https://i.imgur.com/S2hYOGc.jpg" alt="CPU 的組成架構"> CPU 的組成架構(圖片來源: <a href="https://www.sin.tw/NDHU_Course/103data/HWANS/CH06.doc">NDHU_Course 試卷</a>) </p> #### 單元測驗 1. **學完這五個單元後,可別搞混他們的分工喔!請問下列關於算術邏輯單元的敘述,何者正確呢** - [x] 算術運算會進行四則運算 - [ ] 邏輯運算會先進行邏輯運算(邏輯閘:AND、OR、NOT),再進行比較運算(大於 / 等於 / 小於) - [ ] 算術邏輯單元與記憶單元一同擔任「大腦的職位」 ### 6-5|5 大單元的運作原理 整個系統會在控制單元的操作下進行分工合作,==它會控制各單元執行各別不同的任務,但又協調它們進行交換==。 運作概述如下,在控制單元的操控下輸入單元會將資料或程式載入到記憶單元,並將程式指令進行解碼,如果指令需要運算,就會送到算術邏輯單元計算,再將結果存回記憶單元;當要輸出結果時,控制單元會將結果由記憶單元,傳送到輸出單元輸出。 <p class="illustration"> <img src="https://i.imgur.com/wQ8bkla.png" alt="硬體架構與資料流"> 硬體架構與資料流(圖片來源: <a href="http://ep.ltivs.eportfolio.cc/web/it/16">趙文聖 計算機概論</a>) </p> #### 單元測驗 1. **學完電腦的 5 大單元後,你熟悉他們的運作原理了嗎?請判斷下列哪一個是錯誤的運作方式吧!** - [ ] 使用者透過「輸入單元」輸入資料或程式到「記憶單元」 - [X] 控制單元」從輸入單元中讀取資料或程式 - [ ] 如果要進行運算,必須經過「算術邏輯單元」來進行算術或邏輯運算 ### 6-6|GPU 是什麼? 這節在介紹跟 CPU 只有一個字母之差的 GPU。 圖形處理器(Graphic Process Unit,GPU)又稱為**顯示晶片、視覺處理器**,是常聽到的顯示卡中的核心零件。(顯示卡是 GPU + 記憶體 + 電路板 + 散熱器等的統稱)。 它是一種專門在電腦、遊戲機和一些行動裝置(如平板電腦、智慧型手機等)上執行**繪圖運算工作**的微處理器。除了單獨存在外,也可以內嵌嵌入主機板或 CPU 上,也就是我們所說的內顯。 除了遊戲影像和視覺效果的支援外,GPU 亦作用為**平行處理器,加速資料的計算**,這也是現今機器學習再次崛起的主因之一。 <p class="illustration"> <img src="https://i.imgur.com/0pEE5PO.jpg" alt="CPU 和 GPU 繪圖有什麼差異"> CPU 和 GPU 繪圖有什麼差異(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> <br> 是說,有人沒看過這兩圖的故事嗎?忘記是哪一年的 NVIDIA 請流言終結者來做的實驗,速度差距果然顯著,有興趣的可以去看看 [NVIDIA 的活動影片](https://youtu.be/-P28LKWTzrI)。 <p class="illustration"> <img src="https://i.imgur.com/PLWmFM8.gif" alt="CPU 與 GPU 的繪圖能力與速度上的差別: CPU"> CPU 與 GPU 的繪圖能力與速度上的差別: CPU(圖片來源: <a href="https://www.as-creative.com.tw/時事/cpu-與-gpu-到底差在哪?nvidia-找來流言終結者主持人-demo-讓你/">奧森文創設計</a>) </p> <p class="illustration"> <img src="https://i.imgur.com/b8KXdvL.gif" alt="CPU 與 GPU 的繪圖能力與速度上的差別: GPU"> CPU 與 GPU 的繪圖能力與速度上的差別: GPU(圖片來源: <a href="https://www.as-creative.com.tw/時事/cpu-與-gpu-到底差在哪?nvidia-找來流言終結者主持人-demo-讓你/">奧森文創設計</a>) </p> #### 單元測驗 1. **CPU 與 GPU 只差一個英文字母,但功能差很多,千萬別搞混了!請選出下列關於「GPU」正確的敘述。** - [x] 中文是圖形處理器,又稱為顯示晶片 - [ ] 負責解釋電腦指令以及處理電腦軟體中的資料 - [ ] 中文為中央處理器,是電腦的核心部位 ## CH 7|世界市值最大的五家公司,都是 IT 巨頭 這邊開始進入[第二堂課](https://codefree.hiskio.com/courses/5),課程內容稍微雜了一點包含程式語言、作業系統、軟體工程跟人工智慧...等。我在上課的時候還稍微疑惑了下,當初上計概的時候有提到這些嗎?好像沒印象耶~!?結果翻開課本,我囧了還真有,而且還滿了筆記 XDDD <p class="comment todo">掃描目錄</p> ### 7-1|什麼是作業系統? 電腦是由**硬體**和**軟體**所構成的系統,而軟體又可分成**作業系統**和**應用程式**兩大類。 作業系統(operating system,簡稱 OS)是介於電腦硬體與應用程式之間的程式,除提供了使用者存取硬體的介面外,也負責管理記憶體、系統資源供需的次序、輸入與輸出裝置、網路與檔案系統,簡而言之就是套管理硬軟體資源的系統軟體。 <p class="illustration"> <img src="https://i.imgur.com/koLGRBj.png?1" alt="電腦系統"> 電腦系統(圖片來源: <a href="https://shopee.tw/【欣明】Foundations-of-computer-science-2e-計算機概論-原文書-i.66892677.8437790606">《計算機概論 2/e》</a>) </p> 作業系統與硬體的關係緊密結合,針對不同機器會有不同的作業系統,比如行動裝置、嵌入式(如微波爐、GPS 等處理單一功能為主的裝置)與伺服器...等。他們會針對不同的應用需求與硬體管理,而衍生出不同的作業系統,如:Android 與 IOS、Windows CE 與 Palm OS、Linux 和 Windows 與 Mac...等。 #### 單元測驗 1. **針對作業系統的描述,哪一項是錯誤的呢?** - [ ] 它是介於電腦硬體與應用軟體之間的程式 - [x] 為了保持使用與設計上的一致性,不同的硬體其作業系統皆相同 - [ ] 作業系統其實也是一種軟體服務 ### 7-2|知名的作業系統-個人電腦 個人電腦中的三大作業系統: 1. **Microsoft Windows** 微軟公司開發的個人電腦作業系統,前身就是 MS-DOS,整體市佔率**高達九成**。 2. **macOS** 以精簡的設計美學著稱,蘋果公司旗下的作業系統都以產品本身的名稱加上 OS 為命名風格。 3. **Linux** 三套中唯一一套**開放原始碼系統**,也是開源專案的最佳典範。目前多數廣泛使用的自由軟體都有與 Windows 平台版本和相應的 Linux 版本,例如:LibreOffice;部分流行的專有軟體也有相應的 Linux 版本,如:Google Chrome;也有些應用程式沒有 Linux 的版本,但通常可以找到類似功能的應用軟體。....對我來說唯一不能取代的大概就是遊戲了吧? 有人戲稱 Windows 是一般人使用;macOS 是有錢人(蘋果系列的產品都是高單價),或設計人使用;Linux 則是工程師專用。 #### 單元測驗 1. **了解完這些知名的個人電腦作業系統之後,你有記起來它們的特性嗎?請選出下列錯誤的敘述。** - [ ] Linux 它可以讓開發者從開放原始碼上快速、低價(幾乎免費)的建立專業能力 - [x] Linux 的相關應用軟體主要是由駭客,或其它 Linux 愛好者合作開發出來的,其軟體操作方式一致性高 - [ ] Linux 目前能在 Windows 或 macOS 上使用的應用軟體大部分沒有 Linux 版本,因此較不如 Windows 或 macOS 通行(尤其亞洲地區) ### 7-3|知名的作業系統-手機 是說,手機上的作業系統還有人不知道? 1. **Android** 非正式中文名稱為安卓,但我其實不太喜歡這個名字 XDDD。它是由 Google 公司收購同名公司後開發而成,被視為是 Google 跨足行動領域並邁向成功的一步。 <br><br> 作業系統本身是以 **Linux** 為核心的開放原始碼系統,因此任何人都可以使用或者開發其相關的應用程式,市佔率高達八成。是說,雖然 Android 是開源的,但它其實不是免費的 XDDD。有興趣的可以去找找他們的授權費的相關資料,前幾年因為歐盟的反托拉斯法鬧得沸沸揚揚的。 2. **iOS** 蘋果手機 iPhone 專屬的作業系統,承襲蘋果電腦的設計風格,與 Android 系統為手機市場兩大巨頭。 <p class="illustration"> <img src="https://i.imgur.com/uAXfZdj.png?1" alt="Android vs Mac"> Android vs Mac(圖片來源: <a href="https://news.xfastest.com/apple/96118/ios-android/">XFastest News</a>) </p> 除了兩大龍頭外,也還有些小的作業系統,不過似乎都 GG 了,這邊就課程照貼囉~! 1. **Windows Mobile / Windows Phone** 微軟針對行動通訊產品開發的作業系統,市佔率低。後者為前者的繼承者,曾與 Nokia 戰略結盟,合作推出 Lumia 系列手機想抵抗安卓與 iOS,但依舊以失敗告終。 2. **BlackBerry OS / BlackBerry 10** 黑莓公司開發的封閉原始碼系統,專屬自家品牌黑莓手機,以高安全性著稱而一度吸引許多商務人士使用,但最終仍然不敵慘淡的市佔率與銷售成績,黑莓作業系統也將 2019 年底結束服務,轉向 Android。 3. **Symbian / Meego** Nokia 公司旗下的作業系統,由於改革緩慢,在智慧型手機市場始終無法有所突破,最終放棄了這兩個作業系統,轉向 Windows Phone。 <br> 在找資料的時候看到幾張有趣演進。從圖中可以看到 2009 時,手機作業系統市場相當分散,黑莓機跟 Nokia 依舊是主流,Android 還被壓得出不了頭;但大約到 2013 之後,這些作業系統就幾乎被雙頭壟斷,兩者佔了快 80%。 <p class="illustration"> <img src="https://i.imgur.com/5I1J1xr.png" alt="手機作業系統市場份額變化"> 手機作業系統市場份額變化(圖片來源: <a href="https://www.businessinsider.com/smartphone-market-share-android-ios-windows-blackberry-2016-8">Business Insider/Statista</a>) </p> 從 2017 年至今,市場的變化不大,仍舊是被 Android 跟 iOS 幾乎吃掉 99.8% 的份額,可以說市面上只剩兩種作業系統。是說...Android 原來贏這麼多?我還以為只有小贏而已。 <p class="illustration"> <img src="https://i.imgur.com/ZKlW9ZS.png" alt="手機作業系統市場份額變化"> 手機作業系統市場份額變化(圖片來源: <a href="https://www.statista.com/chart/9628/smartphone-platform-market-share-forecast/">Statista</a>) </p> #### 單元測驗 1. **除了個人電腦的作業系統,你也清楚手機作業系統的特性了嗎?請選出下列錯誤的敘述喔!** - [x] 黑莓公司所開發的作業系統 BlackBerry OS / BlackBerry 10,其原始碼為開放原始碼。因其安全性較低,所以市佔率與銷售成績皆不理想 - [ ] Symbian / Meego 為 Nokia 公司旗下的作業系統,由於改革緩慢,在智慧型手機市場始終無法有所突破 ### 7-4|什麼是軟體服務? 軟體即服務(SaaS,Software as a Service),廣義上來說,軟體服務是提供商會給一套軟體,讓你直接應用不需要再自己開發。課程這邊給的例子是作業系統的交付,個人覺得覺得這比較難以理解,主要是涉及作業系統本身的角色與特性,所以這邊就不用它當例子了。 因隨著網路的發展,現今最常見的交付方式是讓使用者透過網際網路和瀏覽器等媒介,以隨用隨付或訂閱制為基礎的方式取得所需軟體服務,最常見的如:電子郵件、日曆、Adobe 系列…等。 透過此方式,使用者無須購買、安裝、更新或維護任何硬體、中介軟體,即可以使用該軟體,且資料放在雲端,基本上只要裝置可以連網,幾乎可以從世界各地存取應用程式,是目前日常生活中最常接觸到的服務。 之前寫過一篇 [〈雲端計算 IaaS、PaaS、SaaS 與 FaaS〉](https://cynthiachuang.github.io/Difference-between-IaaS-PaaS-SaaS-and-FaaS/),有興趣的可以點擊過去看看。 <p class="illustration"> <img src="https://i.imgur.com/rUktqu9.jpg" alt="傳統軟體服務與現代軟體服務比較"> 傳統軟體服務與現代軟體服務比較(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 單元測驗 1. **在資訊領域,你是不是也常常聽到「軟體服務」這個名詞呢?經過我們的講解,相信你更了解它了!請你選出正確的敘述吧** - [x] 軟體服務的英文縮寫為 SaaS - [ ] 現代的軟體服務需要透過載體安裝,無法透過網路直接下載 - [ ] 廣義來說,軟體服務是提供商會給一套軟體給你自行開發 - [ ] Android 是以 Linux 為核心的開放原始碼系統,因此任何人都可以使用或者開發其相關的應用程式,市佔率高 ### 7-5|軟體服務好處多,近年來的產業龍頭都是軟體服務商 這章節其實就是在說 SaaS 的好處: 1. **技術** 無須配置軟體專業技術人員去維護,又能得到最新的技術。 2. **資金** 除了節省人力成本外,也無須再購買與維護機器。但會以改付「月費」來購買使用使用權,好處大概就是不用一次拿出大筆金額購買,緩解資金壓力。 3. **儲存** 資料儲存在雲端上,資料也不會遺失。因為這是把資料放到別人那裡去,所以這算好處還壞處就看資料敏感性? 4. **降低風險** SaaS 通常會提供試用服務,可以降低不適用的風險。 簡單來說,就是不用更新或維護任何軟硬體、可隨時存取且有備援。 <br> 另外,全球近幾年來最有價值五間的公司,分別是:Apple、Amazon、Alphabet(Google)、Microsoft 及 Facebook,五間公司。 <p class="illustration"> <img src="https://i.imgur.com/SiUDMpE.jpg" alt="傳統軟體服務與現代軟體服務比較"> 傳統軟體服務與現代軟體服務比較(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> #### 單元測驗 1. **軟體服務好處多,近年來的產業龍頭都是軟體服務商。請問下列哪一個不是軟體服務的好處呢?** - [ ] SaaS 通常會提供試用服務,可以降低不適用的風險 - [ ] 資料儲存在雲端上,即便使用者裝置失敗,資料也不會遺失 - [x] 資料儲存雖然不會存在雲端,但會存在電腦本機,即便使用者裝置失敗,資料也不會遺失 ## CH 8|硬體?韌體?軟體?你分得清楚嗎? ### 8-1|電腦世界中的三位一體 電子設備可以分成**硬體**、**軟體**和**韌體**三個部分: <p class="illustration"> <img src="https://i.imgur.com/mEXIFIL.png" alt="電腦架構"> 電腦架構(圖片來源: <a href="http://roger7313.blogspot.com/2007/12/blog-post_08.html">Roger的工程師研究日誌</a>) </p> 1. **硬體 Hardware** 簡單來說,你看得見摸得著的電子產品與零組件就叫硬體,例如電主機板、晶片...等。 2. **軟體 Software** 與硬體不同,軟體是用程式語言撰寫執行在硬體上的應用,看不見摸不著,例如:APP、網頁、Office、作業系統...等。 3. **韌體 Firmware** 介於軟體與硬體之間,特別指==用來驅動硬體進行作業==的軟體,主要是透過程式語言來操控硬體,像是控制主機板、晶片的驅動程式,或是電腦的BIOS。 <br> 那麼,這「三體」工程師有什麼差別呢? <p class="illustration"> <img src="https://i.imgur.com/pHTKtTN.jpg" alt="三體工程師差別"> 三體工程師差別(圖片來源: <a href="https://codefree.hiskio.com/courses/4">課程</a>) </p> 1. **硬體工程師** 「懂電路!」相關科系以電子工程與電機工程為主,三者之中與「程式設計」的相關性最小,主要負責「開發硬體設備」,因此有人戲稱是「製造業」。 2. **軟體工程師** 「會寫程式!」目前需求最多最廣的職位,入行門檻相對低,也是非本科轉職的主要選擇,主要負責「寫程式讓硬體執行各種工作」,工作範圍在三者之中與提供消費者服務的關係最直接,因此有人戲稱算是「服務業」。 3. **韌體工程師** 「懂電路又會寫程式!」主要的工作就是「寫程式讓硬體『可以』執行各種工作」。由於韌體介於硬體與軟體之間,因此要成為一位韌體工程師需要兼具兩者的特質,除了熟悉硬體元件,也要熟練高、低階程式語言。 #### 單元測驗 1. **你分得清楚電子設備的「三體」嗎?針對「三體」的敘述,下列何者正確?** - [ ] 通常大家說的改機,就是指更改「軟體」 - [ ] 韌體工程師雖然不用會寫程式,但一定要懂電路,而其估作內容與程式設計相關性極小,主要負責開發設備 - [x] 三體等於硬體 + 軟體 + 韌體 ## 其他連結 1. 課程內容: 1. [Codefree - 電腦科學(上)](https://codefree.hiskio.com/courses/4) 2. [Codefree - 電腦科學(中)](https://codefree.hiskio.com/courses/5) 3. [Codefree - 電腦科學(下)](https://codefree.hiskio.com/courses/6) 2. 課程筆記: 1. [CodeFree|喝一杯咖啡,輕鬆學電腦科學 - 上](https://hackmd.io/@CynthiaChuang/Hiskio-Codefree-Computer-Science-1) 2. [CodeFree|喝一杯咖啡,輕鬆學電腦科學 - 下](https://hackmd.io/@CynthiaChuang/Hiskio-Codefree-Computer-Science-2) ## 參考資料 1. mohjj mo (2019)。[計算機結構 & 計算機概論](https://hackmd.io/@mohjj/SybfD70SE)。檢自 HackMD (2022-07-11)。 2. hank.lon (2005-05-06)。[計算機概論講義](https://blog.xuite.net/hank.lon/lin/195763-計算機概論講義)。檢自 就只是學習用的嘛|隨意窩 (2022-07-11)。 3. 張瑞棋 (2020-08-24)。[人口普查、打孔卡片、IBM——第一台插電的計算機│《電腦簡史》數位時代(一)](https://pansci.asia/archives/189683)。檢自 PanSci 泛科學 (2022-07-12)。 4. 卞哲琛, Et al.。[煞氣a精靈部隊之期末 ALL PASS 版本計算機概論重點整理](https://sites.google.com/site/nutncsie11037/home)。檢自 nutncsie11037 (2022-07-12)。 5. 曾學文。[Introduction to Computer_Science ch 01](http://wccclab.cs.nchu.edu.tw/www/images/Introduction_to_Computer_Science/ch-01.pdf)。檢自 國立中興大學 (2022-07-14)。 6. 杨陈菊 (2018-11-18)。[我所了解的GB2312、Unicode、GBK、UTF-8、BIG5等编码](https://blog.csdn.net/Yangchenju/article/details/84196197)。檢自 杨陈菊的博客|CSDN博客 (2022-07-14)。 7. 協同撰寫。[ANSI(一种字符代码)](https://baike.baidu.com/item/ANSI/10401940)。檢自 百度百科 (2022-07-14)。 8. 阮一峰 (2007-10-28)。[字符编码笔记:ASCII,Unicode 和 UTF-8](https://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html)。檢自 阮一峰的网络日志 (2022-07-14)。 9. Roy Kwok (2019-06-16)。[Unicode 與 UTF-8 的關係?](https://roykwokcode.medium.com/unicode-與-utf-8-的關係-1c9b7a0b7c29)。檢自 Roy Kwok|Medium (2022-07-14)。 10. 小智IT课堂 (2019-12-14)。[你知道吗,他应该才是计算机科学之父(六)](https://zhuanlan.zhihu.com/p/97315872)。檢自 知乎 (2022-07-15)。 11. (2012)。[電腦的硬體(主機)](http://host16.tyjh.tyc.edu.tw/~class3/93y/st101/81/2y1-1-3.htm)。檢自 桃園國中 (2022-07-15)。 12. [電腦基本架構](http://www.chwa.com.tw/TResource/HS/book1/ch2/ch2-1.htm)。檢自 全華圖書全球資訊網 (2022-07-15)。 13. [4-2 記憶單元](https://sites.google.com/site/gaoerzixunke/ke-cheng/ch4-cpu-yuram/4-2-ji-yi-ti)。檢自 資訊科技概論 (2022-07-15)。 14. 駭客人 (2017-11-26)。[誰才是真正的計算機之父](https://kknews.cc/zh-tw/science/gynz6yy.html)。檢自 每日頭條 (2022-09-30)。 15. 協同撰寫。[阿塔那索夫貝理電腦](https://zh.wikipedia.org/zh-tw/阿塔纳索夫-贝瑞计算机)。檢自 維基百科 (2022-09-30)。 ## 更新紀錄 :::spoiler 最後更新日期:2022-10-04 - 2022-10-04 發布 - 2022-07-26 完稿 - 2022-06-20 起稿 ::: <br><br> > **本文作者**: 辛西亞.Cynthia > **本文連結**: [辛西亞的技能樹](https://cynthiachuang.github.io/Hiskio-Codefree-Computer-Science-1/) / [hackmd 版本](https://hackmd.io/@CynthiaChuang/Hiskio-Codefree-Computer-Science-1) > **版權聲明**: 部落格中所有文章,均採用 [姓名標示-非商業性-相同方式分享 4.0 國際](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en) (CC BY-NC-SA 4.0) 許可協議。轉載請標明作者、連結與出處!