來自 Redux 表單庫創建者的全棧開發者技巧

已發表: 2022-03-11

2019 年 2 月,Toptal 的社區團隊發起了一項全新的計劃:每月有機會與 Toptal 的網絡專家實時互動。 Ask Me Anything (AMA) 會議對 Toptal 核心團隊和人才網絡的所有成員開放——任何人都可以提出問題。 在這篇文章中,我們從與 JavaScript 和 Redux 專家 Erik Rasmussen 的 AMA 中精選了一些問題和答案。 Erik 討論了開源軟件開發的挑戰、開發人員技巧和 JavaScript 的波動世界,他如何處理冒名頂替綜合症和作為一名有需求的開發人員的倦怠,以及他的頂級播客建議。

Erik 是一位擁有超過 25 年開發經驗的全棧 JavaScript 專家,專攻 React、Redux、React 中的表單和 GraphQL。 在 GitHub(一個基於 Web 的版本控制託管服務,擁有超過 2800 萬用戶)上,他以超過 20,000 顆星進入了前 100 名。 他還是 React 中第一個和第三個最受歡迎的表單庫的作者:Redux-Form 和 React-Final-Form。

Toptal JavaScript 和 Redux 專家 Erik Rasmussen

Redux 表單和開源軟件的狀態

為什麼在 Redux Form 取得巨大成功後決定創建另一個表單庫?

在使用 Redux Form 的過程中,我學到了很多經驗,並深入了解了全球 React Form 開發人員的需求。 如果不重新審視問題,就無法解決 React Form 的一些問題。 (這裡有更多細節。)

許多開發人員夢想創建一個廣受歡迎的開源項目。 像 Redux Form 這樣成功的項目有哪些意想不到的後果(好的和壞的)?

當您可以修復一個阻礙開發人員或整個團隊完成項目的錯誤時,這是非常有益的。 當人們自己發現並修復錯誤時,這也非常棒。 到目前為止,人們在尋求幫助時都非常友善和親切。 我還沒有與認為我欠他們一個修復的正義用戶進行互動。

在具有挑戰性的方面,倦怠是真實存在的,我們還沒有找到一種方法來補償 OSS 開發人員為 OSS 項目付出的時間和精力。 Redux Form 被全球數十億美元的公司用於交易業務,它的存在為安裝它的團隊節省了數千小時的開發時間,但沒有好的解決方案可以將哪怕是一小部分錢給作者.

是否有任何有前途的解決方案可以補償像您這樣的開源開發人員?

我的一個朋友創辦了這家名為 CodeFund 的公司。 他有這樣的想法,“如果我們可以在代碼庫文檔上放廣告怎麼辦?” 作為開發人員,我們整天都在查看文檔並弄清楚如何實現我們正在做的任何事情。 此外,開發人員比普通網絡衝浪者賺的錢要多得多,所以我們是奢侈品的潛力股。

CodeFund 提出了一個想法,即文檔是一個非常適合做廣告的地方。 我是最初的飛行員之一。 它工作得很好,但他們在 GitHub 上遇到了問題。 最初,我們在 GitHub 存儲庫本身上投放廣告,但 GitHub 和律師突然介入並拒絕。 這是一種恥辱。 CodeFund 與他們協商了一段時間,但最終他們拒絕了。

借助流量大的圖書館文檔,您每月可以獲得 150 美元,這並沒有支付它的價值。 有一些稀有的庫——比如 Babble 或 Webpack——那裡有足夠的錢給他們,他們實際上可以支持兩三個全職開發人員努力使這件事變得更好。 Babble 和 Webpack — 價值數十億美元的公司正坐在他們的基礎設施上,而且 Redux Form 肯定支持它們。

在您訪問的幾乎任何網站中,您都可以查看源代碼,並且可以看到一些代碼是由某個沒有得到適當補償的特定人編寫的。 需要提高意識,讓人們更加欣賞開源是什麼以及我們中的一些人投入的時間。

為什麼要創建開源和免費的東西? 對像你這樣的開發者有什麼激勵?

你創建它的原因是因為你需要它來處理你目前正在做的任何事情。 當你發布它時,其他人會來讓它變得更好。 開源夢想是你說,“我製造了一輛小手推車,可以幫助我把石頭從這裡帶到那裡”,然後有人出現,他們把它做得更好。 在你的下一個項目中,你返回並使用同一個庫,你會說,“哇,這東西移動得更快了。 現在好多了。”

這也是非常有益的。 當人們說:“這讓我們堅持了三個星期,而這個花了你三個小時完成的小修復為我們節省了三個星期的時間。”我受到了多巴胺的打擊。 有一點上癮循環,你會得到積極的強化,感覺很好。

在我的第二個表單庫中,人們並沒有說“嘿,我們想要另一個表單庫”,而只是我想了一種方法讓它變得更好。

這就是你為什麼這樣做的夢想。 但這肯定不是為了錢。

在一個理想的世界裡,你會因為創建開源軟件而獲得多少報酬? 只是錦上添花?

