Полноценные советы разработчикам от создателя библиотеки форм Redux

Опубликовано: 2022-03-11

В феврале 2019 года команда сообщества Toptal запустила совершенно новую инициативу: ежемесячная возможность взаимодействовать с сетевыми экспертами Toptal в режиме реального времени. Сессии Ask Me Anything (AMA) открыты для всех членов основной команды Toptal и сети талантов — любой может задать вопрос. В этой статье мы собрали избранные вопросы и ответы из AMA с экспертом по JavaScript и Redux Эриком Расмуссеном. Эрик обсуждает проблемы разработки программного обеспечения с открытым исходным кодом, советы разработчикам и изменчивый мир JavaScript, как он справляется с синдромом самозванца и выгоранием как востребованный разработчик, а также свои лучшие рекомендации по подкастам.

Эрик — эксперт полного цикла JavaScript с более чем 25-летним опытом разработки, специализирующийся на React, Redux, формах в React и GraphQL. На GitHub — веб-хостинге для управления версиями с более чем 28 миллионами пользователей — он получил место в топ-100 с более чем 20 000 звезд. Он также является автором первой и третьей по популярности библиотек форм в React: Redux-Form и React-Final-Form.

Эксперт Toptal JavaScript и Redux Эрик Расмуссен

Redux Form и состояние программного обеспечения с открытым исходным кодом

Почему вы решили создать еще одну библиотеку форм после огромного успеха 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 их поддерживает.

Практически на любом веб-сайте, на который вы заходите, вы можете заглянуть в исходный код и увидеть некоторый код, написанный одним конкретным человеком, который не получает должного вознаграждения. Необходимо повышать осведомленность, чтобы люди больше ценили то, что такое открытый исходный код, и часы, которые некоторые из нас тратят на это.

Зачем создавать что-то бесплатное и с открытым исходным кодом? Каковы стимулы для таких разработчиков, как вы?

Причина, по которой вы его создаете, заключается в том, что он нужен вам для того, над чем вы работаете в данный момент. Когда вы отпускаете его, приходят другие и делают его лучше. Мечта об открытом исходном коде — это когда вы говорите: «Я построил маленькую тачку, которая помогает мне возить свои камни отсюда туда», а затем кто-то приходит и делает ее лучше. В своем следующем проекте вы возвращаетесь назад, используете ту же библиотеку и думаете: «Вау, эта штука работает намного быстрее. Сейчас лучше».

Это также очень полезно. Я получаю выброс дофамина, когда люди говорят: «Это задержало нас на три недели, а это небольшое исправление, на которое у вас ушло три часа, сэкономило нам три недели времени». В этом есть что-то вроде цикла зависимости, когда вы получаете положительное подкрепление и чувствуете себя хорошо.

С моей второй библиотекой форм люди не столько говорили: «Эй, нам нужна еще одна библиотека форм», просто я подумал о том, как сделать ее лучше.

Это своего рода мечта о том, почему вы это делаете. Но это точно не за деньги.

В идеальном мире, какую компенсацию вы бы получили за создание программного обеспечения с открытым исходным кодом? Просто вишенка на торте?

Я был бы не против, если бы кто-то заплатил мне шестизначную сумму за то, чтобы я целыми днями просто работал над открытым исходным кодом. Если вы посмотрите на созданную ценность по сравнению с затратами, соотношение для открытого исходного кода очень велико. Вы переходите к маленьким крошечным библиотекам, которые делают одну вещь, и одну вещь очень, очень хорошо.

Если бы каждой компании в мире пришлось выделить для этого собственную команду разработчиков, результаты были бы очень разными. Тот факт, что у нас есть открытый исходный код и у нас может быть одно решение — один алгоритм наверху, который является лучшим, — означает, что эта эффективность заложена в каждом человеке в мире.

Еще одна ценность открытого исходного кода заключается в том, что если вы используете что-то, что вы написали, и только ваша компания использует это. . . сравните это с тем, что используют 1000 компаний. Они нашли каждый маленький уголок и щель места для жуков, которые потенциально могут быть проблемой, и вы берете это и подключаете к своей штуке — вы золотой. У вас будет гораздо больше уверенности в этом.

Динамичный мир JavaScript

Будучи так долго в пространстве JavaScript, вы, должно быть, видели так много новых популярных фреймворков [для создания приложений JavaScript], которые приходят и уходят. Как вы держите руку на пульсе отрасли, чтобы решить, какие фреймворки выбрать?

