До 30 ноября

Скидки до 81 000 руб и вторая профессия в подарок!

Главная | Все статьи | Дневник студента

✓ Вычислитель отличий (JS): пройдено

Время чтения статьи ~3 минуты
Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции

Второй проект завершён! Я уж боялась, что этого никогда не случится.

Это было очень непросто. На проект у меня ушло больше месяца! Не представляю, как раньше его сдавали за неделю. Начала я его 12 июня, сдала на первую проверку 28 июня, и спустя целых 7 проверок 16 июля проект наконец-то приняли.

На первом шагу нужно было разобраться с библиотекой Commander. Сначала это показалось непонятным, но оказалось совсем несложным. На втором шагу возникли сложности с обработкой путей и настройкой jest. Всегда сторонилась тестов, но распробовав их, поняла, что зря. jest --watch — классная штука. Буквально недавно удалось применить полученные навыки на работе, когда нужно было допилить существующую функцию. Без тестов бы пришлось смотреть консоль браузера и ждать загрузки DOM, а с ними — всего лишь обычную консоль с нужными вариантами проверок, что вполне ускорило разработку. В перерывах между проверками я начала проходить курс по тестированию на JS, что пришлось весьма кстати.

Самым сложным оказался 5 шаг. Работа с вложенными структурами. Пришлось изрядно поломать голову, чтобы построить сначала промежуточное представление, а потом само представление отличий со всеми нужными отступами. Изначально было абсолютно непонятно, какую структуру нужно выбрать — объект, массив, вложенный массив или плоский? Нужно ли сразу вставлять отступы в ключи или нет? Нужны ли тут регулярки или нет? И почему-то в первую очередь тянуло реализовывать именно сложные варианты. А секрет в том, что нужно стараться делать всё, как можно проще. Самым сложным оказалось обходиться без случайной сложности. Наверное, это приходит с опытом.

Я читала комментарии и ответы ментора на них на странице проекта, и всю дорогу меня не покидало ощущение, что я пишу что-то не то, и нужно будет всё переписывать заново. Так и вышло. Изучив на последнем шаге все приложенные материалы, пересмотрев «Ментальное программирование II», я заново переписала код, добавив диспетчеризацию по типу вместо switch/case, превратив промежуточное представление в массив нод вместо вложенного объекта и упорядочив все тесты. Как мне казалось, подготовилась довольно тщательно, надеялась, сдать проект за минимум проверок. Но не тут-то было.

И опять. После первой проверки оказалось много излишнего кода. Усложненная диспетчеризация. Ненужные обёртки над функциями. Захордкоженные пути для тестов. Ментор присылал правки порциями, видимо, чтобы не заставлять переделывать всё радикально, а изменять постепенно. На второй проверке всплыло дополнительное промежуточное представление, от которого нужно было избавиться. Теперь уже стала понимать, что быстро сдать не получится. Еще одна проверка. Оказалось, что дифф нужно не сразу в строку собирать, а сначала представить его в виде массива, а потом с помощью флаттена и джойна получить искомый результат. И опять, первым делом приходили в голову усложненные варианты. Несколько флаттенов, несколько джойнов, несколько генераций отступов, редьюс вместо мапа. Опять получалось громоздко. Пришлось снова несколько раз поломать голову, чтобы прийти к правильному решению.

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

Благодаря второму проекту, теперь я могу работать с деревьями не просто закрытыми глазами, а еще и делать это красиво. Удалось на практике почувствовать удобство работы с плоскими структурами вместо вложенных. Получила опыт в построении абстракций, в частности, AST, и проведении диспетчеризации по типу. Узнала, что правильно собирать строки как массивы вместо добавления миллионов переводов строки. И, конечно, тесты!

Проект удался.

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

В перерывах между проверками я начала проходить также профессию по Бекэнду на JS. Увлекло очень, обязательно после завершения проектов по фронту, приступлю к проектам на бэке.

Аватар пользователя Irina Nikolaidi
Irina Nikolaidi 18 июля 2019
11
Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 28 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 28 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 28 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 28 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 28 ноября
профессия
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 28 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 28 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 28 ноября