如果有人付給我六位數的錢讓我整天從事開源工作,我不介意。 如果你看一下產生的價值與成本,開源的比率是如此之高。 你開始做一件事的小型圖書館,一件事非常非常好。

如果世界上每家公司都必須指派自己的開發團隊來做這件事,那麼結果就會大不相同。 事實上,我們有開源並且我們可以有一個解決方案——一個最好的算法泡沫在頂部——這意味著世界上每個人都內置了這種效率。

開源的另一個價值是,如果您使用的是您編寫的東西並且只有您的公司在使用它。 . . 將其與 1,000 家公司正在使用的東西進行比較。 他們已經發現了可能成為問題的錯誤空間的每一個小角落和縫隙,然後你把它插入到你的東西中——你是金子。 你會對此更有信心。

JavaScript 的動態世界

在 JavaScript 領域待了這麼久,你一定已經看到了這麼多熱門的新框架 [用於構建 JavaScript 應用程序] 來來去去。 您如何掌握行業動態,以便決定採用哪些框架?

你必須感受一下開發社區的風向。 目前 TypeScript 和 Flow 之間的戰鬥就是一個很好的例子。 我最初在那場比賽中選錯了馬,假設 Facebook 會成為打字框架的更好管家。 但我認為 TS 幾乎贏得了這場戰鬥,現在我正在朝著這個方向慢慢遷移。

Twitter 的一個角落是“開發者 Twitter”。 如果您關注了足夠多的人(也許您需要一百個左右的樣本量),您就可以了解風向在何處以及什麼變得流行。 你會收到很多帖子,比如“我曾經使用庫 A,但我剛剛了解了庫 B,一切都變得簡單多了。” 你得到了足夠的這些,你就像,“好吧,也許我應該看看另一個圖書館。”

JavaScript 領域的趨勢來來去去。 它會一直在運動嗎?

我認為(並希望)它將繼續發展。 停滯是科技的死亡。 甚至 Java 現在也在顯著創新:您在 Java 10 中可以做的事情與您祖母的 Java 6 完全不同。

最終使用 Tech X 構建您的應用程序可能會讓人筋疲力盡,只是看到所有酷孩子現在都在使用 Tech Y。但這就是我們所處的行業。

在您看來,要真正理解哪些 JavaScript 概念對於掌握這門語言特別重要?

我想說函數式編程和傳遞函數的想法非常重要。 特別是如果您來自 Java 或 C++ 等語言。

你認為 React 應該用於構建 SPA [單頁應用程序] 還是僅用於常規頁面中的組件?

這就是 React 的美妙之處:它用途廣泛。 在我的日常工作中,我一直在慢慢地為舊的 Java/jQuery 應用程序中的所有新功能引入 React。 給定一個要操作的 DOM 節點,React 工作得很好。 它不需要控制整個應用程序。

在啟動一個新的 React 應用程序時,您經常從頭開始使用哪些工具和庫?

我認為create-react-app現在是這方面的明顯贏家。 四年前,當沒有這樣的事情時,這要困難得多。

你如何處理你的反應應用程序中的應用程序狀態?

當 Redux 出現時,它顯然是答案。 但是,我發現我的大部分 Redux “狀態”都是諸如loadinglistOfObjects類的東西,而我最近一直在使用 Apollo GraphQL 來處理這些東西。 像isSideNavOpen這樣的其他東西可以很容易地使用基於上下文的組件進行管理。 也就是說,Redux 仍然有一些合法的用例,但我在簡單的 React 應用程序中沒有遇到過。

你最喜歡的編輯器/IDE 是什麼?

啊,這個問題!

我來自Java,多年來對JetBrains IntelliJ 非常滿意,但是對於JS 來說有點慢。 首先我去了 Atom,但最後選擇了 VS Code。 它對 Jest 和 Flow 以及 TypeScript 的集成是無與倫比的。

你對像opal這樣的同構開發有什麼看法,它將ruby​​ 轉換為JS ,然後為 Rubysts 在 Pure Ruby 中編寫 React/Flux 結構的應用程序開闢了道路(無需編寫任何 JS)?

我認為 JavaScript 已經跳轉到服務器這一事實是一件大事。 能夠在客戶端和服務器上使用相同的代碼進行渲染是巨大的,而且更有可能是未來的方式。

你認為我們目前最流行的 JS 框架最大的問題是什麼?

我不完全確定,但我真的很喜歡像 Zeit 這樣的公司正在用 Next.js 追求的 css-in-js、無服務器和 SSR 的方向。

作為一個在 90 年代後期建立網站的人,我們將回到靜態網站,這對我來說真的很有趣。 我們將返回在構建時生成所有內容,然後您將靜態內容放在服務器上,然後您可以通過他們所謂的重新補水添加動態內容。 渲染整個頁面後,您可以獲取額外的 JavaScript 來實際製作動畫並移動組件。