Вы должны почувствовать ветры сообщества разработчиков. Текущая битва между TypeScript и Flow — отличный пример. Сначала я выбрал не ту лошадь в этой гонке, полагая, что Facebook будет лучшим управляющим структурой набора текста. Но я думаю, что TS в значительной степени выиграл эту битву, и теперь я медленно перемещаю вещи в этом направлении.

В Твиттере есть уголок, который называется «Твиттер разработчиков». Если вы подписаны на достаточное количество людей — может быть, вам нужна выборка в сотню или около того, — вы сможете понять, куда дуют ветры и что становится популярным. Вы получите много сообщений типа: «Раньше я использовал библиотеку А, но недавно узнал о библиотеке Б, и все стало намного проще». Вы получаете их достаточно, и вы думаете: «Ну, может быть, мне стоит проверить эту другую библиотеку».

Тенденции приходят и уходят в пространстве JavaScript. Всегда ли он будет в движении?

Я думаю (и надеюсь), что он будет продолжать развиваться. Стагнация — это смерть в технологиях. Даже в Java сейчас происходят значительные инновации: вещи, которые вы можете делать в Java 10, совсем не похожи на Java 6 вашей бабушки.

Может быть утомительно наконец создать свое приложение с помощью Tech X только для того, чтобы увидеть, что все крутые ребята теперь используют Tech Y. Но это отрасль, в которой мы работаем.

По вашему мнению, какие концепции JavaScript особенно важны для понимания, чтобы овладеть языком?

Я бы сказал, что функциональное программирование и идея передачи функций очень важны. Особенно, если вы работаете с таким языком, как Java или C++.

Как вы думаете, следует ли использовать React для создания SPA [одностраничных приложений] или только для компонентов на обычной странице?

В этом прелесть React: он настолько универсален. Я медленно вводил React для всех новых функций в старом приложении Java/jQuery на своей основной работе. React отлично работает, учитывая узел DOM, на который нужно воздействовать. Ему не нужно контролировать все приложение.

Запуская новое приложение 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 , а затем открывает Rubyst путь для написания структурированных React/Flux приложений на Pure Ruby (без написания JS)?

Я думаю, что тот факт, что JavaScript переместился на сервер, имеет большое значение. Возможность рендеринга с одним и тем же кодом как на клиенте, так и на сервере — это очень важно , и, скорее всего, это будущее.

Что, по вашему мнению, является самой большой проблемой наших самых популярных JS-фреймворков?

Я не совсем уверен, но мне очень нравится направление css-in-js, serverless и SSR, которое такие компании, как Zeit, используют с Next.js.

Мне, как человеку, который создавал веб-сайты в конце 90-х, действительно смешно, что мы возвращаемся к статическим веб-сайтам. Мы вернемся к генерации всего во время сборки, и тогда у вас будет статический материал на сервере, а затем вы сможете добавить динамический материал с помощью того, что они называют повторным увлажнением. После того, как вы отрендерите всю страницу, вы можете получить дополнительный JavaScript, чтобы на самом деле анимировать вещи и перемещать компоненты.

Zeit с их фреймворком Now также поддерживает статическое построение на вашем веб-сайте, потому что нет ничего быстрее, чем загрузка статического HTML-файла. Это просто текстовый файл, а потом бум, вы его получили. Принимая во внимание, что если вы обращаетесь к серверу, он должен обратиться к базе данных, может быть, четыре или сто раз только для того, чтобы создать страницу, которую вам нужно отобразить. Это очень медленно.

Статическая идея набирает популярность.

Считаете ли вы, что JavaScript может конкурировать со «зрелыми» языками (такими как Java и C++) и стать предпочтительным языком для предприятий?

Определенно. То, что люди делают сейчас с «бессерверным» узлом, чрезвычайно масштабируемо, и я думаю, что корпоративные API [интерфейсы прикладного программирования] могут и будут переписаны на JavaScript, по крайней мере, более гибкими и дальновидными корпорациями.

Что разработчик должен искать в клиенте?

Вы хотите, чтобы вам давали определенный уровень доверия и автономии, при условии, что вы достаточно старше, чтобы заслужить это. Я бы не хотел браться за работу, где кто-то все время заглядывает мне через плечо. Много времени, связанного с разработкой, у вас может быть что-то, на исправление которого уходит пять минут, но вы тратите четыре часа, работая над какой-то маленькой проблемой в сборке, из-за которой вы не можете ее протестировать. Очень часто я трачу восемь или десять часов на решение проблемы — где я действительно работаю, действительно сосредоточен все время — и фактическое решение похоже на две строки кода. Вам нужен работодатель с таким уровнем понимания вашей работы.

