Проект - крут! Было сложно. Иногда очень сложно. Порой был ступор на 3-4 дня, когда не знал как подступиться к задаче. При этом принципиально было найти решение самостоятельно, не подсматривая аналогичные решения где либо еще. (Однажды я подсмотрел решение учителя в одной из практик, и потом очень долго себя корил за это). В противном случае, это сильно бы подкосило уверенность в своих силах - значит я "не смог". В реальной работе, наверно, так делать не стоит - нужно будет советоваться и искать помощи со стороны, чтобы не срывать сроки. Второй проект по срокам я итак очень сильно затянул, даже с учетом поправки на новогодние праздники.Наверно, я могу это назвать своей "маленькой победой". Уж чего я точно не ожидал - так это, что проект сдам со второй попытки. Когда сдавал в первый раз, думал, что придется переделывать почти всю логику построения диффа. Мне казалось, что она не очень качественно сделана. И я был удивлен, что основная часть замечаний была не про самой логике формирования диффа, а различные "шероховатости" в типа функций в виде констант, опечаток а-ля "tAmplate", строках в услових etc. Многие из этих вещей остались без должного внимания, потому что весь фокус был на вот этих всех рекурсиях и "ифах".Когда отправлял проект на повторную проверку уже была некоторая надежда, на "вдруг прокатит" ))
Проект дал многое. Когда то в ВУЗе мы немного учили С. С тех пор некоторые базовые вещи из программирования типа переменных, циклов и рекурсии в памяти отложились достаточно хорошо. Булева алгебра и теория множеств немножко тоже. На теоретические вопросы, вероятно, я сейчас не смог бы ответить хорошо. Но понимание, чем отличается пересечение множеств от разницы множеств есть. Это то, что помогло в этом проекте. Но есть штуки, которые для меня новы и которые еще не отложилсь в голове как само разумеющиеся вещи. Например то, что функции можно возвращать из функций так же, как переменные, массивы и т.д. Я не знаю, можно ли так было в С. Для меня всегда существовали данные отдельно, функции отдельно. В некоторых случаях это прямо "вау"-эффект на меня производило. "А так можно было?" :) С этим нужно еще свыкнуться, чтобы это новое знание вытеснило старое.
Второй момент (на самом деле - первый по важности!) - это ТЕСТЫ! Это реально круто. Да, вначале нужно потратить некоторое время на их написание. Частенько нужно было фикстуры "подшлифовать" (там пробел лишний, там запятую забыл). Добиться сначала, чтобы тесты падали с AssertionError. Зато потом!! Рефакторинг при тестах становится ну просто сильно проще! Это реально открытие для меня.
И третий пункт (как следствие второго) - нужно помнить про "corner cases". Совершенно случайно перед сдачей проекта я решил запустить программу на своих собственных тестовых данных и тесты попадали. В JSON встречался 0 в значениях , который трактовался программой как False. Тогда же я выявил и проблему с null и булевыми значениями в JSON. Пришлось переписывать и дописывать код.
Ну и последнее - этот проект очень близок к тому пет-проекту, который я держу в голове в котором также нужно будет отбирать данные из различных форматов (прайсы в XML, CSV, GoogleSheets) в единый файл и отслеживать изменение исходных данных с заданой периодичностью. В этом ключе второй проект Хекслета прямо вот точно доктор прописал!
И да, это было круто! Спасибо.