抽象
CS61A
Structure and Interpretation of Computer Programs
以函式為思考的基本單位:高階函式、遞迴、資料抽象,最後親手寫一個直譯器。
PythonSchemeSQL
尚無筆記
一邊做,一邊想的電腦科學
從 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
柏克萊的電腦科學系列課程,一次往下走一層抽象:從函式、資料結構,到機器本身,再到作業系統。
抽象
CS61A
以函式為思考的基本單位:高階函式、遞迴、資料抽象,最後親手寫一個直譯器。
資料結構
CS61B
資料如何組織,以及每種組織方式的代價:串列、樹、雜湊、圖,以及漸近分析。
機器
CS61C
從 C 一路往下到 RISC-V、數位邏輯、快取與平行運算:程式執行時,機器裡到底發生了什麼。
作業系統
CS162
行程、執行緒、同步、排程、虛擬記憶體與檔案系統,在一個教學用核心裡親手實作。
02 · 互動式教學
參考 Swift 官方文件與 CS61A 的節奏:先讀一個小觀念、看一段小程式,然後在執行之前,先想想它會做什麼。
let numbers = [3, 1, 2]
print(numbers.sorted().first!)答案1
sorted() 會回傳一個新的陣列 [1, 2, 3],first 取出第一個元素。! 用來拆開 Optional;因為陣列不是空的,所以這裡是安全的。
03
規模比較大的作品,以及它們背後的設計思路。
專案介紹正在撰寫中,會包含背後的設計決策與取捨。
04
第一批筆記整理好之後,就會出現在這裡。