Zeit 的 Now 框架也支持靜態構建到您的網站,因為沒有什麼比下載靜態 HTML 文件更快的了。 它只是一個文本文件,然後繁榮,你明白了。 而如果您要訪問服務器,它必須訪問數據庫可能四到一百次才能構建您需要顯示的頁面。 那是超級慢。

靜態的想法越來越受歡迎。

你覺得 JavaScript 可以接替“成熟”的語言(如 Java 和 C++),成為企業的首選語言嗎?

確實。 人們現在使用“無服務器”節點所做的事情具有極強的可擴展性,我認為企業 API [應用程序編程接口] 可以並且將會用 JavaScript 重寫,至少由更敏捷和具有前瞻性的公司來重寫。

開發人員應該在客戶端中尋找什麼?

你想要給你一定程度的信任和自主權,假設你足夠資深,值得擁有它。 我不想接受一個有人一直在看著我的工作。 很多時候,在開發工作中,您可能需要花 5 分鐘時間來修復某些問題,但您會花費 4 個小時來解決構建它的一些小問題,因此您無法實際測試它。 很多時候,我會在一個問題上花費 8 到 10 個小時——我真正在工作,一直非常專注——而實際的解決方案就像兩行代碼。 您需要一個對您的工作有一定程度了解的雇主。

關於冒名頂替綜合症、倦怠和減壓

冒名頂替綜合症似乎在開發人員中並不罕見。 你有沒有經歷過,如果有,你會如何應對?

絕對地。 尤其是在會議上發言時。 (或者做一個AMA?)

在教學/指導方面,您需要意識到自己比上個月所做的更了解自己所做的事情。 因此,總會有一些人回到你曾經的位置,可以從你的知識中受益。

能夠說“我不知道,讓我們一起調查”也很重要(也是一個很好的育兒技巧)。

埃里克·拉斯穆森在最近的一次會議上發言

你生活中的一天是怎樣的? 你如何安排所有事情,這樣你就不會每週工作 100 小時而筋疲力盡?

當我真正深入研究開源時,這會花費我更多的時間; 有時,我不得不一次拉回一個月左右。 我帶我的孩子上學,然後我會花時間看看人們遇到了什麼樣的問題。 如果他們真的很嚴重,那麼我會花一些精力嘗試糾正他們或以有用的方式做出回應。

我有一份與開源完全無關的日常工作,這佔用了我很多時間。 一整天,我都設置了通知,以便查看是否存在嚴重問題。 如果發布了新功能或其他東西,那麼那個時候更有可能出現錯誤。

我了解到,為項目編寫需求的人肯定會說:“這應該在昨天完成,為什麼還沒有完成?” 我曾經有過很多次,無論哪個團隊收到我的工作,都需要大約三週的時間才能真正投入生產。 你會說,“嗯,壓力到底是怎麼回事?”

如果一項任務需要在星期五之前完成,並且最終在下一個星期五完成,那麼業務幾乎不會因為你失敗而關閉。 當你還年輕,一無所知時,感覺就像,“哦,天哪,我們必須把它拿出來。” 但是當你這樣做了足夠多次之後,你會看到,“等一下,他們告訴我們的不是真的,”你可能會說,“好吧,是的。 任何。 完成後就會完成。”

去年 10 月,當 React 宣布這個叫做 React Hooks 的東西時,我有點筋疲力盡。 如果我當時在場,準備好接受任何新事物並帶著它奔跑,我本可以成為第一批進入 React Hooks 的人之一。 我正在密切關注下一件大事。

你在空閒時間做什麼來減輕壓力?

我散步並收聽與發展無關的播客。

有什麼可以推薦的嗎?

我聽過的唯一真正的技術播客是未定義的播客,它只是與技術和開發人員技巧無關。 我還收聽 React Podcast——我很快就會出現(希望有一定的意義,這取決於他們的編輯器的質量)。

看看我選擇的播客,陰天,我最優先考慮的播客包括:

  • 羅德里克上線
  • 有道理
  • 意外技術播客
  • 修路
  • 指數
  • 你好互聯網
  • 放射實驗室
  • 全部回复

最近,我實際上自己開了兩個播客:

第一個叫做“尋求正義”,我,一個對刑事司法系統幾乎一無所知的中等聰明人,採訪了我的一個朋友,他​​整個職業生涯都在研究和努力改革它。 他直接與美國幾個州的州長合作,以減少監獄人口和釋放後的累犯。 這不是我真正感興趣的話題,但我的共同主持人每一集都讓我著迷。

第二個是純粹的愚蠢表演,叫做與丹尼斯和埃里克的歡樂時光,我和同一個朋友在晚上喝了幾杯酒,談論我們的生活,讓彼此開懷大笑。 Seek Justice 適合您通勤上班,Happy Hour 適合您輕鬆回家。

為了把它帶回開發者,我的播客努力幫助我解決了一個我在行業中找不到解決方案的問題:一個簡單的 MP3 播放器,帶有專輯封面,也可以用作 Twitter 卡。 所以我寫了 AudioCard。