newsmode
search
Меню
arrow_back Назад

Thoughts on Functional Programming in Scala Course (Coursera)

auto_awesomeКраткое саммари

Юджин Ян рассказывает о курсе Functional Programming in Scala от Мартина Одерски на Coursera. Работая в команде Data Science в Lazada, автор использует Spark и решил освоить Scala структурированно вместо PySpark. Шестинедельный курс охватывает функциональное программирование, синтаксис Scala, иерархию классов, pattern matching и вариантность. Главным вызовом стало не освоение синтаксиса, а мышление через рекурсию — почти все задания решались через хвостовую рекурсию. Помимо языка, автор отметил два важных урока: акцент на тестировании через ScalaTest и навык декомпозиции задач через хвостовую рекурсию. В качестве продолжения рекомендуются Scala School от Twitter и Scala Exercises от 47 Degrees.

Мысли о курсе Functional Programming in Scala (Coursera)

[ learning ] · 4 мин чтения

В команде Data Science в Lazada я довольно часто использую Spark, особенно когда данных много (например, данные об онлайн-поведении и транзакциях). Хотя PySpark — Python API для Spark — был доступен, когда я начинал, я с самого начала решил писать на Scala. Возможно, мне нравился вызов, а может, просто хотелось освоить новый язык.

Зачем проходить курс Functional Programming in Scala?

До курса мои навыки программирования на Scala были в основном самоучкой, методом проб и ошибок и через stackoverflow. Поэтому, когда курс появился на Coursera, я увидел возможность изучить основы Scala (в отрыве от Spark) и её синтаксис структурированно.

Каков курс?

Курс ведёт Мартин Одерски, создатель языка программирования Scala. Он построен по структуре, типичной для MOOC: примерно два часа лекций (больше теории) и трёхчасовое лабораторное задание (больше практики) в неделю.

За шесть недель Мартин рассказал о:

Дизайне функционального программирования (call-by-value против call-by-name, def против val и т.д.) Концепциях программирования на Scala (функции высшего порядка, классы, объекты, трейты, типы и т.д.) Иерархии классов Scala и структурах данных (списки, векторы, отображения и т.д.) Базовом синтаксисе Scala Pattern matching (нет, не регулярные выражения) Подтипировании, вариантности (ковариантная, контравариантная, инвариантная)

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

На курсе почти все задания решались через хвостовую рекурсию. На работе я в основном думаю о данных в виде таблиц, строк или графов — рекурсивные решения почти не встречаются.

Что я вынес из курса?

Хотя курс был посвящён языку Scala и парадигме функционального программирования, я получил ещё два урока, которые ценю не меньше.

Много внимания уделялось ключевой практике разработки ПО — тестированию (с помощью ScalaTest). Уже с первой недели практика написания юнит-тестов преподавалась и поощрялась. На протяжении всего курса Мартин активно рассказывал о пограничных случаях в коде и о том, как их можно формализовать и стабильно проверять в юнит-тесте.

Лабораторные задания постепенно знакомили со всё более сложными методами ScalaTest и с тем, как тестировать эффективнее. Улучшение практики тестирования сделает мой код надёжнее, работу эффективнее, а меня самого — лучшим data scientist в долгосрочной перспективе.

Я также получил практику в декомпозиции задач и решении их через хвостовую рекурсию. Мне встречались user-defined функции в Spark, которые приводили к ошибке переполнения стека при выполнении. Дополнительное обдумывание и переписывание их в хвостово-рекурсивной форме решало эту проблему и приводило к повышению эффективности. Тем не менее, на работе я вряд ли буду активно думать о рекурсивных решениях, если только это не абсолютно необходимо.

Что дальше?

Курс отлично подошёл для понимания того, какое мышление стояло за дизайном Scala как функционального языка и как использовать Scala эффективнее.

На заключительной лекции Мартин рекомендовал дополнительные учебные ресурсы. Два из них стоит выделить здесь. Во-первых, Scala School от Twitter, где разбираются основы, коллекции, simple build tool (SBT) и многое другое. Мартин также рекомендовал Scala Exercises от 47 Degrees, где больше возможностей Scala изучаются через решение простых упражнений интерактивно в браузере. Мне Scala Exercises кажутся более практичными и с большей вероятностью улучшат мои инженерные навыки в Spark.

Заключение

Я очень рекомендую этот короткий шестинедельный курс, если вы хотите изучить основы Scala от самого создателя языка. Мартин — отличный преподаватель, эффективно обучающий через онлайн-видео и лабораторные задания. Форумы тоже очень полезны. Там вы найдёте людей, застрявших на тех же задачах, что и вы, и ассистентов, дающих полезные подсказки.

Вопросы? Хотите следить за моим путём? Пишите в Twitter @eugeneyan!

Если этот материал был полезен, пожалуйста, цитируйте его так:

Yan, Ziyou. (Jul 2016). Thoughts on Functional Programming in Scala Course (Coursera). eugeneyan.com. https://eugeneyan.com/writing/thoughts-on-functional-programming-in-scala-course-coursera/.

или

@article{yan2016scala, title = {Thoughts on Functional Programming in Scala Course (Coursera)}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2016}, month = {Jul}, url = {https://eugeneyan.com/writing/thoughts-on-functional-programming-in-scala-course-coursera/} }



Присоединяйтесь к 11 800+ читателям, получающим обновления о machine learning, RecSys, LLM и инженерии.