Всем привет! Хочу рассказать о своем опыте прохождения проектов. Сразу оговорюсь, что узнав о таком интересном нововведение, бросил свой почти законченный путь по стеку PHP и окунулся в мир nodejs. Сделал я это только по одной причине: проекты - это самое важное, что даёт этот образовательный ресурс. Можно долго решать какие-то задачки, проходить курсы, без этого никуда, но основной толчок в собственном понимании того, к чему всё это идёт, дают именно проекты. Признаюсь честно, после прохождения курсов по PHP, курсы по nodejs казались гораздо более продуманными, более ориентированными на новичка. Проходил их достаточно быстро (никогда не делал больше 1-2 шагов в день, иначе решение дается очень легко, но в голове ничего не остается), кроме нескольких довольно сложных моментов, на уроки по которым запросто могло уйти несколько дней, а то и неделя.
Первый проект
Первый проект застал меня в сложном положении: в тот момент в первый раз за несколько лет находился в родном городе, пришлось пожертвовать встречами и общением на пользу дела, основную часть писал (и переписывал) почти на границе с Монголией в деревне, пользуясь тормозным интернетом с мобильного телефона. В самом проекте сразу стало ясно, что любой инструмент, с которым требовалось ознакомиться заранее, вызывал огромные трудности и ощущение, что я им никогда не овладею на практике. В дальнейшем оказалось, что это касается всего, с чем сталкивался позже в проектах. Но любые сложности носят временный характер и потыкав, поэкспериментировав всё встает на правильный путь. В целом первый проект был самым революционным для меня, хотя подробное описание шагов, команд сгладило трудности, я даже не сильно обратил на них внимание, но некоторые из них, как трэвис, к примеру, очень осложнили жизнь на следующем проекте. Как итог разобрался с настройкой среды, научился заливать и изменять свой репозиторий на гитхаб, а также публиковать собственный npm пакет. К этому можно добавить использование утилиты Make, Babel, ознакомление с формированием правильной архитектуры проекта и ещё по мелочам.
Второй проект
Второй проект не получилось пройти с первого захода, наверное я один из немногих, кто с этим столкнулся. Здесь вылезло всё то, что возможно стоило внимательнее изучить в первом проекте: travis, babel. Потерял на этом драгоценное время, потому что не думая копировал куски из первого проекта, пытаясь бездумно привязать их ко второму. Плюс с этого момента вся разработка обязана была идти через тестирование, которое далось не сразу... А вместе с самой сложной, на мой взгляд, логикой самого проекта с абстрактно-синтаксическими деревьями, это выросло в итоговый провал. Конечно, вторая попытка оказалась успешной. Все это навело на очень важный вывод: здесь всё очень строго, никто никаких поблажек давать не собирается и готовиться нужно заранее, четко зная весь материал курсов и овладев инструментами предыдущих проектов. После этого я даже переносил старт следующих проектов, чтобы быть готовым и не поплыть в пучине теории и документации вместо обдумывания и написания кода. Касаемо навыков полученных от проекта: в первую очередь, конечно, акцент на TDD, авторы большую роль уделяли именно этому аспекту, необходимость написать тест, а только потом самого кода и его отладка с пониманием того, что и где ты делаешь не так каждый раз запуская тесты; затем алгоритмы, деревья, что занимало немало времени, в добавление к этому было необходимо использовать стороннюю библиотеку lodash, от которой ждал функции, которая вжуххх и сделает всё, что мне нужно) конечно, это было уж слишком наивное заблуждение; в завершение несколько внутренних библиотек nodejs, собственно создание cli утилиты с помощью соответствующего фрэймворка и использование в разработке некоторых шаблонов проектирования.
Третий проект
К третьему проекту я подошёл намного ответственнее и начал его только разобравшись в курсах по асинхронности. Это заняло много времени, но результат того стоил и работа с промисами шла не без проблем, но проще, чем с профильными курсами. Сложность подстерегала на этапе тестирования, где я по началу вообще отошел от tdd и тупо проверял, скачалось ли что-то. Это было против правил и тесты в итоге я сформировал, но уже скорее по результату сделанной работы... Сам проект я делал с большим желанием, было интересно, как мой итоговый код обрабатывает любые страницы из сети, выхватывает оттуда что-то необходимое и складывает в нужную мне папку! Было очень полезно ознакомиться с debug, до этого я просто ставил console.log, чтобы как-то распознать, где и как что-то делаю не так, здесь же с помощью нужных параметров мог отследить на каком этапе что происходит в логах; работа с http запросами; обработка ошибок на разных этапах с дружелюбным к пользователю предупреждением о соответствующих неточностях; тесты с применением мокинга, имитации реальных запросов. Этот проект был пожалуй самым спокойным в плане работы.
Четвертый проект
Четвертый проект был самым интересным, очень волнительно зайти по сгенерированному на хироку адресу и увидеть результат своей работы! Сама по себе визуальная составляющая хоть и была мной реализована на достаточно простом уровне, но всё же интересно было поработать с Bootstrap и версткой. Сам проект включал себя кучу новых инструментов. Несмотря на то, что перед самим проектом я пару недель изучал все будущие фрэймворки, пакеты, библиотеки старт вызвал много сложностей. Во-первых был соблазн использовать образец, на который советовали ориентироваться, но мне хотелось самостоятельно разобраться и попробовать независимо от него всё реализовать, это пошло на пользу, но растянулось во времени и всё равно пришлось многое перекинуть с образца. Во-вторых сложность самих новых инструментов. В-третьих базы данных, связи, ORM с какой-то непонятно структурированной документацией, это было непросто испортило немало нервных клеток. Жаль, что курс по базам данных идёт сейчас немного ограниченным по сравнению с проектом. В-четвертых сам Bootstrap. Не знаю почему, может только мне было непонятно, но даже подключить его было целым делом. Это не пакет, который устанавливаешь в зависимости, используешь через импорт и вперед. Его использование в комплексе с webpack, тоже новым для меня инструментом оказалась большой головоломкой. Увидев папку mixins в образце, меня охватил ужас, я закрыл её и сделал по-своему, но в комментариях учитель подсказал, к какому печальному итогу это может привести в случае будущих изменений. После всех этих мучений и переделок почти что с нуля, появилась какая-то легкость и понимание, что писать и в дальнейшем редактировать код становится действительно проще! Основным ядром проекта был конечно Koa, после очень доступного курса по Express работа с ним не несла никаких страданий, async/await создавало ощущение, что асинхронности ка-то даже и нет. В тесты тоже многое взял из курса по express. По итогу последний проект безусловно можно назвать самым важным, в нем все вырисовалось в единую картину с пониманием различных этапов моментов и акцентов всех курсов.