先講結論,我覺得這是一本資工系必修課總複習,尤其是 OS、計算機網路跟計算機組織。

Coding Is Magic.

這句話時常被用來形容程式的無窮可能性,但卻包含了兩個含義,是指程式自從問世以來,就幫助人類解決了許多問題,如同蒸氣機革命一樣將科技提升到下一個層次;還是指程式是如同魔法一般令人難以捉模的藝術呢?

以我學習程式的經驗來說,真正開始寫程式是使用 PHP 框架 Laravel 來開發 API,開發過程中瀏覽官方文件,偶爾丟問題上 Stackoverflow,套件問題就看它的 GitHub Issue,似乎就解決了大部分的問題,但我心中仍然覺得毛毛的,因為我始終不清楚我一行 Code 被執行後,到底發生了什麼事?哪部分是 Laravel 幫我處理了?哪部分是我的 Web Server 處理了,甚至 Compile 三個階段在什麼時候發生的,我也無法清楚解釋。

這個「一知半解症候群」如同幽靈作祟纏著我,雖然在計算機組織上過 Program Counter 會指向下一道要執行的指令、在 OS 裡面學過 Process 如何與 kernel 互動,但因為這些理論分散在各個課程中,似乎缺少了一條線將它們綑起來,成為一個完整的知識領域。

我開始寫程式的時間比較晚,在我學習上述課程時,還沒辦法將這些理論與「寫程式」這件事情連結起來,因此這本書讀起來有許多的「Wow moment」,就像這本書的書名一樣,作者會以程式設計師的角度講解電腦系統,除非與軟體設計有關聯,否則不多著墨於硬體。所以每讀幾頁,這本書就像畫起一條線似的,將過去課堂上的理論與目前的工作搭上線。

好吧,就算這麼說,這本書的內容和平常開發應用程式所需要的知識,仍然有一些隔閡,應該說,就算你不學習這本書裡面的知識,仍然可以成為一名後端 / 前端工程師,但你會不斷處於「發生 Bug → 解決 Bug」的循環中,學習完整的電腦系統知識,能夠幫助你預見可能發生的 Bug 或軟體缺失。

Bug 的出現是因為:你腦袋裡想的預期程式執行的行為有了分歧

這是 You don’t know JS 的作者 Kyle Simpson 所說的一句話,當你發現你都在用 Try Error 的方式來寫程式,不一定是你的邏輯不好,也許是你對於程式的行為了解不足,程式語言的特性能夠看 Spec,而系統層級的理解就需要理論來支撐了。

因此,我要發願在 2020 的上半年可以把這本書讀完。(合掌)


喜歡這篇文章嗎?

歡迎點擊按鈕分享到 Facebook 上唷!

Weightless Theme
Rocking Basscss