初創(chuàng)公司使用 Rust 的感悟

在建立一家公司時(shí),你需要著手從根本上解決問題。出于這個(gè)原因,開發(fā)者們被這種改變世界的浪漫想法吸引了。我們本質(zhì)上是問題解決者。
作為工程師,我們有時(shí)會(huì)(并且我們大多數(shù)人已經(jīng))對(duì)我們這些問題的解決方案充滿熱情。我們中有實(shí)用主義者,他們只是把事情做好——他們快速有效地解決問題。我們中有理想主義者,他們會(huì)努力尋找優(yōu)雅的可擴(kuò)展解決方案并嘗試解決問題。無論你屬于哪個(gè)陣營,在某個(gè)時(shí)刻,你都需要對(duì)將使用哪些技術(shù)來解決你在世界上看到的問題形成意見——而這種意見將不可避免地引起爭(zhēng)論。
傳統(tǒng)智慧是“為工作使用正確的工具”。例如,編程語言的選擇取決于你要解決的問題的領(lǐng)域。如果你在一個(gè)隱蔽的項(xiàng)目中實(shí)施某種算法,很容易說明該工作的語言可能是什么。你可以運(yùn)行基準(zhǔn)測(cè)試并一一測(cè)試每種候選語言的執(zhí)行時(shí)間(如果你正在優(yōu)化執(zhí)行時(shí)間)。你可以說服自己做出了一個(gè)理性和“客觀正確”的決定。
然而,在剛開始開發(fā)業(yè)務(wù)時(shí),你的優(yōu)化功能是一個(gè)高維度的混亂,涉及性能、開發(fā)速度、招聘、服務(wù)器成本、生態(tài)系統(tǒng)、工具、支持、許可證等。你可以為對(duì)最重要的東西分配權(quán)重。但歸根結(jié)底,業(yè)務(wù)起決定作用。
在 Synth,我們致力于構(gòu)建世界上最好的數(shù)據(jù)生成器。我們有意識(shí)地決定將 Rust 用于我們的主要產(chǎn)品線。經(jīng)過一年多的建設(shè),我有機(jī)會(huì)在公司剛啟動(dòng)的背景下看到 Rust 最好和最壞的一面——這篇文章是這些(有時(shí)是憤世嫉俗的)想法的匯集。
開發(fā)速度
Rust 有著非常陡峭的學(xué)習(xí)曲線。來自 OO 背景的我花了幾個(gè)月的時(shí)間才在 Rust 中有一定生產(chǎn)力。這挺讓人失望的,因?yàn)槲矣X得我缺乏影響團(tuán)隊(duì)的生產(chǎn)力,確實(shí)是這樣。即使你最終變得有生產(chǎn)力(而且你會(huì)),Rust 也會(huì)迫使你真正深入思考你正在做的事情,而事情不可避免地需要更長的時(shí)間才能完成。今天一個(gè)深思熟慮的設(shè)計(jì)決定可能會(huì)在幾個(gè)月后再次困擾你。當(dāng)你試圖對(duì)借用檢查器讓步時(shí),簡單的更改或重構(gòu)可能導(dǎo)致完全重來,這挺致命的。
初創(chuàng)公司整個(gè)的前提是你必須快速迭代。很少有公司從一開始就知道他們應(yīng)該構(gòu)建什么。這是一個(gè)迭代過程,涉及與用戶交談并進(jìn)行更改來建立反饋循環(huán)。你建立反饋循環(huán)的速度越快,成功的可能性就越大。
正確性
Rust 強(qiáng)調(diào)程序的正確性,這在一定程度上彌補(bǔ)了開發(fā)速度的影響。可以這么說:“如果它可以編譯,它就可以工作”。在使用 Rust 構(gòu)建時(shí),我發(fā)現(xiàn)這在很大程度上是正確的,因此用它工作是一種絕對(duì)的樂趣。
即使你的程序并不完美,你也能容易的了解故障模式。當(dāng)你的程序完全按照你期望的方式中斷時(shí),未知故障模式的集合會(huì)大大減少。缺少空指針與 Result 范式(相對(duì)于異常)會(huì)讓你編寫正確的程序,其中邊緣情況可以很好地理解并處理(或者 unimplemented!,但沒有什么是完美的)。
如果你已經(jīng)達(dá)到產(chǎn)品市場(chǎng)契合度 —— 正確性可能會(huì)抵消開發(fā)速度的影響。當(dāng)你知道正在構(gòu)建什么時(shí),你需要減少迭代。你的開發(fā)團(tuán)隊(duì)也將花費(fèi)更少的時(shí)間來處理錯(cuò)誤,因?yàn)槟阍陂_發(fā)時(shí),編譯器已經(jīng)處理過這些問題。
如果它可以編譯,它就可以工作——當(dāng)你積極地發(fā)布代碼時(shí),這是一個(gè)無價(jià)的資產(chǎn)。
人才
對(duì)于處于早期階段的初創(chuàng)公司來說,獲得優(yōu)秀的人才是非常重要的。有能力和有經(jīng)驗(yàn)的 Rust 開發(fā)人員的數(shù)量少,這一事實(shí)不利于獲得優(yōu)秀人才。Rust 陡峭的學(xué)習(xí)曲線加劇了這種情況,因?yàn)槟阈枰薪?jīng)驗(yàn)的人,否則他們需要幾個(gè)月的時(shí)間才能開始開發(fā)。然而,這并不是全貌。
根據(jù)我們的經(jīng)驗(yàn),普通 Rust 開發(fā)人員的能力遠(yuǎn)高于更傳統(tǒng)的編程語言。有些優(yōu)秀工程師會(huì)因?yàn)槟闶褂?Rust 而尋找你作為雇主,這也是一個(gè)驚喜。他們不想用 *script、Java 或 C++ 工作。他們想使用 Rust,因?yàn)樗馨簟?/p>
開源
在 Synth,我們選擇采用開放核心業(yè)務(wù)模式。開放核心業(yè)務(wù)背后的理念是你開發(fā)和開源產(chǎn)品,并獲得許可,解決真正的技術(shù)問題。你致力于公開建立用戶群、社區(qū)和出色的產(chǎn)品。然后,圍繞解決相應(yīng)的組織問題來構(gòu)建業(yè)務(wù)模型——這就是你賺錢的方式。
我們真的很幸運(yùn)有一群非常活躍的貢獻(xiàn)者——提出想法、報(bào)告錯(cuò)誤和貢獻(xiàn)(有時(shí)非常重要)代碼。很難確定,但我們有一種強(qiáng)烈的預(yù)感,很多貢獻(xiàn)者都很活躍,因?yàn)樗麄儗?duì) Rust 項(xiàng)目特別感興趣。我們的許多貢獻(xiàn)者也對(duì)學(xué)習(xí) Rust 感興趣——不一定是該語言的老手。隨著我們核心團(tuán)隊(duì)中更有經(jīng)驗(yàn)的成員指導(dǎo)和審查年輕 rustaceans 的代碼,建立了一個(gè)共生的正反饋循環(huán),這非常有效。
感謝我們所有的貢獻(xiàn)者——你們知道自己是誰,你們太棒了。
庫
Rust 擁有令人難以置信的高質(zhì)量庫的生態(tài)系統(tǒng)。Rust 核心團(tuán)隊(duì)以身作則,專注于高質(zhì)量和嚴(yán)密的標(biāo)準(zhǔn)庫。高度集中的標(biāo)準(zhǔn)庫的結(jié)果是(不幸的是)缺乏用于在標(biāo)準(zhǔn)庫之外做事的規(guī)范庫。所以你想要一個(gè)網(wǎng)絡(luò)服務(wù)器,從可用的 100 個(gè)中選擇一個(gè)。你想要一個(gè)用于處理 JWT 令牌的 crate( Rust 庫的術(shù)語)?有 9 個(gè),選一個(gè)。我的意思是,即使是像異步運(yùn)行時(shí)這樣基本的東西也會(huì)在 tokio 和 async-std 以及其他選擇之間區(qū)分。作為一個(gè)年輕的 rustacean,這可能有點(diǎn)不知所措。
隨著時(shí)間的推移,最終,獲得壓倒性的支持并成為與其替代品不同的嚴(yán)重依賴項(xiàng)的那些庫會(huì)變成隱式規(guī)范。同樣在 RustConf 2021 的項(xiàng)目更新中提到[1],將來可能會(huì)有 “推薦 crates” 的想法。
在你開始時(shí),缺乏規(guī)范的非標(biāo)準(zhǔn)庫是一個(gè)問題 —— 但隨著對(duì)生態(tài)系統(tǒng)的更好理解,隨著時(shí)間的推移,這種情況會(huì)減少。什么一直在不斷影響我們的發(fā)展速度,是一直缺乏的client Rust 庫。我們不得不自己編寫一堆不同的集成,但它們通常很笨重,因?yàn)槲覀儧]有時(shí)間使它們真正高質(zhì)量。例如,谷歌的大部分產(chǎn)品充其量都有一個(gè)由社區(qū)維護(hù)的非官方代碼生成的 crate,最糟糕的是絕對(duì)沒有。你需要從頭開始編寫它。
你的創(chuàng)業(yè)公司應(yīng)該使用 Rust 嗎?
這要看情況。假設(shè)你正為 Rust 在正確的域中構(gòu)建產(chǎn)品(比如 CLI,而不是社交媒體網(wǎng)站),即使這樣,答案也不一定。如果你沒有接近 100% 的確信你正在構(gòu)建什么,我會(huì)建議別用 Rust。開發(fā)速度和能夠進(jìn)行快速迭代對(duì)于早期的初創(chuàng)公司來說非常重要,以至于它超過了 Rust 帶來的很多好處。
如果你的公司處于后期階段,并且你清楚地了解應(yīng)該構(gòu)建什么(假設(shè)情況如此),那么我會(huì)說可以用 Rust。Rust 程序的“正確性”以及 Rust 吸引優(yōu)秀工程師的傾向可以幫助建立優(yōu)秀的工程文化和優(yōu)秀的公司。
作者:Christos Hadjiaslanis,原文鏈接:https://www.getsynth.com/docs/blog/2021/10/07/building-a-startup-with-rust
參考資料
中提到: https://youtu.be/ylOpCXI2EMM?t=1048
我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗(yàn)!2012 年接觸 Go 語言并創(chuàng)建了 Go 語言中文網(wǎng)!著有《Go語言編程之旅》、開源圖書《Go語言標(biāo)準(zhǔn)庫》等。
堅(jiān)持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場(chǎng)心得和創(chuàng)業(yè)感悟!歡迎關(guān)注「polarisxu」一起成長!也歡迎加我微信好友交流:gopherstudio
