翻譯自 Dylan Butler 《Protect Your Shed》
建造摩天大樓是一項浩大的工程。在訂購第一根鋼材之前,你得先有建筑藍圖、市政審批和安全審查。這需要成百上千號人,花上數(shù)月乃至數(shù)年去協(xié)同作業(yè)。你不可能隨便砌幾面石膏板墻,就指望整棟樓能承重。
而后院棚屋就是另一回事了。無需藍圖,不用審批,也沒人審查。你只需抓幾根木料、一把鋸子,就可以揮錘開工了。屋子可能漏風(fēng),雨稍大些屋頂就會滲水,但它卻是你憑一己之力,用一個周末搭建出來的。
過去六年,我的工程師生涯就游走于這兩種模式之間。白天,我在企業(yè)級規(guī)模上構(gòu)建銀行系統(tǒng);夜晚,我便鉆進棚屋,隨心所欲地鼓搗些自己喜歡的東西——做的都是些業(yè)余項目,有的能濺起些水花,有的則不了了之。
人們很容易把這兩種生活看成涇渭分明的兩個世界:一份是為了糊口,另一份是為了樂趣。但當(dāng)我回望這段職業(yè)生涯,卻領(lǐng)悟到一件更重要的事:企業(yè)級開發(fā)教會了我如何進行大規(guī)模工程構(gòu)建,但真正讓我一直保有工程師本色的,卻是那些個人項目。我常對年輕開發(fā)者們說,在業(yè)余時間做點自己的項目,遠比參加任何面試培訓(xùn)或刷 LeetCode 更有助于你的職業(yè)成長。
參悟規(guī)?;?/h2>
剛進入這個領(lǐng)域時,最令我印象深刻的是,真正花在寫代碼上的功夫少之又少。設(shè)計文檔、測試計劃、架構(gòu)評審……這些環(huán)節(jié)占據(jù)了大部分時間,以至于感覺“實際建造”只是工作的一小部分。但正是這些看似外圍的工作,才使得大規(guī)模建造成為可能。當(dāng)你需要處理一家大型銀行級別的交易量時,你不可能跳過設(shè)計階段,也無法在測試上偷工減料。每一個看似繁瑣的步驟之所以存在,都是因為曾有人用慘痛的教訓(xùn)換來了經(jīng)驗。
在這樣的環(huán)境中工作,你會接觸到個人難以企及的規(guī)模。比如,你會使用像 Cloud Spanner 這樣的工具——一種全球分布式、強一致性的數(shù)據(jù)庫,根本無法在筆記本上模擬運行。你學(xué)會防御性設(shè)計,在考慮功能之前,先琢磨各種失效模式。但這種規(guī)模效應(yīng)也有代價:僵化。你只是龐大工地上的一名工人,通常無權(quán)挑選材料,也鮮有機會去嘗試觸動地基。
把藍圖帶回家
棚屋,正是你將那些從工作中習(xí)得的藍圖,真正施展拳腳的地方。剛開始,我的個人項目亂七八糟。如果說有“架構(gòu)”這個東西,那也往往是事后諸葛——標準的棚屋做派。但久而久之,工作中的那些模式開始自然而然地滲透進來。當(dāng)你花了足夠多的時間去設(shè)計需要妥善處理故障的系統(tǒng),這種思維就會變成一種本能。
我的家庭實驗室(homelab)就是最好的例子。它從一個跑在單臺機器上的容器開始,最終演變成一個托管集群,擁有自動化部署和完全由代碼定義的基礎(chǔ)設(shè)施。這正是把摩天大樓的結(jié)構(gòu)性紀律,應(yīng)用到一個我擁有完全自由的空間里。我的個人項目不再輕易崩潰。它們依然是以我的方式快速構(gòu)建而成,但根基卻扎實了。企業(yè)教會了結(jié)構(gòu)完整性的規(guī)則,而棚屋則給了我一片真正能扮演建筑師角色的天地。
自由地折騰
當(dāng)你為自己而建,一個錯誤決策的代價無非是浪費一個晚上。但在工作中,選錯技術(shù)路線會影響到真實的團隊和真實的客戶。棚屋之所以如此寶貴,正在于其快速反饋的循環(huán)。你既是開發(fā)者,又是審查者,還是用戶。你可以推倒并重建某樣?xùn)|西,就為了體驗一下感受。
我曾用 Go 語言寫了一個 Game Boy Advance 模擬器,并非因為世界需要它,而是因為我想從那個層面弄懂硬件是如何工作的。我也曾自己搭建服務(wù),使用一些上班時絕不會碰的工具,單純是為了理解它們的取舍得失。你可以嘗試從未用過的工具,而不必為此寫一份提議書。這些實驗大多不會變成創(chuàng)業(yè)想法,但它們都會在你身上留下痕跡:一個新的模式,一個關(guān)于不該做什么的教訓(xùn),以及對技術(shù)領(lǐng)域更廣闊的理解。
最重要的是,棚屋是好奇心得以存活的地方。企業(yè)級開發(fā)價值巨大,但它也會消磨你。迭代匆匆,需求單上的條目永不見少,問題也開始顯得千篇一律。而個人項目正是你找回“編寫軟件其實很有趣”這一初心的所在。
把錘子帶進摩天大樓
在我職業(yè)生涯的早期,我對容器化和云基礎(chǔ)設(shè)施還很陌生,工作中的學(xué)習(xí)曲線相當(dāng)陡峭。但因為我利用自己的時間,在家里用 GCP 搭建和運行著容器化系統(tǒng),這些概念就吸收得更快。我從兩邊都在不斷試煉入手。這種模式在我的職業(yè)生涯中反復(fù)上演:某個周末,你出于好奇在棚屋里嘗試新東西;你弄清了它的取舍、痛點,以及那些文檔不會告訴你的細節(jié);幾個月后,當(dāng)團隊在工作中評估相同的工具或方法時,你就不再是從零開始了。
正因為在自己的環(huán)境里跌倒過,在自己的時間里評估過工具,親身體會過那些痛點,你才能夠在工作中做出有理有據(jù)的判斷,而非猜測。
守護你的棚屋
軟件工程的一大陷阱,就是認為你的日常工作就是技藝的全部。一個只建摩天大樓的工程師最終會筋疲力盡。問題變得重復(fù),流程令人窒息,創(chuàng)造的星火日益暗淡。你不再是因為想建東西而去建,而是因為業(yè)務(wù)需要才去建。你的鋒芒會漸漸消失。
不惜一切代價,保護好你的個人項目。那是你好奇心所在,是你實驗的園地,是你定義自己為一個創(chuàng)造者,而不僅僅是一個雇員的地方。企業(yè)會教你如何寫出經(jīng)得起考驗的代碼,但棚屋才能確保,你真正還想繼續(xù)寫下去。