Прошёл несколько курсов на Hexlet опишу свои впечатления. Завершив курс по Redux, я понял, что надо куда-то двигаться дальше, провёл ревизию своих знаний и в результате получилась ментальная карта то чего я не знаю, но хотел бы освоить.
Была проблема выбора, всё ценное и важное, и необходимо вчера, но прочитал пост Петра «Frontend. На пол пути к первому проекту» и понял, что курс «JS: Функциональное программирование» это моё.
Про функциональное программирование я что-то где-то слышал, при чём что-то страшное, что-то где-то щупал, но вот твёрдо сказать, что я знаю и уверенно его могу применять сказать не мог.
Но курс оказался подготовительный, каждая статья разжевана и в самих упражнениях приведён алгоритм решения. Бери и реализуй, справиться даже дрессированная шимпанзе.
Согласен темы вроде рекурсии, возврат функций из функций и каррирование вызвали некую заминку, но только заминку. Рекурсия была рассмотрена простая, а не как любят на собеседованиях, хитрые рекурсия на 2-3 самовызова функций, которые возвращают другие функции и переменные берут из замыкания и надо найти ошибку. Я думаю рассмотрения алгоритма быстрой сортировки усилила бы тему рекурсии. Там 2 рекурсивных вызова одно и той же функции, но число тех, кто сдал последующее упражнение сильно бы упало.
Я всё думал, почему студенты так не любят функциональное программирование, испытание «Числа Черча» показало почему. Итак, числами Черча называются натуральные числа, реализованные посредством анонимных функций. Числа 0, 1, 2, 3 – это всё рекурсивные функции.
Zero = s => z => z
One = s => z => s (z)
Two = s => z => s (s (z))
Three = s => z => s (s (s (z)))
Всё есть функция. Забудьте про условия, циклы – это для слабаков, только функция и рекурсия :-) Сложение, умножение, деление, вычитание – это функция.
Succ = n = > (s => z => n (s) (s (z)))
Add = n => m => m (Succ) (n)
Mul = n => m => m (Add (n)) (Zero)
На числах Чёрча я понял, что функционального программирования должно быть в меру. :-) Я осознал, что функциональное программирование не так страшно, как о нём рассказывают, более страшное функциональное проектирование. Но эта тема в этом курсе не рассматривалась совсем, так как мало бы кто из новичков выжил :-)
И ещё я все упражнения делаю в phpStorm, обычно написал код, объединил через gulp и всё приложение готово, но в уроках появилась директива import. И я понял gulp мне больше не друг, с импортами он работает от слова «никак», надо переходить на webpack. С webpack у меня отношения какие-то напряженные, я создаю свою сборку по какому-нибудь уроку из ютуба, но стоит добавить что-то своего и всё умирает в муках. Но в этот раз я действовал хитрее набил в Гугле «webpack generator» и вуаля первая же ссылка https://createapp.dev/ даёт генератор конфига веб-пака, то чего там нет devServer, HtmlWebpackPlugin легко нашлось в официальной документации https://webpack.js.org/concepts/ Вот так я перестал бояться и полюбил webpack :-)
Следующий курс «JS: Настройка окружения» тоже курс подготовительный, для шимпанзе, ещё не знающих дрессировки. :-) По прохождении курса я теперь могу опубликовать свою библиотеку на npmjs, узнал про npx и обобщил свои текущие знания.
Сейчас прохожу курс «JS: Архитектура фронтенда». А вот это серьезный курс. Большинство курсов по архитектуре почему-то сводятся к MVC, иногда добавляют микросервисы и всё, а вот как правильно запроектировать приложение на чистом JS, про это нигде нет. А про автоматное программирование тоже какая-то всеобщая амнезия среди программистов. Спасибо за этот курс автору Кириллу.
Запомнилось одно упражнение «Процессы и автоматы, их описывающие». Я реализовал формочку через конечный автомат, у меня на компьютере все тесты проходят, а на виртуальной машине Hexlet часть тестов нет, я переделал по-другому, опять не проходят. Плюнул посмотрел решение Кирилла с потерей баллов, вставил его решение в виртуальную машину и его решение тесты тоже не прошло :-) Я нажал кнопку «Сброс» и все тесты прошлись. Вот такой программный глюк стоил мне 2 дня потраченной жизни.
Нет пропасти без дна, хоть высоко, но есть у гор вершины, мой путь программиста продолжается.
Оригинальная публикация.