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