React испортил веб-разработку

Автор оригинала: Ivan Lučin
  • Перевод
В начале июня я посетил конференцию разработчиков .debug, на которой у моей компании был свой стенд. Смысл стенда заключался в том, чтобы создать ситуацию «Измени моё мнение»: мы представляли какую-нибудь радикальную идею, предлагали людям обсудить её с нами, а потом показывали им, что интересного мы делаем.

Мы решили взять такую идею:


Моим первым оппонентом стал этот молодой парень справа, создающий приложения на нативном React.

Если серьёзно, то React — это хорошая библиотека. Она важна для веб-разработки, потому что в ней используются декларативные и реактивные шаблоны, а такой сдвиг парадигмы в момент её создания был нужен всем. В те времена (6-7 лет назад) возникали проблемы с движками рендеринга и реактивностью, но React довольно неплохо их решил.

Стоит заметить, что ту же проблему ранее решал Ember. Однако он был не особо производительным и слишком категоричным, чтобы соревноваться с React.

useEffect(makeMess)

Однако после того, как React набрал популярность, начался хаос. Он зародил в сообществе новый тренд, когда всё вращается вокруг хайпа, новизны и создания новых сдвигов парадигм. Каждые несколько месяцев появлялись новые библиотеки, создавались новые стандарты того, как следует писать веб-приложения React, однако они решали проблемы, которые по большей части уже были решены.

Возьмём для примера «управление состояниями» (state management). Так как в React отсутствует традиционная система внедрения зависимостей (DI реализуется через композицию компонентов), сообщество вынуждено решать эту проблему самостоятельно. И оно решило. И решало снова, и снова, и снова. Каждый новый год приносил новые наборы стандартов.


Девиз управления состояниями в React — «новый год, новый стандарт!»

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

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

Также возникла тенденция «одержимости сравнением фреймворков». JS-фреймворки постоянно сравниваются по таким свойствам, как скорость рендеринга и используемая память. Чаще всего всё это неважно, ведь приложение становится медленным не из-за медленного JS-фреймворка, а из-за плохого кода.


Очередь на обсуждение становится всё длиннее...

И как случается с любой тенденцией, которая захватывает мир, всё зашло слишком далеко, и это начало наносить ущерб новым поколениям веб-разработчиков. Как вообще возможно такое, что знание библиотеки стало самым важным навыком в резюме среднестатистического веб-разработчика? Хуже того, это даже не библиотека, а модуль внутри библиотеки. Хуки React чаще упоминаются как «навык», чем настоящие навыки, например, рефакторинг или анализ кода.

Серьёзно? Когда мы перестали хвастаться тем, что важно?

Почему, например, ты не говоришь мне, что ты знаешь:

Как писать простой и читаемый код


… не упоминая библиотеку из Github с наибольшим количеством звёзд, а показав мне пару своих лучших примеров кода.

Как управлять состоянием


… без упоминания популярной библиотеки управления состояниями (предпочтительно заканчивающейся буквой «X»), а объяснив мне, почему «данные должны двигаться вниз, а действия — вверх». Или почему состояние должно изменяться там, где оно было создано, а не глубже в иерархии компонентов.

Как тестировать свой код


… не рассказывая мне, что ты знаешь Jest или QUnit, а объяснив, почему сложно автоматизировать сквозные тесты и почему минимальные значимые тесты рендеринга требуют 10% усилий и дают 90% выгоды.

Как релизить свой код


… не упоминая, что ты используешь CI/CD (как любой другой проект сегодня, над которым работает больше одного человека), а объяснив, что развёртывание и релиз должны быть разделены, чтобы можно было писать новый код, не вмешивающийся в старый код, и чтобы его можно было отключать удалённо.

Как писать код, который удобно анализировать


… не говоря, что ты «командный игрок», а рассказав мне, что анализ кода так же сложен для ревьюера, и что ты знаешь, как оптимизировать свои пул-реквесты, чтобы они были читаемыми и понятными.

