一邊做,一邊想的電腦科學

程式、系統, 以及底下的那些想法。

從 CS61A 到 CS162 的課程筆記、一套互動式的 Swift 入門教學,以及在實際做專案時一路累積下來的思考。

同一個想法,四種語言
同一個函式,用每門課的語言各寫一次。
func square(_ x: Int) -> Int {
    x * x
}

let squares = [1, 2, 3].map(square)
print(squares)   // [1, 4, 9]

Learn Swift

def square(x):
    return x * x

squares = list(map(square, [1, 2, 3]))
print(squares)   # [1, 4, 9]

CS61A

static int square(int x) {
    return x * x;
}

int[] squares = IntStream.of(1, 2, 3)
    .map(Main::square).toArray();   // [1, 4, 9]

CS61B

int square(int x) {
    return x * x;
}

int squares[] = {1, 2, 3};
for (int i = 0; i < 3; i++)
    squares[i] = square(squares[i]);   // {1, 4, 9}

CS61C

01

課程

柏克萊的電腦科學系列課程,一次往下走一層抽象:從函式、資料結構,到機器本身,再到作業系統。

資料結構

CS61B

Data Structures

資料如何組織,以及每種組織方式的代價:串列、樹、雜湊、圖,以及漸近分析。

Java
尚無筆記

機器

CS61C

Great Ideas in Computer Architecture

從 C 一路往下到 RISC-V、數位邏輯、快取與平行運算:程式執行時,機器裡到底發生了什麼。

CRISC-V
尚無筆記

02 · 互動式教學

一題一題,學會 Swift。

參考 Swift 官方文件與 CS61A 的節奏:先讀一個小觀念、看一段小程式,然後在執行之前,先想想它會做什麼。

  • 依照 CS61A 課程順序的一課一課
  • 每課都有「Swift 會印出什麼?」與程式重組題
  • 每課最後都有實作與解答
開始學 Swift

Swift 會印出什麼?

let numbers = [3, 1, 2]
print(numbers.sorted().first!)

會在執行時出錯就輸入 Error;有多行輸出時,每行各占一行。

查看答案與解說

答案1

sorted() 會回傳一個新的陣列 [1, 2, 3],first 取出第一個元素。! 用來拆開 Optional;因為陣列不是空的,所以這裡是安全的。

03

專案

規模比較大的作品,以及它們背後的設計思路。

Pingclair

專案介紹正在撰寫中,會包含背後的設計決策與取捨。

進行中

04

最新文章

所有文章

還沒有發表的文章。

第一批筆記整理好之後,就會出現在這裡。