Вы находитесь на старой версии проекта. Новая версия доступна по ссылке
Проект #2

Вычислитель отличий

Профессия Фронтенд-программист

Узнаете как создавать cli приложения, парсить и форматировать данные в json, yaml, ini. Научитесь проектировать архитектуру приложений. А также писать unit-тесты.

2-4
недели
Иконка профессии Фронтенд-программист

Цель

Второй проект является логическим развитием первого. Он захватывает большую часть синтаксических возможностей js и использует более сложную архитектуру. Затрагиваемые темы:

  • cli. В этом проекте вы научитесь создавать cli приложения так, как это делается в настоящей жизни, с использованием специальных библиотек, занимающихся парсингом входных параметров, валидацией и генерацией помощи.
  • Форматы данных: json, yaml, ini. Кроме понимания самих форматов, вы так же научитесь транслировать данные из js в эти форматы и обратно.
  • Алгоритмическая подготовка. Вас ждет обработка и трансформация деревьев. Немного кода, кипятящего мозг, никогда не помешает.
  • Архитектурные принципы: Фасад, Адаптер. Вы познакомитесь и на практике реализуете одни из самых распространенных подходов при организации кода.
  • Полиморфизм
  • Функциональное программирование

Красной нитью сквозь этот проект будет проходить unit-тестирование, а в идеале — разработка через тесты.

Описание

В рамках данного проекта необходимо реализовать утилиту для поиска отличий в конфигурационных файлах.

Возможности утилиты:

  • Поддержка разных форматов
  • Генерация отчета в виде plain text, pretty и json

Пример использования:

$ gendiff --format plain first-config.ini second-config.ini
Setting "common.setting2" deleted.
Setting "common.setting4" added with value "blah blah".
Setting "group1.baz" changed from "bas" to "bars".
Section "group2" deleted.

Впечатления

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

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

Второй проект помог на практике закрепить пройденные темы, понять, что тесты – это не так страшно, как кажется, увидеть прекрасное в функциях высшего порядка и рекурсии и в очередной раз попотеть, настраивая окружение)

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

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

Ура, второй проект завершен и принят ментором! В этом заслуга моего замечательного наставника Павла Дроненко, который всегда либо поддерживал, либо подталкивал в нужном направлении в моменты отчаяния и безнадёги, а также терпел моё бесконечное нытьё, качественно разжёвывал сложный материал и оперативно давал фидбек по всем вопросам. Сам проект оставил противоречивые эмоции. Суммарно я потратил на него несколько дней чистого времени, но они растянулись на весь декабрь из-за первых шагов - очень тяжело зашли задания по кодклаймету и гитхаб actions, хотелось всё бросить и забыть как страшный сон. Я не понимал, что к чему, что вообще от меня требуется, но переосилил себя и справился. А вот основная часть была интересной и зашла на ура, получил настоящий кайф от проделанной работы. Половина пути позади! Теперь прохожу следующую часть курса и морально готовлюсь к третьему проекту :)

Тоже закончила проект и спешу поделиться впечатлениями :)

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

Спасибо огромное Сергею Мелодину! Он выдавал массу полезных замечаний, терпеливо подсказывал и комментировал неочевидные мне моменты (и не по одному разу >_<) и мотивировал очень много думать в первую очередь не над тем, что я делаю, а над тем, как.

Так же благодаря практике и работе с ментором становятся понятны свои слабые стороны - есть над чем поразмыслить :)

Сколько стоят проекты?

Проекты входят в стоимость обучения в любом формате: самостоятельном, групповом и индивидуальном. Дополнительно платить не нужно.

Зачем проходить проекты?

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

Проекты — портфолио программиста. Их код останется в вашем аккаунте на GitHub и будет преимуществом при поиске работы.

Чтобы узнать о том, что такое проекты и в чём их польза, прочитайте нашу статью «Анатомия проектов Хекслета».

Что делать, если возникли трудности во время выполнения проекта?

Задавайте вопросы в разделе «Обсуждение» на странице шага, на котором возникли трудности, или вашему наставнику. Изучите вопросы других студентов в «Обсуждениях»: там собрана большая база знаний, ей можно и нужно пользоваться. Попросите о помощи в нашем Slack-чате в канале #hexlet-projects.

Кто проверяет проекты?

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

У меня другой вопрос

Нажмите на виджет в правом нижнем углу экрана и поищите ответ в нашей справке. Или сразу пишите на support@hexlet.io — вам ответит живой человек из команды Хекслета.