来自 Redux 表单库创建者的全栈开发者技巧
已发表: 2022-03-112019 年 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。
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 “状态”都是诸如loading
和listOfObjects
类的东西,而我最近一直在使用 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。