Как создавать надёжные стандарты проектов


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

Как анализировать чужой код


… потому что анализ кода обеспечивает качество продукта, снижает количество багов и объём технического долга, создаёт общую базу знаний команды, но только если он реализован правильно. Анализ кода не должен проводиться только сверху вниз. Это отличный механизм обучения для неопытных участников команды.

Как разобраться в любом JS-фреймворке


… потому что дело не в звёздах GitHub, а в общих принципах, разделяемых большинством современных JS-фреймворков. Определение сильных и слабых сторон других фреймворков позволяет лучше понимать выбранный тобой фреймворк.

Как создавать MVP


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

Как оптимизировать: не очень рано, не очень поздно


… потому что чаще всего в оптимизации нет необходимости.

Как заниматься парным программированием


… потому что парное программирование, как и анализ кода — это одна из самых важных практик для обмена знаниями и создания целостной команды. А ещё это весело!

Как заниматься непрерывным рефакторингом


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

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

Попробуйте убедить меня, что React не так уж плох, и я полностью с вами соглашусь!

Но вместо этого давайте обсуждать более важные темы — ту работу, которую мы на самом деле выполняем в качестве проектировщиков ПО.



На правах рекламы


Наша компания предлагает облачные vds серверы для любых задач и проектов, будь то серьёзные вычисления или просто размещение блога на Wordpress. Создавайте собственный тарифный план в пару кликов и за минуту получайте готовый сервер, максимальная конфигурация бьёт рекорды — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe!

Подписывайтесь на наш чат в Telegram.

VDSina.ru
Серверы в Москве и Амстердаме

