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.

Thoughts on Functional Programming in Scala Course (Coursera)

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

[ learning ] · 4 min read

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

At Lazada’s Data Science team, I use Spark a fair bit, especially when the data gets big (e.g., online behavioural and transaction data). While PySpark, the Python API for Spark was available when I started, I decided early on to code in Scala. Perhaps I relished the challenge or just wanted to pick up a new language.

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

Why take the Functional Programming in Scala course?

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

Before the course, my programming skills in Scala were mainly self taught, through the school of hard knocks and stackoverflow. Thus, when the course was made available on Coursera, I saw the opportunity to learn about the fundamentals of Scala (away from Spark) and its syntax in a structured fashion.

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

How is the course like?

Каков курс?

The course is taught by Martin Odersky, designer of the Scala programming language. It follows a structure commonly found in MOOCs—approximately two hours of lectures (more theoretical) and a lab assignment taking three hours (more practical) weekly.

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

Over the course of six weeks, Martin taught about:

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

  • Functional programming design (call-by-value vs. call-by-name, def vs. val, etc)
  • Scala programming concepts (higher order functions, classes, objects, traits, types, etc)
  • Scala’s class hierarchy and data structures (lists, vectors, maps, etc)
  • Basic Scala syntax
  • Pattern matching (no, not regex)
  • Sub typing, Variance (covariant, contravariant, non variant)
  • Дизайне функционального программирования (call-by-value против call-by-name, def против val и т.д.) Концепциях программирования на Scala (функции высшего порядка, классы, объекты, трейты, типы и т.д.) Иерархии классов Scala и структурах данных (списки, векторы, отображения и т.д.) Базовом синтаксисе Scala Pattern matching (нет, не регулярные выражения) Подтипировании, вариантности (ковариантная, контравариантная, инвариантная)

    I found the main challenge not to be Scala’s syntax, or working with a compiled language. Rather, the main challenge was thinking through the logic of solving problems through recursion. While I’ve wrote recursive algorithms before, I haven’t quite grokked it yet.

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

    In the course, almost all assignments were solved through tail-recursion. At work, I mostly think about data in the form of tables, strings, or graphs—solving problems recursively doesn’t come up much.

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

    What did I learn from the course?

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

    While the course focused on the scala language and functional programming paradigm, I gained two other lessons that I value just as much.

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

    There was a lot of emphasis on a key software engineering practice—testing (using ScalaTest). Beginning in week one, the practice of writing unit tests was taught and encouraged. Throughout the course, Martin actively shared about edge cases in the code, and how they can be formalized and easily checked consistently in a unit test.

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

    The lab assignments progressively taught more sophisticated ScalaTest methods, and how to test more effectively. Improving on the practice of testing will make my code more robust, my work more efficient, and me a better data scientist in the long run.

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

    I also gained practice in breaking problems down and solving them through tail recursion. I’ve come across user-defined functions in Spark that lead to a stack overflow error when executed. Putting in additional thought and writing them in a tail recursive fashion fixed this issue and also led to efficiency improvements. Nonetheless, I’ll probably won’t be actively thinking about recursive solutions at work unless absolutely necessary.

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

    What’s next?

    Что дальше?

    The course was excellent for learning about the thinking that went into the design of Scala as a functional language, and how to use Scala more effectively.

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

    At the concluding lecture, Martin recommended additional learning resources. Two are worth highlighting here. First, there’s the Scala School by Twitter that covers the basics, collections, simple build tool (SBT) and more. Martin also recommended the Scala Exercises by 47 Degrees that covers more features of Scala through solving simple exercises in the browser interactively. I find Scala Exercises to be more practical and likely to improve my software engineering skills in Spark more.

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

    Conclusion

    Заключение

    I highly recommend this short six-week course if you would like to learn the basics of Scala from the designer of Scala himself. Martin is fantastic teacher and taught effectively through online videos and lab assignments. The forums were also very helpful. Here, you’ll find people who are stuck on the same problem as you are, and teaching assistants providing helpful hints.

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

    Questions? Want to follow my journey? Reach out on Twitter @eugeneyan!

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

    If you found this useful, please cite this write-up as:

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

    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/.

    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/.

    or

    или

    @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/} }

    @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/} }



    Join 11,800+ readers getting updates on machine learning, RecSys, LLMs, and engineering.

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