CS50 week 0 - Scratch 筆記

👀 4 min read 👀

大家好,我是 Cindy,最近跟同事小夥伴相約一起看 CS50 的課程,CS50 (Introduction to Computer Science)是一堂美國哈佛大學知名的通識課程,完全免費,在 edxyoutubeCS50-Study-Group github 都可以非常容易地看到。

這系列的文章會是我的個人筆記,歡迎有興趣的人一定要自己去看看 CS50 的課程歐。

開始看影片就被講者激動的演說方式感動到,就像是用盡全力要讓看影片的人聽懂一樣,覺得很棒推薦給大家。

什麼是 Computer Science

Computer Science is about problem solving,即 CS 就是解決問題的科學,看到這裡不免點頭同意,在工作中我們確實是不停地要去思考如何才能夠解決客戶提出的問題呢!完全不是躲在電腦前面這麼一回事,必須要想辦法去理解客戶需要解決的問題是什麼,並且提出解決問題的方案。所以我們會有個 Input(待解決的問題) 以及 Output(解答),而這整個過程,就是 Computer Science。

Binary

Computer 只有 0 和 1,就像是開燈或關燈,通電或不通電,對電腦來說其實這樣就足夠了,因為他只需要知道有跟沒有,就可以運用 mapping 的方式知道說例如開啟電源是 1 而關閉電源是 0。

二進位中每個 bits 可以表示 1 和 0,而當我們有更多的 bits 時我們可以數更大的數字,例如二進位的 111(三 bits) 是十進位的 7,1111(四 bits) 是 15。

ASCII

ASCII 設計出可以表示字母的數字,例如大寫的 A 是用十進位的 65 表示,或說是二進位的 01000001,電腦會由環境的 context 決定是數字或字母等等。ASCII 一個字(byte) 只有 8 個 bits 故只能排列組合出 256 種不同的字符。

抽象

如果我們將電腦直接理解的低階概念移到了人類更好理解的階層,就是抽象。
這讓我想到我們通常覺得比較容易理解的是高階的程式語言,感覺有點相似。

Unicode

當人們發現 ASCII 已經不夠用了,開始有了 Unicode 的出現,有 8 bits、16 bits、24 bits,甚至 32 bits,有了如此巨大的空間,所以我們可以有更多更多的特殊符號,而我們常聽到的 UTF-8 就是 Unicode 的一種。

當我們在電腦畫面上看到 😂,實際上是十進位的 128514,二進位的 000000011111011000000010 呢。

RGB

RGB(Red、Green、Blue),當 context 是照片這類跟顏色相關的情況時,由三個 byte 表示分別需要多少 pixel 的紅色、綠色和藍色,而每個 byte 是 8 bits,用十進位表示的話就是每個 byte 有 0-255 可以表示。

而圖片透過這些顏色(每個點的 RGB)的表示來顯示出來,影片則是透過不同時間顯示不同圖片來表示。

其他

音樂也可以透過量化的方式來表示,例如某個聲音用什麼數字表示,並用某個數字表示要持續此聲音多久等等。

而我們人類同意用什麼樣的模式來表示之後,讓電腦如此運作,所以我們有各種不同的檔案型態,但這一切對電腦來說,其實也都只是 1 和 0 的各種變化呢。

Algorithms

演算法就是一開始說的 Input(待解決的問題) 以及 Output(解答),這中間一步步解決問題的過程。

講者用在電話簿裡找到特定的對象舉例,想到的演算法有三種:

  1. 從頭翻到尾一頁一頁慢慢找。
  2. 每兩頁翻一次,可能會錯過而需要再翻回去找。
  3. 每次對分一半,看要找的對象在前半還是後半(電話簿有按照順序排列)。 => 這就是常聽到的二分法。

用二分法可以更有效率的解決問題,因為每次都先解決了一半的問題。
這讓我想到以前在寫類似 leetcode 的問題的時候都要思考會不會有時間複雜度的問題呢,在思考演算法的時候時間也是要考慮的因素。

總結

最後講者先用 Pseudocode (用英文直接表示程式邏輯) 帶著大家理解:Function、Condition、Boolean expressions、Loops

接著用 scratch 做為大家的第一個程式語言,並提醒大家拆解分析的重要。

總之是一堂讓人收穫良多的課程啊。