2015年,程序員安德魯和女朋友分手,失戀了。
他心情沮喪,很長時間都走不出來,為了排解失戀的痛苦,他想起了一直被自己壓抑的一個想法:開發一門編程語言。
安德魯告訴自己說:放松一點吧,去做你喜歡干的事情吧,會對你很有好處的。
于是,一門叫做Zig的編程語言誕生了。
安德魯也許不會想到,10年以后,Zig成立了基金會,擁有了一個非常活躍的Discord社區和GitHub生態系統,更是被很多人認為是更現代、更安全、更高效的 C 語言替代品。
0 1
向C語言開刀
搞個什么編程語言不好,為什么要向C語言開刀呢?
要知道C可以系統編程的王者語言啊!
這是因為安德魯之前開發過一個數字音頻工作站的軟件,由于涉及到底層操作,他遇到了很多C語言的“陷阱”,例如整數類型轉換,內存分配,隱式類型轉換,沒有越界檢查,C預處理器只是文本展開等等,很容易讓程序員踩雷。
更煩人的是,安德魯覺得C語言社區帶著強烈的防御性和刻薄文化,比如在某C語言社區問一個非常簡單的問題:“我該如何對齊結構體中的字段?”
你可能會遇到一個人罵你,一個人直接說“不行”,完全不解釋。
“這真是世界上最糟糕的地方之一”,安德魯決心解決這些痛點問題,他希望:
Zig 默認有安全檢查(數組越界、空指針、整數溢出)
內存分配透明且可控
沒有隱藏控制流
靜態鏈接,減少外部依賴,實現跨平臺的簡潔可靠發布。
Zig能在編譯期執行代碼
編譯期執行代碼這個很有意思,下面這段代碼是計算斐波那契數列的,C語言也能寫出類似的代碼:
fn fib(n: u32) u32 {
return if (n < 2) n else fib(n - 1) + fib(n - 2);
}
var fib_10 = comptime fib(10); 但Zig的comptime關鍵字讓編譯器在“生成機器碼之前”就執行邏輯,也就是說編譯出來的可執行文件里不包含任何 fib 函數調用,fib_10 是一個常量值55;所有運算在編譯階段完成。
總之,安德魯的目標是:提供安全、現代、可移植的語言特性,建立一個友好、開放的社區。
0 2
被罵慘了
立Flag容易,實現起來就太難了,何況Zig的目標還這么宏偉。
安德魯也需要養家糊口,他不得不去找個工作賺錢,在業余時間折騰Zig。
他去Apple面試,被拒,因為“不能在業務時間做Zig”。
他又去OKCupid面試,HR給了當頭一棒:“你業余時間做的任何事情,知識產權都歸公司所有。”
安德魯怒了:“什么狗屁規定,必須得從合同中刪除這一條。我在業余時間、用我自己的設備做的所有東西,知識產權歸我自己。”
HR最后妥協,安德魯入職了。
OKCupid是個大型的遺留項目,技術棧很奇葩,雖然是個SaaS產品,但是卻沒有用Java、Python、Go等流行語言,而是用C++來實現Web服務。
不過,安德魯“因禍得福”,他有機會觀察 C++ 在現實項目中的優點和局限,為 Zig 的設計提供參考。
遇到代碼的一些Bug,安德魯會忍不住地說:在 Zig 里,如果你這樣寫,編譯器就會報錯,而不是出現這個 bug。
Zig很快推出了0.1.0版,安德魯還收到了女朋友給他買的杯子作為慶祝。
安德魯也把Zig發到著名的Hacker News上做宣傳,不出意料,評論區中罵聲一片:
我們不需要另一門編程語言 這家伙是個傻子 他根本沒寫過編程語言,這是他的第一個項目吧。 編程語言太多了,趕緊滾吧 ......
這也是開源作者必然要遇到的一個坎,尤其是對于編程語言這種“極端信仰型”產品。
人們對自己熟悉的語言有強烈的歸屬感,對新語言天然抗拒。
安德魯早就預料到這一點,所以他并不驚訝,反而冷靜應對:分清“噴子”與“建設性批評”,不因情緒化的攻擊而氣餒,也不忽略真正有價值的反饋。
他認為:在開源世界中,你的發言并不是在和人交互,而是在舞臺上給“偷窺者”表演。
每一次發言,其實都是在塑造個人品牌。
Zig 最初在 Hacker News 上被“趕出去”,幾年后卻多次登上熱門榜單,吸引了越來越多認同其設計哲學的開發者。
這種“從被嘲笑到被追隨”的反轉,是每個偉大開源項目的共同命運:
Linux 被稱為“玩具系統”
Python 被嘲笑“太慢”
Rust 被質疑“復雜且沒必要”
而這些項目,最終都用時間證明了自己。
0 3
靠捐款生活
在OKCupid工作了一段時間后,安德魯發現了一個嚴重的問題:無法平衡養家糊口的工作和自己熱愛的開源項目。
全職工作占用了大量時間,隨著Zig社區的不斷擴大,他的業余時間都被用來合并pull request和響應問題,想做一些重大的規劃都沒有時間。
慢慢地,他覺得上班就是浪費生命,是別人賺錢棋局中的一個棋子。
怎么辦呢?
他先學朋友在在眾籌平臺Patreon開通了捐贈賬號,然后在文章中宣傳,雖然收入增長很緩慢,但是趨勢很穩定。
他算了一筆賬,如果辭掉工作,并且捐贈的增長速度繼續保持,那么存款會先下降一段時間,但在歸零之前會重新回升。
于是,他決定冒險一試,從公司辭職,嘗試靠捐款生活。
辭職以后,安德魯立刻發現自由給自己帶來了巨大的幸福感,再也不用每天困在公司,打卡勞動,每周工作40小時或者更多時間了。
當他把全部的精力都投入到Zig上以后,Zig的飛輪開始轉動:
(1)全職投入時,產出更快;
(2)當項目進展更快,社區信任度提升;
(3)當信任度提升,捐贈與關注也會增加;
(3)最終,你的經濟狀況又得到改善。
Zig用戶活躍度大幅度提升,越來越多的用戶群將Zig加入到他們的軟件棧當中,例如:
Bun: JavaScript / TypeScript 運行時 + 包管理器
TigerBeetle: 事務型數據庫 / 金融交易數據庫
Uber:基礎設施,工具鏈
雖然距離C語言的王者地位還差很遠,但是Zig已經成為一個非常活躍的編程語言了。
安德魯不想追求更多的利潤和增長,他成立了非盈利的Zig基金會,收入依然來自于用戶和支持者的捐款,每年大概有40多萬美元。
Zig董事會每年給安德魯開的工資是15.9萬美元,相當于紐約市高級程序員的平均工資。
但安德魯每年只拿10.8萬,足夠自己生活了,其他的又捐給了基金會。
現在安德魯推出新功能,改進產品的動力,完全來自于熱愛,而不是金錢。
這真是一種幸福的狀態。
0 4
結語
10年過去了,安德魯不但早已從失戀的痛苦中走出,并且把Zig建設成了許多程序員心中的“安全島”和“利器”。
它用現代化的語言特性、透明的內存控制和編譯期執行能力,解決了C語言遺留的痛點,也讓開發者們在編程時少了踩雷、多了自由。
更重要的是,安德魯不僅在寫一門新語言,也在寫一種新的人生腳本:開源不僅是一種技術,更是一種生活方式和價值觀的實踐。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.