Второй проект завершён! Я уж боялась, что этого никогда не случится.
Это было очень непросто. На проект у меня ушло больше месяца! Не представляю, как раньше его сдавали за неделю. Начала я его 12 июня, сдала на первую проверку 28 июня, и спустя целых 7 проверок 16 июля проект наконец-то приняли.
На первом шагу нужно было разобраться с библиотекой Commander. Сначала это показалось непонятным, но оказалось совсем несложным. На втором шагу возникли сложности с обработкой путей и настройкой jest. Всегда сторонилась тестов, но распробовав их, поняла, что зря. jest --watch — классная штука. Буквально недавно удалось применить полученные навыки на работе, когда нужно было допилить существующую функцию. Без тестов бы пришлось смотреть консоль браузера и ждать загрузки DOM, а с ними — всего лишь обычную консоль с нужными вариантами проверок, что вполне ускорило разработку. В перерывах между проверками я начала проходить курс по тестированию на JS, что пришлось весьма кстати.
Самым сложным оказался 5 шаг. Работа с вложенными структурами. Пришлось изрядно поломать голову, чтобы построить сначала промежуточное представление, а потом само представление отличий со всеми нужными отступами. Изначально было абсолютно непонятно, какую структуру нужно выбрать — объект, массив, вложенный массив или плоский? Нужно ли сразу вставлять отступы в ключи или нет? Нужны ли тут регулярки или нет? И почему-то в первую очередь тянуло реализовывать именно сложные варианты. А секрет в том, что нужно стараться делать всё, как можно проще. Самым сложным оказалось обходиться без случайной сложности. Наверное, это приходит с опытом.
Я читала комментарии и ответы ментора на них на странице проекта, и всю дорогу меня не покидало ощущение, что я пишу что-то не то, и нужно будет всё переписывать заново. Так и вышло. Изучив на последнем шаге все приложенные материалы, пересмотрев «Ментальное программирование II», я заново переписала код, добавив диспетчеризацию по типу вместо switch/case, превратив промежуточное представление в массив нод вместо вложенного объекта и упорядочив все тесты. Как мне казалось, подготовилась довольно тщательно, надеялась, сдать проект за минимум проверок. Но не тут-то было.
И опять. После первой проверки оказалось много излишнего кода. Усложненная диспетчеризация. Ненужные обёртки над функциями. Захордкоженные пути для тестов. Ментор присылал правки порциями, видимо, чтобы не заставлять переделывать всё радикально, а изменять постепенно. На второй проверке всплыло дополнительное промежуточное представление, от которого нужно было избавиться. Теперь уже стала понимать, что быстро сдать не получится. Еще одна проверка. Оказалось, что дифф нужно не сразу в строку собирать, а сначала представить его в виде массива, а потом с помощью флаттена и джойна получить искомый результат. И опять, первым делом приходили в голову усложненные варианты. Несколько флаттенов, несколько джойнов, несколько генераций отступов, редьюс вместо мапа. Опять получалось громоздко. Пришлось снова несколько раз поломать голову, чтобы прийти к правильному решению.
Просматривая историю коммитов, очень сложно разобраться в предыдущих версиях кода. Очень много избыточности, всё очень неявно, запутанно, громоздко. Финальная версия выглядит гораздо чище, понятнее, красивее, с ней удобно работать, код говорит сам за себя.
Благодаря второму проекту, теперь я могу работать с деревьями не просто закрытыми глазами, а еще и делать это красиво. Удалось на практике почувствовать удобство работы с плоскими структурами вместо вложенных. Получила опыт в построении абстракций, в частности, AST, и проведении диспетчеризации по типу. Узнала, что правильно собирать строки как массивы вместо добавления миллионов переводов строки. И, конечно, тесты!
Проект удался.
Выражаю за это благодарность всей команде Хекслета и особенно Кириллу Мокевнину за наставничество, проверки и терпение. Очень здорово, что есть такая возможность — поучиться у столь умных, талантливых и опытных людей. Все, кто в раздумьях — советую не упускать такой драгоценный шанс и переходить к проектам как можно скорее, пока есть такая удобная возможность без ограничений во времени.
В перерывах между проверками я начала проходить также профессию по Бекэнду на JS. Увлекло очень, обязательно после завершения проектов по фронту, приступлю к проектам на бэке.