程式設計師應該造的五大輪子

碼農翻身發表於2021-06-30

每個程式設計師都有一個作業系統夢吧, 我記得年輕的時候, 意氣風發,給女朋友說過要做一個像Windows那樣的作業系統,女朋友當時很崇拜的樣子,十多年過去了,孩子都上學了, 這件事我不敢給她提了。

最近有個同學在微信上問我, 又提到了這回事:

程式設計師應該造的五大輪子

我雙手支援、贊成,因為寫不了Windows, 造個輪子還不是不錯的。

尤其是學生階段,有充裕的、大塊的時間,造輪子再合適不過了。

01 作業系統

造輪子作業系統當排名第一,原因前面也說了,作業系統的誘惑實在太大,在一個裸機上執行一個系統,讓冰冷的機器聽從自己的指揮, 讓這個系統管理所有的硬體,支援上層的應用,說實話, 有一種當上帝的感覺。

但是造作業系統難度也是最高的, 首先得理解Intel CPU的那一大堆細節, 什麼真實模式、保護模式、A20, GDT, IDT, 中斷處理...... 深入進去,如果你不頭暈腦脹一段時間,說明你還沒有透徹理解。

系統的啟動得用匯編編寫, 度過了這一段難熬的時間,才能進入C語言的世界,去實現程式排程、記憶體管理、檔案系統、I/O管理。

我覺得一般人寫個玩具,體驗一下和硬體打交道的感覺,在實踐中精確理解程式、執行緒、檔案等抽象就夠了。 只有大神才會在上面折騰GUI, 移植遊戲,然後搞成了Linux ,寧靜OS

難度指數:5顆星

吹牛皮指數:爆棚

相關書籍:

《作業系統真象還原》

《Orange'S:一個作業系統的實現》

《Linux核心設計的藝術》

《Linux核心完全剖析》

02 資料庫

排名第二的我認為是資料庫, 但現實中我發現很少有人去寫,不知道是什麼原因,也許是吹牛皮指數太低?

其實資料庫是很有料的:

1. 編譯原理的知識

因為你得做SQL語句的解析,轉化成內部的資料結構。

不需要特別深入,因為現在有很多趁手的工具了,例如Antlr,挺好用的。

2. 索引

B+樹, 因為關聯式資料庫儲存需要用它

3. 事務

你需要自己去實現事務,undo ,redo日誌等。

深入一點的話要考慮事務的隔離級別。

4. 查詢優化

對資料庫感興趣的同學,強烈推薦SQLite,可以從最早期的原始碼開始看起。

難度指數 :4顆星

吹牛皮指數:??

相關書籍:

慘,中文的居然沒有,可以去看SQLite官網,資料很齊全

03 網路軟體

第三名是網路程式。這個範圍很廣,可以是:

像Ngnix 那樣的HTTP伺服器:實現HTTP協議,學習epoll,反向代理,模組化設計等等

或者像Tomcat這樣Web應用伺服器,既支援HTTP協議,又可以執行Servlet和JSP。

或者是Redis這樣的高效能的快取服務,學習它和客戶端的協議設計,如何快速地存取資料,對外提供的API,持久化等。

有人說它們屬於中介軟體,也有道理,因為不是OS和資料庫這樣的基礎軟體,又不是單純的應用軟體,將來工作以後,日常打交道非常多,造一個輪子,發到GitHub上, 寫到簡歷中,非常吸睛。

難度指數:4 顆星

吹牛皮指數 :5顆星

相關書籍:

《Redis設計與實現》

《How Tomcat Works》

04 虛擬機器

第四名是虛擬機器, 這個輪子也是我非常推薦的。

以Java為例, 寫個虛擬機器能非常透徹地理解Java 的位元組碼,因為在執行之前,必須要解析.class檔案,在實現執行引擎的時候,得理解棧幀、本地變數表、方法區、堆等概念。

然後還得實現各種指令:儲存指令、棧指令、數學指令、比較指令等

如果你還能實現垃圾回收,那就更牛了!

折騰一圈下來,這門語言對你基本上就沒有什麼祕密了。再去看別的語言和虛擬機器:怎麼都長得差不多啊!

難度指數:4顆星

吹牛皮指數:5顆星

相關書籍:

《自己動手寫Java虛擬機器》

《深入理解Java虛擬機器》

05 程式語言

最後是程式語言, 造這個輪子的人更少,因為現在程式語言很成熟, 即使你造出來了,估計也是沒人用的。

現在GitHub火熱的都是那些“文言文程式設計”,“東北話程式設計”,沒啥實戰意義,在自媒體的追逐下一時比較吸睛,但是熱點一過就煙消雲散。當然,你要是追求流量那另當別論。

造程式語言主要的知識是《編譯原理》, 這門課喜歡的人不多,討厭的不少, 在公司也很少用到相關的知識,所以除非你對程式語言有強烈的愛好,否則大概率是賠本的。

不過造程式語言很可能會讓你對“為什麼XXX的語法這麼設計”有較深理解,並且會培養獨特的“品味”, 這點兒挺不錯。

難度指數:4顆星

吹牛皮指數:就看你的語言有多少人用了

相關書籍

《自制程式語言》

《程式語言實現模式》


可能有人要問了,你BB這麼多,你自己寫過啥,造過啥輪子?

這真是個好問題,我還真造過,答案就在我的公眾號“碼農翻身”中。

相關文章