Проект модуля #2

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

Java-разработчик

В этом проекте отрабатывается работа с коллекциями и структурами данных. Изучаются способы построения и обхода деревьев. Вы познакомитесь с разными форматами данных (json, yml), научитесь их парсить и формировать. Начнете писать тесты (JUnit) и освоите разработку через них. Познакомитесь с непрерывной интеграцией (CI) и элементами экстремального программирования (XP). Прокачаете ООП мышление.

2-4
недели

Цель

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

Структуры данных и Алгоритмы

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

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

Работа с структурами данных хорошо прокачивает алгоритмическое мышление. Это важно, так как реальная обработка сопряжена с постоянной обработкой данных, различными преобразованиями и выводом коллекций.

Архитектура

Для построения дифа между двумя структурами нужно проделать множество операций: чтение файлов, парсинг входящих данных, построение дерева различий, формирование необходимого вывода. Все это требует хорошей организации кода. Модульность и абстракции выходят в этом проекте на новый уровень.

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

Тестирование и Отладка

Автоматизированные тесты – неотъемлемая часть профессиональной разработки. Вычислитель отличий – идеальный проект для прокачки навыка тестирования. Он достаточно простой и удобный для написания тестов и достаточно сложный для того, чтобы прочувствовать важность этих тестов во время рефакторинга и отладки. В отличие от практики Хекслета, здесь предстоит писать тесты самостоятельно. Причем это можно делать до кода, практикуя TDD.

Для написания тестов используется фреймворк JUnit

Описание

Вычислитель отличий – программа, определяющая разницу между двумя структурами данных. Это популярная задача, для решения которой существует множество онлайн-сервисов, например: http://www.jsondiff.com/. Подобный механизм используется при выводе тестов или при автоматическом отслеживании изменении в конфигурационных файлах.

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

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

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

# формат plain
./app --format plain path/to/file.yml another/path/file.json

Property 'follow' was added with value: false
Property 'baz' was updated. From 'bas' to 'bars'
Property 'group2' was removed

# формат stylish
./app filepath1.json filepath2.json

{
  + follow: false
  + numbers: [1, 2, 3]
    setting1: Value 1
  - setting2: 200
  - setting3: true
  + setting3: {key=value}
  + setting4: blah blah
}

Наставники

Аватар наставника Андрей Серов
Андрей Серов
Работает в IT сфере три года. Начинал свой путь с ручного тестирования. Но уже через месяц начал автоматизировать некоторые части регресса, используя язык Python. Затем перешел на другой проект, где основным стеком была Java, и Андрей с радостью перешел на нее. Сейчас пишет микросервисы на Java/Kotlin, используя фреймворк Spring.
Аватар наставника Антон Ефимов
Антон Ефимов
Более 9 лет опыта в разработке, в основном на Java. В последнее время также активно использует Golang. Работал как в больших энтерпрайз-компаниях, так и в небольших стартапах. Последние 4 года работает в Германии, в основном в финтех компаниях. Например Deutsche Boerse (немецкая биржа). В последнее время активно изучает DevOps, архитектуру приложений и сервисов.
Аватар наставника Мария Теплинская
Мария Теплинская
Java-разработчик с опытом 8 лет. Обучалась в МГУ им. Ломоносова по специальности «Прикладная математика и информатика». В компании NetCracker участвовала в более чем 10 различных проектах — успела попробовать различные архитектуры и технологии. В компании RedSys работала как инженер внедрения и запускала в production уже готовый программный продукт. В компании CBS Interactive разрабатывала более локальный проект в сфере трейдинга — Enterprise приложение, написанное с учетом всех современных технологий и подходов.
Аватар наставника Наталья Пономарева
Наталья Пономарева
Выпускница СПбгу по направлению «Математическое обеспечение и администрирование информационных систем». Училась в Computer Science Center, проходила курсы ШАДа. Работала Java/Kotlin разработчиком в крупнейшем банке в мире — Deutsche Bank.
Сколько стоят проекты?

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

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

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

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

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

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

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

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

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

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

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