Почему у меня возникли трудности с изучением React?

Почему у меня возникли трудности с изучением React?

От автора: за шесть месяцев изучения и работы с React я пытался понять, почему я чувствовал себя с ним некомфортно. (Слово некомфортно кажется слишком амбициозным. Возможно, некомпетентным? Недоскональным? Что-то вроде этого.).

Для меня, я думаю, это сводится к четырем вещам:

Все технологии

Написание JS по-другому

Глубокая иерархия

Эволюционирующие подходы

Все технологии

Работа в Abstract означала изучение технического стека. Конечно, каждая компания отличается. Продукт Abstract использует React для своего настольного приложения на базе Electron и веб-приложения. Также используется Redux. Есть Flow для статической проверки типов. Также есть все другие библиотеки, которые импортируются и используются по ходу.

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

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

Впрочем, если все остальное добавлять одновременно, все становится запутанным, потому что сначала трудно понять, что к чему относится. «О, это Redux. Это React. А это совсем другая вещь. Понятно».

Написание JS по-другому

Я пишу JavaScript начиная с уровня DOM 0. Я начинал писать все как функции. Затем появился Prototype, и у меня появился новый подход к написанию JavaScript. Через год после Prototype вышел jQuery, и я снова начал изучать новые концепции.

Появились библиотеки на основе компонентов, такие как Dojo и YUI, но я не чувствовал необходимости кардинально изменить способ написания JavaScript. Интерфейс JavaScript, в частности ECMAScript, почти десятилетие не менялся.
А потом вышли ES5 и ES6.

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

Точно так же использование статической проверки типов означало, что мне нужно изучить новый синтаксис JavaScript и часть синтаксиса Flow.

Глубокая иерархия

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

В некоторой степени я думаю, что в этом виноват Redux, так как каждому объекту требуется глобальное состояние, заключенное в компонент Connect. Таким образом, проверка дерева React часто вдвое длиннее, чем кажется.

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

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

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

В Abstract мы начали дифференцировать типизацию Flow, чтобы сделать это более понятным. Это подводит меня к последней причине.

Эволюционирующие подходы

То, как мы решаем проблему, меняется со временем. Присоединившись к Abstract, я вступил в трехлетний проект, который развивался за это время. То, что начиналось как продукт для настольных компьютеров, развивалось для поддержки настольных компьютеров и Веб. React изменился за это время. Redux изменился за это время. Flow изменился за это время. Каждый разработчик в команде развивался.

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

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

Инерция

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

Таким образом, мне потребовалось шесть месяцев, чтобы набрать обороты и почувствовать себя полезным и продуктивным.
Трудно было подумать, что я старший разработчик, и вместо этого я чувствовал себя младшим. Я часто тратил больше времени, чем должен был, просто пытаясь понять вещи, расстраиваясь в процессе. Я тратил день, два или три, прежде чем обратиться к кому-то, чтобы он объяснил что-то, чего я не понимал, но чувствовал, что должен.

Я испытывал большое давление. Я много раз думал об уходе.

Мне нужно было переосмыслить, почему я в Abstract, и приходил к тому, что снова учился, как новичок. Таким образом, я медленно набирал обороты. Каждая неделя была лучше предыдущей.

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

Автор: Jonathan Snook

Источник: https://snook.ca

Редакция: Команда webformyself.