高薪,讓大廠成為一個(gè)外界無數(shù)從業(yè)者憧憬與向往的地方。據(jù) levels.fyi 最新的薪酬報(bào)告顯示,Meta 的首席工程師薪酬最高,總薪酬中位數(shù)高達(dá) 978,000 美元。
7 月 20 日,Meta 工程師、React 項(xiàng)目核心人員、Redux 原作者 Dan Abramov 在 Twitter 上連發(fā) 15 條推文,以“我感到苦樂參半,幾周后我就要辭去 Meta 的工作了”為開場(chǎng)白,官宣了自己即將從這座圍城中離開的消息。
15 條推文中蘊(yùn)藏著些許的無奈,也讓人擔(dān)心 React 這個(gè)前端主流框架的未來動(dòng)向。
今年正值 React 十周年,其在 Web 前端開發(fā)中占據(jù)主導(dǎo)地位。據(jù) JavaScript 現(xiàn)狀調(diào)查顯示,React 使用率自 2016 年以來穩(wěn)步攀升,目前穩(wěn)居第一,使用率已經(jīng)超過 80%。
今年也是Dan Abramov 在 Meta 工作的第 7 個(gè)年頭,一直以來,他作為 React 的官方發(fā)言人,長(zhǎng)期活躍在開發(fā)的一線,也被眾多開發(fā)者親切地稱之為“Dan 神”。
如今突然宣布將要從 Meta 離職,其實(shí)并不是 Dan Abramov 剛萌生起來的想法,而是幾經(jīng)心理斗爭(zhēng)做下的決定。
Dan Abramov 表示,「在過去的三年里,我一直說我會(huì)在“一年左右”的時(shí)間離開,但感覺總是沒有合適的時(shí)機(jī)」。
(2)遵循 React 團(tuán)隊(duì)的“全棧架構(gòu)愿景”, 能夠看到廣泛可用的 Suspense 數(shù)據(jù)獲取集成交付。
“我對(duì)是否要早點(diǎn)離開感到猶豫,因?yàn)椴痪们?,離開 Meta 就意味著離開 React 團(tuán)隊(duì)。那對(duì)我來說太悲傷了”,Dan Abramov 說道。
與此同時(shí),Dan Abramov 也表示,如今的 React 已經(jīng)成為一個(gè)多公司項(xiàng)目,團(tuán)隊(duì)中也有幾位獨(dú)立工程師可以挑大梁了。
接下來,Dan Abramov 將作為獨(dú)立工程師留在 React 團(tuán)隊(duì),這也意味著他不會(huì)得到任何公司的全職贊助,繼續(xù)參與團(tuán)隊(duì)的工作與相關(guān)會(huì)議。
對(duì)于未來,Dan Abramov 也有些迷茫,因?yàn)樗策€不清楚其未來參與 React 團(tuán)隊(duì)開發(fā)的確切性質(zhì)。
其回憶道,「七年前,當(dāng)我開始加入 React 團(tuán)隊(duì)時(shí),我主要負(fù)責(zé)編寫代碼。然而,我的隊(duì)友在這方面經(jīng)常比我出色,隨著時(shí)間的推移,我發(fā)現(xiàn)自己傾向于做其他事情」,比如說面向開發(fā)者解釋一些事情。
不過,Dan Abramov 表示雖然自己全身心地投入到這個(gè)項(xiàng)目中,但現(xiàn)在有點(diǎn)力不從心了。他坦言:
我發(fā)現(xiàn)現(xiàn)在很難寫作了,因?yàn)槲覠o法再達(dá)到自己頭腦中的標(biāo)準(zhǔn)。這可能會(huì)隨著時(shí)間的推移而消失,但我需要從文字寫作中休息一下。
有時(shí)人們會(huì)認(rèn)為我為 React 寫了很多代碼,但其實(shí)我已經(jīng)很久沒有這么做了。除了合作編寫新文檔,我在過去幾年中的其他貢獻(xiàn)主要是社區(qū)粘合劑工作:成為社區(qū)和團(tuán)隊(duì)之間的橋梁。
雖然我很喜歡這類工作,但單靠我一個(gè)人的力量是難以為繼的,這也給我?guī)砹饲榫w上的影響。在某些時(shí)候,作為一個(gè)單點(diǎn)故障點(diǎn)就不再有趣了,我覺得我既辜負(fù)了團(tuán)隊(duì),也辜負(fù)了社區(qū)。
同時(shí),有些遺憾的是,Dan Abramo 表示,「目前,只有兩家公司資助員工全職從事 React 工作,但我們希望將來能有來自其他公司的貢獻(xiàn)者加入?!?
其實(shí)對(duì)于 Dan Abramov,不少開發(fā)者從其分享的開發(fā)文檔中獲益,有開發(fā)者表示,作為 Redux 的原作者與 React 社區(qū)核心主力,他一直很接“地氣”,無論是分享技術(shù)文章,還是回答社區(qū)的問題,都能夠深入淺出地分享。
除了 Dan Abramov 為 React 帶來的貢獻(xiàn)引人注目,其“逆風(fēng)翻盤”的成長(zhǎng)經(jīng)歷也讓人敬佩。
Dan Abramov 真正深入學(xué)習(xí) JavaScript 是在十四歲的時(shí)候。當(dāng)時(shí),他的繼父向他提出了一個(gè)有趣的任務(wù),需要開發(fā)一個(gè)數(shù)據(jù)庫(kù)來跟蹤照片拍攝的信息。這個(gè)簡(jiǎn)單的任務(wù)讓 Dan 陷入了編程的世界,他對(duì)此產(chǎn)生了濃厚的興趣。
不過,Dan 的數(shù)學(xué)成績(jī)不太好,所以他可以選擇與編程有關(guān)的選項(xiàng)并不多。從剩下的選項(xiàng)中,Dan 選擇了一所向?qū)W生提供 MacBook 的大學(xué)。
大學(xué)第一年結(jié)束,Dan 發(fā)現(xiàn)接下來兩年里,大學(xué)課程中不會(huì)有太多編程內(nèi)容,但有很多線性代數(shù)、物理和其他科目,他對(duì)此不太感興趣。
與此同時(shí),他在經(jīng)歷偷懶、逃課之后,發(fā)現(xiàn)當(dāng)他參加考試時(shí),老師不允許他交卷,除非交錢給這個(gè)老師參加他的“補(bǔ)習(xí)班”,這讓他對(duì)大學(xué)的初始印象并不好。
不過,從職業(yè)角度來說,也是在這個(gè)時(shí)候,Dan 找到了人生第一份工作——軟件開發(fā)者,可以拿到$18k/年的工資。
當(dāng)暑假過去,大二開學(xué)時(shí)候,他發(fā)現(xiàn)通過工作可以拿到工資,這磨滅讓他去學(xué)校聽課的最后一點(diǎn)動(dòng)力。最終,他毅然決然地選擇了退學(xué)。
那時(shí),他的大部分工作是在便宜的外包公司里面修復(fù)糟糕的 Bug。由于沒有行業(yè)經(jīng)驗(yàn),Dan 過度使用了各種他能用到的新技術(shù)。雖然這樣做對(duì)于編寫項(xiàng)目而言很糟糕,但是他也完美地完成了不少任務(wù)。
那段時(shí)間,發(fā)生了很多令 Dan 終生難忘的事情,比如為一個(gè) 13000 行的函數(shù)修復(fù) Bug。那時(shí),為了弄清楚它到底是如何工作的,Dan 只能將他們打印出來,將打印出的紙鋪在桌上,用鉛筆在上面做注釋。最終發(fā)現(xiàn),那是同一段程序片段在不同的情況下被重復(fù)寫了 50 遍。為了探索那個(gè)服務(wù)在實(shí)際產(chǎn)品中如何工作,Dan 添加了無數(shù)的輸出日志,然后從無到有的重構(gòu)了一遍這個(gè)程序。終于,它不再那么容易崩潰了。
一如現(xiàn)在行業(yè)中的外包工作,Dan 經(jīng)過幾個(gè)項(xiàng)目下來,感覺備受“折磨”。在堅(jiān)持了一段時(shí)間后,某一天,Dan 在等待公司 HR 上班之后又毅然地選擇了辭職。
在失業(yè)且輟學(xué)的期間,Dan 不斷地反思自己,最終也發(fā)現(xiàn)自己的編程技術(shù)需要提高。偶然間,他在網(wǎng)上看到一篇從硅谷回來的俄國(guó)企業(yè)家寫的文章。這個(gè)人正在尋找志愿者參與他的個(gè)人項(xiàng)目,作為回報(bào)他會(huì)免費(fèi)教授開發(fā)技術(shù)。
于是,Dan 選擇加入了這個(gè)項(xiàng)目。結(jié)果發(fā)現(xiàn)這位企業(yè)家提供的教學(xué)有限,好在 Dan 與其他志愿者一起努力學(xué)習(xí) Git、Python 基礎(chǔ)知識(shí)、Django,以及一些 CSS 和 JavaScript。
在接下來的一段時(shí)間里,Dan 參加了更多的編碼課程。2012 年,Dan 從圣彼得堡搬到了莫斯科,開始在一家網(wǎng)絡(luò)郵資解決方案(軟件)公司 Stampsy 工作,拿著$30k/年的工資。
在 Stampsy,Dan 開始開發(fā) iPad 應(yīng)用程序,并學(xué)習(xí)如何使用 iOS。他們的應(yīng)用程序于 2013 年 4 月發(fā)布,得到了蘋果公司的認(rèn)可。與此同時(shí),他們也開始在 GitHub 上發(fā)布自己的代碼,與開發(fā)者社區(qū)分享他們的成果。
2014 年,Dan 開始接觸 React。他們決定將原來的 iPad 應(yīng)用轉(zhuǎn)換為 Web 應(yīng)用,這使得 Dan 開始更深入地學(xué)習(xí) JavaScript。在同事的推薦下,他嘗試了React,并從 Backbone 轉(zhuǎn)換了第一個(gè)組件——一個(gè)贊按鈕。隨后的一年里,他們將整個(gè) UI 都轉(zhuǎn)換成了 React,并發(fā)布了許多新功能。
鑒于當(dāng)時(shí) React 周圍的生態(tài)系統(tǒng)還很小,Dan 希望為 React 做出自己的貢獻(xiàn),并聯(lián)系了當(dāng)時(shí)的 React 核心團(tuán)隊(duì)成員 Paul Oshannessy,詢問是否有任何他可以處理的拉取請(qǐng)求。
與此同時(shí),Dan 也開始就 React 技術(shù)在各地進(jìn)行分享演講,首先是在 Stampsy 的同事面前,然后在 BerlinJS 聚會(huì)上。2014 年,Dan 還收到了 Facebook招 聘人員的第一封電子郵件,但由于他沒有足夠的工作經(jīng)驗(yàn),并且之前退學(xué)了沒有文憑,所以招他到美國(guó)進(jìn) Facebook 并不容易。
不過,他并沒有放棄對(duì) React 的學(xué)習(xí)與投入。后來,在受邀參加 ReactConf 時(shí),Dan 想帶來關(guān)于熱加載功能的主題演講,同時(shí),他也在分享中加一些噱頭——“時(shí)間旅行”。
不過,隨著演講日期即將到來,Dan 仍然不知道到底如何實(shí)現(xiàn)“時(shí)間旅行”。他知道 Elm 語言有類似的功能,但他也擔(dān)心自己的研究最終會(huì)告訴他這個(gè)功能在JavaScript 上可能實(shí)現(xiàn)不理想。
在那個(gè)時(shí)間節(jié)點(diǎn)上,市面上流行著非常多 Flux 的函數(shù)庫(kù)。Dan 嘗試其中幾個(gè),Andrew Clark 開發(fā)的 Flummox 讓他眼前一亮,他模糊的感覺到與 Flux 結(jié)合熱加載能夠讓自己實(shí)現(xiàn)時(shí)間旅行。Sunil 的 gist 讓他有了一個(gè)點(diǎn)子:Flux 范例中用一個(gè) reducer 函數(shù)取代原有的 store。
最終,趕在這場(chǎng)演示時(shí)間的 deadline 前,Dan 實(shí)現(xiàn)了 Redux,這是 Flux 模式的一種變體,但具有更簡(jiǎn)化的功能。
在演講結(jié)束后,他得到了 Flummox(一個(gè)受歡迎的Flux庫(kù))的開發(fā)者Andrew Clark的支持,最終兩人一同編寫了 Redux。
最終在 Jing Chen 推薦下,Dan通過面試,拿到了 offer,入職了 React Core 團(tuán)隊(duì),也成為唯一在英國(guó)遠(yuǎn)程工作的成員。
面向未來,Dan 表示,「不做“計(jì)劃”和“目標(biāo)”,現(xiàn)在正是嘗試新事物、重新找回初學(xué)者感覺的好時(shí)機(jī)。我不知道接下來我要做什么。可能會(huì)做一些 YouTube,一些咨詢。我確實(shí)有點(diǎn)渴望編寫一些產(chǎn)品代碼來應(yīng)對(duì)大公司之外的快速迭代周期。也許我會(huì)結(jié)合所有這些。我也有點(diǎn)想什么都不做?!?
不過,從 Web 框架的角度來看,Meta 允許他們開源項(xiàng)目最著名的推動(dòng)者之一 Dan 離開,也有人將其解讀為,Meta 在為其開源產(chǎn)品融資方面不那么熱情了。
如今,在 React 成熟發(fā)展之際,Dan 離開,而另一邊,Google 仍然在繼續(xù)維護(hù) Angular 框架的創(chuàng)新、尤雨溪也在發(fā)力 Vue,這也為未來前端框架的新格局帶來一些不定性。
祝福他。新的 React 文檔真是天賜良機(jī)。我真希望我一開始就有一個(gè)好的起點(diǎn),而不是原始文檔和社區(qū)網(wǎng)絡(luò)功能版本的混雜體。
如果你查看提交歷史記錄,他已經(jīng)有一段時(shí)間沒有參與到 React 的工作中了,這對(duì) React 來說應(yīng)該不會(huì)有太大影響。
這并不是貶低他的重要性,只是因?yàn)樗麚?dān)任 React 的代言人有一段時(shí)間了,所以有人會(huì)認(rèn)為 React 可能會(huì)放緩或發(fā)生一些負(fù)面的事情。
我祝愿他好運(yùn),我無法想象他一定感受到了怎樣的壓力,我相信這是一個(gè)艱難的決定。