2016-11-13

Introduction to Functional Programming in OCaml

Закончил курс Introduction to Functional Programming in OCaml в Université Paris Diderot. По крайней мере хватило сил закончить в отличие от clojurecourse.by который я тупо дропнул на середине. Никакой бумажки не дали, как это было на Coursera. Сделал вывод, а скорее подтвердил то, что было на Машинном Обучении: отсутствие в непосредственной доступности ментора приводит к колоссальным затратам времени и усилий на решение элементарных проблем, для меня онлайн-обучение элементарно не работает. Когда, после после пары часов отчаяния и созерцания кода, находишь элементарную опечатку (в силу непривычного синтаксиса), необходимо обладать железобетонной мотивацией для продолжения.

По поводу самого OCaml. С этим можно жить, но я слабо представляю в задачах крупнее небольших утилит заточенных под конкретную задачу. По ощущениям развитие платформы остановилось где-то в 2000-х на уровне междусобойчика французов. Использовать OCaml в обозримой перспективе я не буду. Функциональные подходы абсолютно органично вошли задолго до этого курса, когда я впервые подключил guava. Строгая типизация (в понимании OCaml) чересчур строгая для моих задач. Объектная ориентированность прибита гвоздями видимо в дань моде.

Синтаксис не взрывает мозг как в clojure, хотя к отдельным вещам можно и придраться, но небольшой набор простых инструментов и набор из базовых типов списка и кортежа, на котором строятся всё богатство возможностей, – это они сделали правильно. Паттерн-матчинг и алгебраические типы данных – это реально очень круто, раньше не сталкивался, а вот тут прочувствовал как код становится очень выразительным. В groovy конструкция switch даже не смотря на то, что может матчить энумы, значения, типы просто рядом не стояла. При помощи наследования можно отдаленно сымитировать алгебраические типы и я примерно даже представляю как можно было бы сделать пародию на паттерн-матчинг через рефлекшен и лямбды, но все-равно не будет статических проверок и деструктуризация даже в груви примитивна на уровне раскидать плоский tuple по переменным.

Из плюсов, F# очень похож на OCaml, скорее всего код на haskell мне теперь будет понятен. Записал себе на будущее – пощупать scala. Итого польза от прохождения курса – 4 из 5. Мозги немного повернулись и познакомился с новыми для себя концепциями.