Вычислитель отличий
Узнаете, как создавать cli приложения, парсить и форматировать данные в json, yaml. Научитесь проектировать архитектуру приложений. А также писать unit-тесты.
Цель
Вычислитель отличий – проект, который по-настоящему прокачивает даже опытных разработчиков. Здесь вам придется столкнуться с принятием сложных архитектурных решений, автоматизированным тестированием и непрерывной интеграцией, функциональным программированием, работе с древовидными структурами данных и рекурсивными алгоритмами.
Структуры данных и Алгоритмы
Выбор правильных структур данных в коде – один из ключей к удачной архитектуре и простому коду. От этого зависит удобство анализа и обработки, количество и сложность условных конструкций.
Главный вопрос в проекте – как описать внутреннее представление различий между файлами так, чтобы оно было максимально удобно. И хотя для этого существует множество разных способов, лишь некоторые из них приводят к простому коду.
Работа с деревьями и древовидной рекурсией очень хорошо прокачивает алгоритмическое мышление. Это важно, так как реальная разработка сопряжена с постоянной обработкой данных, различными преобразованиями и выводом коллекций.
Архитектура
В ходе разработки понадобится выполнять множество операций: чтение файлов, парсинг входящих данных, построение дерева различий, формирование необходимого вывода. Все это требует хорошей организации кода. Модульность и абстракции выходят в этом проекте на новый уровень.
Помимо внутренней архитектуры, в этом проекте появляется необходимость работать с параметрами командной строки. Происходит углубление понимания работы операционных систем в целом и командных интерпретаторов в частности. Для организации этой части кода используется популярная библиотека commander.js, архитектура которой позволяет легко строить консольные утилиты.
Тестирование и Отладка
Автоматизированные тесты – неотъемлемая часть профессиональной разработки. Вычислитель отличий — идеальный проект для прокачки навыка тестирования. Он достаточно простой и удобный для написания тестов, и достаточно сложный для того, чтобы прочувствовать важность этих тестов во время рефакторинга и отладки. В отличие от практики Хекслета, здесь предстоит писать тесты самостоятельно. Причем это можно делать до кода, практикуя TDD.
Для написания тестов используется фреймворк Jest
Описание
Вычислитель отличий – программа, определяющая разницу между двумя структурами данных. Это популярная задача, для решения которой существует множество онлайн сервисов, например http://www.jsondiff.com/. Подобный механизм используется при выводе тестов или при автоматическом отслеживании изменений в конфигурационных файлах.
Возможности утилиты:
- Поддержка разных входных форматов: yaml, json
- Генерация отчета в виде plain text, stylish и json
Пример использования:
# формат plain
gendiff --format plain path/to/file.yml another/path/file.json
Property 'common.follow' was added with value: false
Property 'group1.baz' was updated. From 'bas' to 'bars'
Property 'group2' was removed
# формат stylish
gendiff filepath1.json filepath2.json
{
+ follow: false
setting1: Value 1
- setting2: 200
- setting3: true
+ setting3: {
key: value
}
+ setting4: blah blah
+ setting5: {
key5: value5
}
}
Наставники




Впечатления

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

Хочу присоединиться к позитивным отзывам и сказать спасибо команде Хекслета за такой интересный и эффективный формат обучения, как проекты.
Второй проект помог на практике закрепить пройденные темы, понять, что тесты – это не так страшно, как кажется, увидеть прекрасное в функциях высшего порядка и рекурсии и в очередной раз попотеть, настраивая окружение)
Отдельно огромное спасибо ментору Сергею Мелодину за поддержку, стремление помочь и подробнейшее разъяснение непонятных тем. С его помощью раскрылись и некоторые пробелы в моих знаниях. Точно знаю, что теперь буду учиться более вдумчиво и стремиться досконально разбираться в сложных темах.

Только что завершил проект и захотел оставить отзыв. В сравнении с первым проектом этот дался существенно труднее, зато узнал много нового и да, обучение через рефакторинг реально работает, ребят)
Благодарен сообществу Слака, они помогли преодолеть затыки, возникавшие в ходе прохождения шагов проекта.
Огромное спасибо ментору Сергею Мелодину, очень приятно удивило его внимательное и неравнодушное отношение и бесконечное терпение в сочетании со стремлением объяснить простым языком сложные вещи, которые заходили в голову с трудом, особенно вечером после работы)
Проект реально помогает отложить в голове такие не совсем интуитивно понятные штуки, как рекурсивный обход деревьев, функции высшего порядка, ну и тесты для тех, кто раньше с ними никогда не имел дела.

Наконец завершен второй проект! Сказать что было трудно - ничего не сказать. Но я многое вынесла из этого проекта. Спасибо Хекслет за качественное обучение. Отдельная благодарность Станиславу Дзисяк. Его ответы,и в проектах, и в обсуждениях, всегда на высоте в плане информативности, и доведении до сути той или иной проблемы. Спасибо!

Ура, второй проект завершен и принят ментором! В этом заслуга моего замечательного наставника Павла Дроненко, который всегда либо поддерживал, либо подталкивал в нужном направлении в моменты отчаяния и безнадёги, а также терпел моё бесконечное нытьё, качественно разжёвывал сложный материал и оперативно давал фидбек по всем вопросам. Сам проект оставил противоречивые эмоции. Суммарно я потратил на него несколько дней чистого времени, но они растянулись на весь декабрь из-за первых шагов - очень тяжело зашли задания по кодклаймету и гитхаб actions, хотелось всё бросить и забыть как страшный сон. Я не понимал, что к чему, что вообще от меня требуется, но переосилил себя и справился. А вот основная часть была интересной и зашла на ура, получил настоящий кайф от проделанной работы. Половина пути позади! Теперь прохожу следующую часть курса и морально готовлюсь к третьему проекту :)
Проекты входят в стоимость обучения на любом плане: самостоятельном, групповом и индивидуальном. Дополнительно платить не нужно.
Проекты дают опыт разработки в реальной среде. Проходите каждый проект сразу после изучения курсов, которые стоят в учебном плане перед ним, — это отличный способ глубже разобраться в материале.
Проекты — портфолио программиста. Их код останется в вашем аккаунте на GitHub и будет преимуществом при поиске работы.
Чтобы узнать о том, что такое проекты и в чём их польза, прочитайте нашу статью «Анатомия проектов Хекслета».
Задавайте вопросы в разделе «Обсуждение» на странице шага, на котором возникли трудности, или вашему наставнику. Изучите вопросы других студентов в «Обсуждениях»: там собрана большая база знаний, ей можно и нужно пользоваться.
Автоматизированные тесты и линтер. В групповом и индивидуальном форматах наставник дополнительно проверит то, что тестами проверить невозможно (архитектуру проекта, правильность именования, удачность решений), и проведёт код-ревью, чтобы сделать проект ещё качественнее.
Нажмите на виджет в правом нижнем углу экрана и поищите ответ в нашей справке. Или сразу пишите на support@hexlet.io — вам ответит живой человек из команды Хекслета.