副標題: 深度學習 C 語言
回歸第一手資料,透過反思 C 語言程式設計的細節,重新學習電腦原理 – jserv
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
講座說明
在大學教了幾年嵌入式系統課程後,我深深體會到這個事實:與其說學生對嵌入式系統掌握度不足,不如說為數眾多的人根本只是學了 C 程式語言的語法,而從未想過背後的原理、語言設計者的思維和理念,以及在真實環境中的關聯。
古希臘 Delphi 神殿前,有一則神諭寫道 "Know Thyself",也就是「誠實面對自己」,我們程式設計師就該從技術、團隊合作、理性思考,以及培養堅忍不拔精神等方面, 找到自我,從而建立自信。
於是,從 2015 年秋季開始,我做了一系列的調整,重新探討 C 語言程式設計,安排了「你所不知道的 C 語言」系列講座,透過實體和線上直播課程,整理這二十年來程式設計經驗,帶著學員參考第一手的資料 (例如 ISO/IEC 9899 C 語言規格),並善用系統開發工具 (如 GNU Debugger),屏棄過往臆測為主的學習方式,探究實際 C 程式的行為並反思箇中原理,讓更多人得以正視自己的盲點,從而打下穩固的基礎。
C is not a legacy language.
C is not an antique language.
Get your marketecture right:
C is an artisanal language for programmers obsessed with hand-crafting the smallest details of their programs.
source
你所不知道的 C 語言
- 為什麼要深入學習 C 語言? (2017.05)
- 與其瞎猜,不如從第一手材料研讀起
- 掌握 C 語言規格和演化
- 熟悉 GDB 在內的工具程式
- 指標篇 (2015.11) (2016.09) (2018.02)
- 解讀 C 語言規格書的 "object"
- 重讀 "type" 的定義,並且理解 incomplete type 的意義
- 三位一體: Array, function, pointer types
- 都稱為 derived declarator types
void *
的設計考量
- C-style string
- 函式呼叫篇 (2015.12) (2016.02) (2017.10) (2022.01)
- process memory layout
- application binary interface (ABI)
- stack pointer
- 重新檢閱 Heap: malloc() / free() 的實作
- 遞迴呼叫篇 (2016.11) (2018.07)
- 記憶體管理、對齊及硬體特性 (2018.09)
- 硬體的行為
- 消除對於 alignment, padding, memory allocator 的誤解
- 探討高效能 memory pool 的設計
- C11 標準的 aligned_alloc
- 編譯器和最佳化原理篇 (2016.01) (2017.10)
- C 編譯器原理和案例分析 (2018.08)
- 物件導向程式設計篇 (2016.04) (2016.05) (2018.09)
- Linux 核心、Apache HTTP 伺服器,以及 Gtk+ / GNOME 這些專案原始程式碼背後都應用大量物件導向設計方法
- 實踐物件導向,並強調帶來的效益
- 展示 GoF 的《Design Patterns》如何用 C 語言實作
- 前置處理器應用篇 (2016.06) (2022.02)
- 回顧 C99/C11 的 macro 特徵,探討 C11 新的關鍵字
_Generic
- 探討 C 語言程式的物件導向程式設計、抽象資料型態 (ADT) / 泛型程式設計 (Generics)、程式碼產生器、模仿其他程式語言,以 preprocessor 搭配多種工具程式的技巧
- 動態連結器 (2016.08) (2018.10)
- symbol 的奧義, dynamic linker 的行為, 用 GDB 追蹤 C 語言程式
- 連結器和執行檔資訊 (2019.02)
- 執行階段程式庫 (CRT) (2018.10)
- 技巧篇 (2017.03) (2019.07)
- 以矩陣運算的案例,實踐物件導向、指標操作、函式呼叫等觀念
- 數值系統篇 (2017.04) (2019.08)
- 浮點數運算 (2020.03)
- bitwise 操作 (2020.02)
- 從打造類似 Facebook 網路服務探討整合開發 (2017.04)
- goto 和流程控制 (2017.11)
- linked list 和非連續記憶體操作 (2018.01) (2022.01)
- Stream I/O, EOF 和例外處理 (2018.03) (2019.04)
- 未定義行為篇 (2018.07)