О синдроме самозванца, выгорании и снятии стресса

Синдром самозванца, кажется, нередкое явление среди разработчиков. Испытываете ли вы это, и если да, то как вы с этим справляетесь?

Абсолютно. Особенно при выступлении на конференции. (Или делать АМА?)

Когда дело доходит до обучения/наставничества, вам нужно понимать, что вы знаете больше о том, чем занимаетесь, чем в прошлом месяце. Следовательно, всегда есть люди, которые остались там, где вы были раньше, и могут извлечь пользу из ваших знаний.

Также важно иметь возможность сказать: «Я не знаю, давайте разберемся вместе» (тоже хороший совет для родителей).

Эрик Расмуссен выступает на недавней конференции

Как проходит день в твоей жизни? Как вы планируете все так, чтобы не работать по 100 часов в неделю и не выгорать?

Когда я действительно глубоко погружаюсь в открытый исходный код, это занимает гораздо больше моего времени; иногда мне приходится откладывать на месяц или около того за раз. Я отвожу детей в школу, а потом смотрю, какие у людей проблемы. Если они действительно серьезны, я прилагаю некоторые усилия, чтобы исправить их или отреагировать полезным способом.

У меня есть дневная работа, никак не связанная с открытым исходным кодом, которая отнимает у меня много времени. В течение дня у меня настроены уведомления, чтобы я мог видеть, есть ли серьезная проблема с чем-либо. Если была выпущена новая функция или что-то в этом роде, то в это время, скорее всего, будут ошибки.

Я узнал, что тот, кто пишет требования к проекту, уверен: «Это нужно было сделать еще вчера, так почему же это еще не сделано?» У меня было так много случаев, когда любой команде, получающей мою работу, требовалось около трех недель, чтобы запустить ее в производство. И ты такой: «Ну, а из-за чего был весь этот стресс?»

Если задачу нужно выполнить к пятнице, а она заканчивается к следующей пятнице, почти никогда бизнес не закрывается из-за того, что вы потерпели неудачу. Когда вы молоды и ничего не знаете, это похоже на: «Боже мой, мы должны вынести это за дверь». Но после того, как вы проделаете это достаточное количество раз и увидите: «Подождите минутку, то, что они говорили нам, на самом деле неправда», вы можете сказать: «Хорошо, да. Что бы ни. Это будет сделано, когда это будет сделано».

В октябре прошлого года я немного перегорел, когда React анонсировал штуку под названием React Hooks. Если бы я был там, готовый взяться за любую новую вещь и работать с ней, я мог бы получить много миль, став одним из первых людей, которые попали в React Hooks. Я как бы присматриваю за тем, что может стать следующей большой вещью.

Что вы делаете в свободное время, чтобы уменьшить стресс?

Я гуляю и слушаю подкасты, которые не посвящены развитию.

Можете ли вы порекомендовать?

Единственные настоящие технические подкасты, которые я слушаю, — это The Undefined Podcast, в котором лишь косвенно рассказывается о технических советах и ​​советах разработчиков. Я также слушаю React Podcast, в котором я скоро появлюсь (надеюсь, это будет иметь какой-то смысл, в зависимости от качества их редактора).

Глядя на мой любимый подкаст, Overcast, мои приоритетные подкасты включают в себя:

  • Родерик на линии
  • Придать смысла
  • Случайный технический подкаст
  • Дорожные работы
  • Экспонента
  • Привет Интернет
  • Радиолаб
  • Ответить всем

Недавно я сам запустил два подкаста:

Первый называется «В поисках справедливости», в котором я, человек со средним уровнем интеллекта, почти ничего не знающий о системе уголовного правосудия, беру интервью у моего друга, который всю свою карьеру изучал ее и работал над ее реформированием. Он работает напрямую с губернаторами нескольких штатов США над сокращением числа заключенных и числа рецидивистов после освобождения. Это не та тема, которая меня когда-либо по-настоящему интересовала, но мой соведущий очаровывает меня в каждом эпизоде.

Второй — шоу полнейшей чепухи под названием «Счастливый час с Деннисом и Эриком», в котором мы с тем же другом выпиваем несколько вечерних напитков, рассказываем о своей жизни и смеемся друг над другом. «Искать справедливость» — для вашей яркой поездки на работу, а «Счастливый час» — для расслабляющей поездки домой.

Чтобы вернуть его разработчикам, мои усилия по подкастам помогли мне решить проблему, для которой я не мог найти решение в отрасли: простой MP3-плеер с обложкой альбома, который также работал как карточка Twitter. Поэтому я написал AudioCard.