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