六年之后:回到底層編程
一個月以前,我加入到 ThoughtWorks 已經進入了第 7 個年頭。我本來不想再花時間寫一篇相關的文章。只是呢,最近發生的一些事情,或許和每個 IT 人息息相關。我便想著,再花點時間思考一下:我們的行業以及行業背后的 IT 體系。
從某種程度上來說,我更可能是在彌補一塊重要的短板 —— 一來,不是從事相關的領域;二來,平時的開發中真的用得少。
Web 開發的核心:CRUD?
在我先前的文章《項目初期的最優技術實踐》里,我把產品開發的生命周期分為了:
- 技術準備期
- 業務回補期
- 成長優化期
從技術維度來看待的話,我們會發現隨著時間的推移,整個項目對于人能力的要求會越來越低,直至大家都變成 CRUD、Copy/Paste 程序員。唯一經常還被提及的難點就是:對于數據庫的各種優化,又或者是對于遺留系統的遷移,又或者是對于某個開源軟件的優化。
所以啊,我們聽過別人提及一個明確的大公司技術發展路線:成為一個技術 + 業務專家。回過頭來看,事實也是如此 —— 在大部分的公司里,成為一個技術專家,是一個投入大收益低的事情。對于個人來說,不一定有足夠的回報,不一定有用武之地,不一定能找到相匹配的工作;對于組織來說,難以創造更高的價值。
可是呢?對于多數人來說,他們真的還是技術專家嗎?如果不寫代碼的話,他們只是一個技術決策者,而技術決策者和技術專家是兩種不同的發展路徑,只是他們做的某些事情是重疊的。
所以,在 CRUD 之外,我們的一個側重點還在于對基礎設施的優化,而這些基礎設施大多數是開源的。
開源是否在扼殺技術創造力?
自由軟件和開源軟件運動,解放了我們在整個行業的生產力。過去,我們關注于如何實現某個功能,現在我們可以轉而關注于某個業務的具體實現。
不可避免地,在國內的一些大公司里,受過訓練的、編程能力極強的程序員,變成了一個會寫代碼的業務專家。他們帶領著大量的平均水平一般的外包程序員,一起編寫著業務價值巨大的低質量代碼。
這一切看上去似乎非常合理,但是行業總體的創造力在下降。特別是,如果中國的 IT 公司在開源領域的影響力過小時,整個市場都將充斥在水平一般的程序員。
所以,這樣一來,我們又不得不考慮一個問題,開源是否在不斷降低組織的技術創造力?對于個人來說,可以通過學習造輪子來提升,對于組織呢?
閱讀源碼的本質:解析字符串?
這一年里,受項目及公司大佬的熏陶,我開始尋求以半自動化的方式來理解代碼。這其中的一個過程產物就是 Coca,以及 Chapi。往往復復的練習之后,對于類似工作的自動化,有了更充足的把握。
在機器執行一段代碼之前,我們要進行一系列的前端轉換:詞法解析、語法解析、語義分析、生成中間代碼,隨后再交由編譯器后端處理,直至目標程序。而對于人類來說,我們理解的過程是相似的,稍有區別的是,生成的中間代碼是人類語言。
而對于一個新的項目來說,我們要做的就是把理解匯制成架構圖,又或者是它們之間的調用關系。于是,Coca 和 Chapi 就是用來做這部分工作的自動化 —— 解析字符串。
所以,我一直想寫一個工具,用于自動化生成不同語言的代碼結構。只是吧,一直缺乏一個明確地用戶場景,理論有了,技術有了,就差有人買單了。
可執行的背后:二進制?
起先,因為在完成之前的一個 Todo 列表,我便開始折騰寫一個 TLV 編碼、解碼器。TLV,即標識域(Tag/Type)+ 長度域(Length)+ 值域(Value),它是用在通信協議的一種編碼格式。
隨后,我便開始嘗試解析 Java 生成的 class 文件,嗯,我發現做的事情和 TLV 解析,又或者是 Coca 做的語法解析有些類似。Java .class 文件畢竟有固定的格式,所以反而比直接字符串處理更加簡單。
緊接著,我繼續擴展對于 Java 虛擬機的理解,嘗試模仿造一個簡單的 JVM,理解整個 Java 應用是如何運行起來的。
直到了,我發現有一個新的領域:Android 對于 Java 二進制的各種騷操作:class 轉換為 dex,對 dex 進行優化,dex 轉 oat 二進制……。
生活就是這么充滿樂趣。
Go、Rust 成為編程語言的新希望?
作為一個浪漫的程序員,我們無不時刻想著創建一個新的語言/DSL,以豐富我們的業余生活,調節一下 copy/paste 的乏味感。
在陸陸續續地學習 Go 和 Rust,并用它們創造了一系列的工具。我對于創建領域特定語言的事情,又有了一定的感悟 —— 適合的時機,適合的場景,便容易產生適合的語言。
特定的語言解決某一類特定的問題。當然了,新的編程語言還需要有一定體量的公司才能支撐起來。不過,領域特定語言就不需要了,你想干些什么,你就可以輕松上手了。
回到底層編程和基礎設施
所以,既然大部分 Web 開發都是重復性 CRUD 的。那么回到底層編程、系統編程,偶爾造造系統軟件,也是相當的不錯。特別是當前,整個市場的大環境對于基礎設施的需求,一直在持續不斷地提升。
創造和學習是一種樂趣。
嗯,我打算業余生活寫寫底層代碼,進行進行系統編碼。
本文轉載自微信公眾號「phodal」,可以通過以下二維碼關注。轉載本文請聯系phodal公眾號。