Комментарии 32

    +16

     создающий приложения на нативном React

    React Native - название технологии, я не думаю что корректно было так вот переводить.

      +11
      Как писать простой и читаемый код
      … не упоминая библиотеку из Github с наибольшим количеством звёзд, а показав мне пару своих лучших примеров кода.

      Если кто-то отвечает на вопрос о том, как писать простой и читаемый код через "прост возьмите готовое" — он профнепригоден, только и всего.


      Как управлять состоянием
      … без упоминания популярной библиотеки управления состояниями (предпочтительно заканчивающейся буквой «X»), а объяснив мне, почему «данные должны двигаться вниз, а действия — вверх». Или почему состояние должно изменяться там, где оно было создано, а не глубже в иерархии компонентов.

      Если и объяснения будут даны, они не отвечают на вопрос "как управлять состоянием". Они отвечают на вопрос "что такое вообще это ваше состояние". А вопрос "как" — как раз и затронет эту вашу популярную библиотеку на Х, потому что напрямую касается вопросов о масштабировании проекта, о легкости внесения изменений, и об этом всём.
      А на уровне "данные должны двигаться вниз, а события вверх" — можно управлять хоть голым реактом, хоть самопиской, хоть еще как. Когда это всё зароется в проблемах масштаба — вот тогда и придёт понимание, что тут кое-что еще нужно.


      Как тестировать свой код
      <...> почему минимальные значимые тесты рендеринга требуют 10% усилий и дают 90% выгоды.

      А они дают? Ни разу не видел в живой природе "минимальных тестов рендеринга", которые легчайше делаются и дают огромный профит. Наоборот, любому не набрасывающему на вентилятор, должно быть понятно, что тесты рендеринга — это всегда крайне непростая штука, ибо по своей природе это интеграционные тесты вашего кода с black box многочисленных браузеров.
      А если это какие-либо "приближения", как тот же Jest, который проводит "тесты рендеринга" через генережку DOM — они дают не просто 90% выгоды, а ровно 0%. Т.к. тестируют сферическую хрень в вакууме.


      Как релизить свой код

      См. "как управлять состоянием". На практике этого тупо недостаточно.


      Как писать код, который удобно анализировать

      Никак. Можно еще долго ломать копья вокруг этого, но практика от теории не отличается только в теории. На практике — есть такие изменения в коде, которые нельзя "удобно анализировать", и которые невозможно свести к "удобным для анализа" за хоть сколько-нибудь вменяемое количество времени.
      А за пределами этого замечания — это то же самое, что и "писать понятный код".


      Короче, набросы какие-то, из преимущественно спорных моментов и попытке что-то придумать просто потому, что надо бы придумать. Здравые моменты есть, но нездравых сильно больше. И ах да, а при чем тут реакт? А вот причем:


      Мы вели потрясающие беседы с несколькими опытными React-разработчиками. Никто из них не согласился с названием этой статьи, они говорили, что «испортил» — слишком сильное слово.

      "Просто нам хотелось погромче набросить" (с).

        +2

        Про тесты на Jest + RTL не соглашусь. Это рекомендуемый способ компонентного тестирования, и при правильном применении - он даёт отличные результаты. Тестировать комбинации разных параметров интеграционно - путь к очень долгим и нестабильным тест-пакам. Change my mind :)

          +5

          Его рекомендуемость не делает его лучше.
          Любой тест, про который заранее известно, что он упадёт при изменении кода (верстки, в данном случае) — бессмысленен. Любой тест, который не фиксирует разумные ожидания — бессмысленен. Когда упал тест, ожидающий где-то <div>, в то время как после правок там <button> — всё, что тут прибавилось, так это необходимость пойти и привести падающий тест в соответствие с версткой. И нафига он тогда?


          Ну и если у вас столько комбинаций пропсов, что это уже неохватываемо — самое время рефакторить компоненты и уже таки наконец как-то управлять состоянием.


          PS: Юнит-тесты на логику работы кода — они да, полезны. Но это не про рендеринг, естественно.

            0
            где-то <div/>, в то время как после правок там <button/>

            Ну так react testing labriry есть возможность искать не по элементу а по тексту в элементе


            getByText


            а то что верстка съехала да тестируем скриншот тестами

              0
              Ну так react testing labriry есть возможность искать не по элементу а по тексту в элементе

              Не поможет, когда текста у вас нет.


              а то что верстка съехала да тестируем скриншот тестами

              Изменился код — упали тесты. Не изменился код — не упали тесты. Зачем оно? У вас много случаев, когда вы считали, что ничего не должно поменяться, а оно менялось? Если много — тут повод много думать об архитектуре приложения, а не тесты дальше фигачить.

                0
                Не поможет, когда текста у вас нет.

                Всмысле нет а тогда что вы показываете пользователю и что там проверяете ?


                Изменился код — упали тесты. Не изменился код — не упали тесты. Зачем оно?

                Помогает при малейшем рефакторинге (при быстром деливвиринге фитч всегда падает планка хорошего кода оптимизации и т.д.)


                У вас много случаев, когда вы считали, что ничего не должно поменяться, а оно менялось?

                ни кто не убирает человеческий фактор что кто то может что то не заметил


                или вы предпалагает е что все 100% пишут всегда лаконичный код который лишнего не цепляет и ничего не забывает сделать (а как же тип программирование через тестирование когда в начале пишут тест а потом пишут интерфейс, функцию коотрая этот тест проходит)


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

                везде есть есть тонкости но говориьт что тесты писать не нужно это перебор

                  0
                  Всмысле нет а тогда что вы показываете пользователю и что там проверяете ?

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


                  Помогает при малейшем рефакторинге (при быстром деливвиринге фитч всегда падает планка хорошего кода оптимизации и т.д.)

                  Ничего не понял. Ну вот вы поменяли что-то. Тесты упали. Вы пересоздали снапшоты и счастливо пошагали дальше. Что конкретно тут "помогает" и чему оно помогает?


                  ни кто не убирает человеческий фактор что кто то может что то не заметил

                  Для этого существует code review.
                  И да, вполне возможны ситуации, когда из чтения пулл реквестов — не особо понятно, что конкретно изменится, а что нет. Корень всех таковых ситуаций — говнокод и говноархитектура. Пытаться решать этот вопрос тестами — порождает только еще больше проблем.


                  везде есть есть тонкости но говориьт что тесты писать не нужно это перебор

                  Я где-то говорил "тесты писать не нужно"? Ссылочку дадите?

                    0
                    Вам рассказать, сколько всего можно сделать и показать в вебе без единой строчки текста, или вы таки воображение сами включите?

                    токсично, но я ориентировался на ваш пример где использовался button и div


                    Ничего не понял. Ну вот вы поменяли что-то. Тесты упали. Вы пересоздали снапшоты и счастливо пошагали дальше. Что конкретно тут "помогает" и чему оно помогает?

                    Упал тест — заскипал, пошел, дальше. Я вас верно услышал ?


                    говнокод и говноархитектура

                    "Для этого существует code review" — это ведь то же бы могло решить это проблему но видимо не решает


                    Я где-то говорил "тесты писать не нужно"? Ссылочку дадите?
                    "Любой тест, про который заранее известно, что он упадёт при изменении кода" — все тесты пишутся чтобы изминением кода не затронуть лишние части приложения. Или я вас не так понял? и вы не имели ввиду "любой" тест
                      0
                      Упал тест — заскипал, пошел, дальше. Я вас верно услышал ?

                      Я могу пояснить подробнее, если вам что-то непонятно. Вот у вас есть скрин/снапшот, и тест, проверяющий, что какой-то код выдаёт то самое. Вот вы меняете этот код. Тест очевидно валится. Какие у вас есть другие варианты действий, кроме как "обновить скрин/снапшоп"? Может быть, упавший тест вам как-то покажет, что вы поменяли код не так, как надо было? Нет, не покажет.


                      "Для этого существует code review" — это ведь то же бы могло решить это проблему но видимо не решает

                      Значит такой code review ¯\_(ツ)_/¯


                      все тесты пишутся чтобы изминением кода не затронуть лишние части приложения. Или я вас не так понял? и вы не имели ввиду "любой" тест

                      Я имел в виду "любой, про который заранее известно, что он упадёт". Собственно именно потому я именно так и написал, ага. Про снапшот- и скриншот-тесты заведомо известно, что они упадут при любом изменении кода компонента. Ergo, они не нужны.
                      Против тестов, про которые нельзя заведомо сказать "они упадут при любом изменении кода" — я ничего не имею.

                        0
                        Про снапшот- и скриншот-тесты заведомо известно, что они упадут при любом изменении кода компонента.

                        Придумываем ситуацию где на гавнокодили сделал долгие операции в компоненте, но написали все тесты, затем рефакторинг (да даже переход с js\flow\ts на js\flow\ts) и после тестов понятно изминился результат после рефакторинга или нет

                          0
                          Придумываем ситуацию где на гавнокодили сделал долгие операции в компоненте, но написали все тесты, затем рефакторинг (да даже переход с js\flow\ts на js\flow\ts) и после тестов понятно изминился результат после рефакторинга или нет

                          И как часто вам нужен рефакторинг вида "переход с js/flow/ts на js/flow/ts"? Раз в недельку-то хотя бы переходите?


                          Вот тут мы плавно подходим к единственной очень особой ситуации, когда такие тесты и вправду могут быть полезны: когда вам нужно "взять и всё переписать, но чтоб результат был такой же". Но это во-первых очень особая ситуация, и держать эти тесты ради неё — нет никакого смысла. Надо — создали, порефакторили, проверили, выкинули.
                          А во-вторых, и даже тут оно не во всех случаях работает. Поменяли при рефакторинге структуру компонентов? Ну всё, ваши скрин/снапшоты бесполезны. Вам не нужен pixel-perfect и в ходе рефакторинга кое-какие вещи подвинулись? Скриншоты бесполезны. Вы переверстали кое-какие внутренности с сохранением того же внешнего вида? Снапшопы бесполезны.


                          Короче, даже не то, что не серебрянная пуля, а вообще очень специфичная штука, которая помогает только в очень ограниченных рамках применимости. А в других случаях — просто отжирает время зря.

          0

          Cypress внедрили первые тесты очень быстро, сразу дало хороший профит

            0

            Здорово, я тоже надеюсь его в будущем припахать. Слышал много хорошего, да и плюс это честный e2e.

              0

              Что вы понимаете под "честным e2e"?

              У Cypress есть проблемы с симуляцией пользовательских действий: https://github.com/cypress-io/cypress/issues/311

                0
                Что вы понимаете под "честным e2e"?

                То, что запускается в браузере и эмулирует работу со стороны пользователя.


                У Cypress есть проблемы с симуляцией пользовательских действий: https://github.com/cypress-io/cypress/issues/311

                Было б странно, если б не было. Я вам больше скажу — проблемы даже и у селениума есть, мне тестировщики таких интересных историй нарассказывали.

                  –1

                  Довольно странно катить бочку на JSDOM то что они "тестируют сферическую хрень в вакууме", и предлагать Cypress на замену. И там, и там пользовательские события эмулируются через прямое вмешательство в DOM и element.dispatchEvent(). Отличие Cypress в том, что там есть CSS, только и всего. Вероятность кликнуть на кнопку, которая реальному пользователю будет недоступна, в Cypress остается, в силу фундаментальных ограничений его архитектуры.

                  Селениум (равно как и puppeteer/playwright) использует другие механизмы для эмуляции событий, поэтому находится на шкале достоверности намного ближе к реальным действиям пользователя.

                    0
                    Довольно странно катить бочку на JSDOM то что они "тестируют сферическую хрень в вакууме", и предлагать Cypress на замену.

                    Один — сферическая хрень в вакууме, второй — сферическая хрень в браузере.
                    Разница, я считаю — огромная, пусть и "оба хуже" в сравнении с селениумом и прочими industry standards. Тестировать абстрактную логику DOM (то, что является потолком для JSDOM) — на редкость бессмысленное занятие, что тестируем-то? Код на соответствие спеке DOM? Проблемы будут не там.


                    Селениум — это отлично, но на этапе разработки это развёртывать — слишком муторно, а хотелось бы именно на этом этапе малой кровью иметь некоторые базовые тесты "всё ли ок в браузере", не доводя до QA.

                      0

                      что тестируем-то? Код на соответствие спеке DOM? Проблемы будут не там.

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

                      Для UI компонентов конечно же нужны другие виды тестов, но это отдельный проект, и не каждый разработчик изобретает свою версию ant.design

                      Селениум — это отлично, но на этапе разработки это развёртывать — слишком муторно

                      Что муторного в npm install chromedriver? Видимо, пора уже написать отдельную статью "разрушаем миф сложного selenium", потому что ну очень часто вижу заблуждение "не хотим selenium потому что сложнааа"

                        0
                        Тестируем Javascript часть компонента.

                        Откуда там что-то, что достойно тестирования, но при этом не связано с тонкостями работы DOM в тех или иных браузерах? Мы в 2021 всё еще пишем на голом реакте, где кроме компонент ничего нет, или как?


                        Для UI компонентов конечно же нужны другой вид тестов

                        А не-UI компоненты не нужны вообще. Или вы про компоненты, показывающие другие компоненты? У них у всех должна быть настолько тривиальная вёрстка, что тестами покрывать её просто не требуется.


                        Что муторного в npm install chromedriver?

                        А не в хром-браузерах как?
                        На мой опыт, основной (>90% кейсов) проблемной точкой, когда с бизнес-логикой всё хорошо, а e2e или ручное тестирование валится — является как раз браузерная специфика.

                  0
                  ни одна синтетика не даст реального результата, но если она претендует на высокий процент точности — уже хорошо
                    0

                    Если переводить в гипотетические "проценты достоверности", то там где у Selenium будет 90%, Cypress с трудом дотянет до 30%. Можете убедиться сами, посмотрев в трекер Cypress. Там навалом репортов от разработчиков, что они не могут воспроизвести действия реального пользователя (раз и два).

            +10

            И отдельно по поводу картинки-наброса про стейт менеджмент: если до 2016 года она абсолютно бесспорна (разные подходы, разные концепции), то далее — сплошная профанация:
            2018 — Contexts: контексты были подачкой тем, кто по каким-то причинам в 2018 году всё так же сидел в глубинах props hell, пользуясь одним только реактом. Контексты всё так же отвратительно масштабировались, как и передача пропсов — но чуть получше. Тем, у кого было всего лишь по 5 оберток над компонентами — вполне могло помочь, тем, у кого было по 50 — неа. Те, кто сидел на редаксе или мобх — в сторону контекстов даже и не взглянули, т.к. для них это было шагом в сторону и 10 шагами назад.
            2018 — Hooks: говорить про хуки как про стейт-менеджмент — это только сову рвать. Это переделка реакта в целом, и не самая плохая переделка, кстати. Но да, стейт-менеджмент на кастомных хуках оказалось сделать на удивление легко, и поэтому…
            2019 — Zustand: один из чуваков просто взял и выложил эти кастомные хуки на гитхаб. Ага, прям новая технология.
            2020 — Recoil: мобх, только не мобх. Наверное, у авторов аллергия на букву Х. От еще одной очередной либы для реактивного программирования наверное всё изменится (нет).

              0

              Эти все игры в песочнице прекрасны, у меня более важный вопрос. Кто из двоих на первой фотке косплеит Краудера?

                0
                Однако после того, как React набрал популярность, начался хаос. Он зародил в сообществе новый тренд, когда всё вращается вокруг хайпа, новизны и создания новых сдвигов парадигм.

                Это вообще характерно для JS среды, и фронтенда в частности. React был далеко не первый.
                  +3

                  Автор драматизирует, когда говорит, что во фронтенд каждый год меняется парадигма. С того момента, как веб перешёл на SPA, ничего кардиально не менялось, менялись только best practices, и то довольно медленно.

                  А то, что сообщество активно и постоянно придумывает новые варианты решения одних и тех же проблем, пытается сдвинуть парадигму (зачастую безуспешно) — по-моему, очень даже хорошо.

                    +3
                    Читая подобные статьи, задаюсь вопросом: авторы, правда, считают, что если писать как невежественный чудак вкупе с желтушностью фактов, то аудитория подумает, что ты крутой девелопер?
                    Статья шлак. Просто эксплуатация ключевых слов по теме реакт.
                      +3
                      Картинка со стейт-менеджерами вводит в заблуждение. Ни zustand ни recoil никогда не были популярны в React-сообществе и уж тем более никто не считал это стандартом. На продакшене вы эти технологии не встретите.
                        +1
                        Как писать код, который удобно анализировать
                        … не говоря, что ты «командный игрок», а рассказав мне, что анализ кода так же сложен для ревьюера, и что ты знаешь, как оптимизировать свои пул-реквесты, чтобы они были читаемыми и понятными.


                        Читая вот это какой-нибудь джун запомнит это и будут писать mySuperNewAwesomeFunctionThatMakesSomeCoolStuff и будет ставить читабельность кода превыше его эффективности. Тут вопрос о компромиссе чтения кода и его работы. И вопрос, можно ли написать такой код, который будет эффективен, при этом ревьювер потратит 3 минуты на чтение его и сразу поймет?

                        Как разобраться в любом JS-фреймворке
                        … потому что дело не в звёздах GitHub, а в общих принципах, разделяемых большинством современных JS-фреймворков. Определение сильных и слабых сторон других фреймворков позволяет лучше понимать выбранный тобой фреймворк.


                        Звёзды на гите лишь небольшое указание, что если комьюнити одобряет, то на это можно посмотреть и потрать время на ресёрч и только тогда можно будет сказать что-либо о фреймворке. И я говорю сейчас исключительно в разрере какой-либо существующей бизнес задачи.

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


                        «почему?» не объясняет «как?». Вот та самая библиотека Х как правило на первой странице своей документации отвечает на некоторые «почему?» и «как?».

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


                        Рефактор ради рефактора — хождение по кругу. Это не дает, конечно, право писать плохой код и все выходящие, в т.ч. опыт написания кода, но как правило техдолг остается техдолгом навсегда, потому что бизнесу вообще плевать на эффективность твоих алгоритмов до тех пор, пока он из-за этого не теряет деньги. Конечно, можно программировать «для души», но лично такой подход в моей жизни еще не прокормил (это дабы пресечь сразу этот вариант), а задачам бизнеса, снова, плевать на твою душу.

                        Я к чему вообще веду. Может, не реакт испортил разработку, а сами разработчики? Гикбрейнсы, Хекслеты, Яндекс.Практикумы, выпускающие непонятного кого, которые, наслушавшись обещаний о классной работе и печеньках в офисах, на собесе требуют 100к+ зарплаты?
                          0
                          Я к чему вообще веду. Может, не реакт испортил разработку, а сами разработчики? Гикбрейнсы, Хекслеты, Яндекс.Практикумы, выпускающие непонятного кого, которые, наслушавшись обещаний о классной работе и печеньках в офисах, на собесе требуют 100к+ зарплаты?

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

                            0
                            Да такой сценарий понятен, но, почему-то знание фреймворка Х превращает разраба в диснеевсого героя, у которого доллары в глазах крутятся
                            И затем компании тратят время на выбивание дури и подтягивание основ, но большинство не выдерживают и уходят работать на галеру, куда их с руками и ногами отрывают, попутно демпингуя в 0.

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

                            Достаточно холиварный вопрос, но на лицо:
                            1) типичная проблема образования — переполнение низкокачественными кадрами и шутка про «забудь, чему тебя учили» вообще не смешная становится, потому что это реальность.
                            2) чистый бизнес — получаем прибыль в моменте. Да, базу вроде бы дали, показали то и се, а как усвоили ученики уже не их проблема.
                            3) когда соискатель выходит на рынок, у него уже в теории ламборгини в гараже стоит через пару лет, а по факту у него глаза на лоб лезут, видя, что происходит за кулисами компаний. И Эльдорадо в виде программирования в целом оказывается даже не прикольно — оказывается, тут лутают бабки не за просто знание доки и что такое html и css, да и борода не признак хипстерства

                            Понять можно всех, но за одним вопросом стоит череда других и это явно не проблема библиотек. Скорее, их использования и то, спорно достаточно
                          0

                          Автор статьи жалуется на динамику, но не экстраполирует её. Читатель может прийти к выводу, что тенденция сохранится, и ситуация станет с годами ещё запутаннее. Это не обязательно так.

                          Мне на ум приходят 90-е и то, что последовало потом. Вот стоит советский спальный район, в нём один гастроном, а там продавщица из серии «вас много — я одна». Годами ничего не меняется.

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

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

                          Можно наблюдать за этим процессом в моменте и решить, что так будет всегда.

                          Но вот проходит 20-30 лет, и мы больше не в «диких джунглях». Среди сотен открытых магазинов выжили буквально 3-4 сети. Они чутка отличаются по параметрам, но в совокупности занимают практически всё пространство рынка. Выбрать магазин по душе и достатку теперь довольно легко. Сами правила торговли тоже более или менее неизменны, хотя в первые годы законы переписывали по несколько раз в год. Теперь, если что-то и меняется, то редко и вряд ли на 180°.

                          На мой взгляд после выхода React 18 мы увидим успокоение экосистемы — примерно то же, что россияне наблюдали в продуктовом ритейле в поздние 2000-е. Если я неправ, поправьте меня пожалуйста в комментарии году так в 2025-м ​:–)

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое