Ответы пользователя по тегу Scala
  • Liftweb ещё жив?

    @a1go1ov
    Scala fan, Java developer
    На счет смысла изучения - если после того как вы разобрались с проектом на lift у вас сохранился интерес к этому framework'у и вы видите, что он позволит успешно решать ваши задачи, то на мой взгляд конечно стоит продолжать с ним работать и изучать его. Мода, понятие относительное, но mailing list вроде активный и на github активность присутствует, учитывая, что lift это один из старейших framework'ов для Scala.
    На счет популярности, самые популярные web framework'и/библиотеки для создания web-приложений, как мне кажется, это Play Framework, /akka-http (spray) и Finatra/Finch. При том, что Play и Finatra это полноценные web-framework'и, а akka-http и finch более минималистичны, поэтому скорее это библиотеки.
    Так вот, немалая доля их популярности, на мой взгляд, проистекает из-за того, какие компании стоят за этими инструментами - Lightbend (бывшая Typesafe), основанная Martin Odersky (создателем Scala) и Jonas Bonér (создателем akka), которая развивает и продвигает Play и Akka, а так же Twitter, где родился Finagle/Finatra. Учитывая, что для Lightbend основной заработок это консультации в том числе по Play и Akka, то понятно, что они заинтересованы в наибольшей популярности этих продуктов и имеют возможности для их продвижения (к слову сказать, я считаю, что популярность вполне заслуженная).
    Интересно, что когда создавалась Typesafe, David Pollak (создатель Lift) отказался от предложения включить lift в качестве web-framwork'а для стека продуктов, который собиралась продвигать Typesafe (на тот момент этот стек в итоге составили Play, Akka, SBT), возможно, что это решение аукнулусь тем, что сейчас lift не особо в тренде.... При прочих равных, я бы выбирал что-либо из трех озвученных выше, ну а вообще изучать нужно то, чем вам будет удобно и приятно пользоваться, но тут уже нужно знать ваши цели, задачи и предпочтения. Посмотрите и на другие варианты, почитайте обзоры и может быть для вас станет более очевидно что использовать и изучать. Для примера посмотрите на framework'и что представлены на scaladex'е:
    https://index.scala-lang.org/search?q=keywords:web...

    P.S. На счет Typesafe, Lift, Play и David Pollak можно почитать в этом вопрсое на Quora (с участим и David Pollak и Jonas Bonner): Why did Typesafe select Play for their stack inste...
    Ответ написан
    Комментировать
  • Изучение программирования путем Скалы?

    @a1go1ov
    Scala fan, Java developer
    Если в программировании вы 0 и хотите начать правильно вникать в программирование, то начните с классики - Structure and Interpretation of Computer Programs (SICP), эта книга закладывает хорошие основы, а так же познакомит вас с функциональным программированием:
    книга:
    web.mit.edu/alexmv/6.037/sicp.pdf
    вспомогательный сайт для самостоятельного изучения книги:
    https://mitpress.mit.edu/sicp
    sicp.sergeykhenkin.com/sicp-exercise-solutions
    перевод книги (не в курсе на счет качества)
    newstar.rinet.ru/~goga/sicp/sicp.pdf
    видео лекций по книге:
    ocw.mit.edu/courses/electrical-engineering-and-com...

    Конкретно по Scala:

    С точки зрения Scala, на мой взгляд самый оптимальный вариант это пройти курсы по Scala на coursera.org. Но ниже будут примеры и ссылки и других источников для иучения программирования на Scala..

    Интерактивные курсы

    cousera.org:
    Специализация по Scala - один из фундаментальных источников знаний о программировании на Scala. В составе - видео лекции, доп. материалы, вопросы на закрепление, задания на программирование, форум для вопросов и обсуждения (все опционально). В принципе можно вместо SICP сразу начинать со специализации на coursera.org, в частности первый курс в специализации как раз таки проектировался Мартином в стиле SICP (по крайней мере до создания специализации программа курса и задания были в духе SICP).

    https://www.coursera.org/specializations/scala

    Ссылки на курсы из специализации по отдельности (для бесплатной регистрации):
    1. Functional Programming in Scala
    2. Functional Program Design in Scala
    3. Parallel programming
    4. Big Data Analysis with Scala and Spark

    Курс стоящий немного в стороне, о reactive programming на scala:
    Принципы реактивного программирования

    ---
    Интерактивные упажнения по Scala от 47 Degrees (на данный момент 6 курсов std lib, cats, shapeless, doobie, scalacheck, FP in Scala)
    https://www.scala-exercises.org

    www.scalakoans.org - небольшие уроки для изучения
    ---
    Big data university (с уклоном в Data Science и Big Data):

    Introduction to Scala
    Scala for Data Science
    Spark Overview for Scala Analytics
    ------------------------------------------

    Если вас больше интересует не интерактивный стиль обучения, а вдумчивое чтение, то можно посоветовать следующие книги:

    Книги:

    На русском,к сожалению, есть только одна книга:
    Scala для нетерпеливых
    но для новичка в программировании она скорее всего не подойдет.

    также в 2016 вышла обновленная версия книги от Martin Odersky, Lex Spoon и Bill Venners, которая покрывает все вопросы связанные со Scala (859 стр), в том числе все нововведения на текущий момент (вплоть до Scala 2.12). Эту книгу можно также читать если вы новичок в программировании. Это наверно самый фундаментальный источник для изучения Scala:
    Programming in Scala, Third Edition

    После ознакомления с основами Scala для углубления именно функциональных аспектов программирования на Scala можно прочитать замечательную книгу от Paul Chiusano и Rúnar Bjarnason:
    Functional Programming in Scala

    Для изучения практических основ проектирования современных приложений с использованием возможностей Scala и ее экосистемы, с применением функциональной парадигмы, рекомендую отличную книгу от Debasish Ghosh
    Functional and Reactive Domain Modeling

    Вообще по Scala и различным инструментам из экосистемы Scala сейчас много разных книг, так что при желании можно найти подходящую по уровню и интересам, стоит также обратить внимание на подборку книг на сайте lightbend (бывшая TypeSafe)

    Также можно почитать перевод уроков Scala от Twitter:
    Scala Школа!
    ------------------------------------------

    Алгоритмы
    На счет алгоритмов, про которые вы упоминали, можете посмотреть прекрасный набор классических алгоритомов и структур данных, реализованных на Scala в чисто функциональном стиле:
    scalacaster от @vkostyukov(Twitter, Finagle)
    или
    scalgos от @pathikrit
    ------------------------------------------

    Остальное
    Ninety-Nine Scala Problems - набор небольших упражнений (с ответами) для изучения Scala

    Hands-on Scala.js - туториал по Scala.js от @lihaoyi

    Type-Level Programming in Scala - серия постов из десяти частей на тему продвинутого использования возможностей системы типов Scala от Rúnar Bjarnason (соавтор Functional Programming in Scala) и Mark Harrah (разработчик sbt)

    Scala Best Practices - колеекция хорощих практик программирования на Scala от Alexandru Nedelcu

    P.S. Также если хочется держать руку на пульсе о том, что происходит в экосистеме и community Scala, то можно посмотреть эту подборку блогов и новостных и видео ресурсов о Scala
    Ответ написан
    Комментировать
  • Насколько подходит Scala как язык для web?

    @a1go1ov
    Scala fan, Java developer
    Если у вас есть солидный опыт java и знание Scala, хоть и без рельного опыта работы - вы будете интересны многим работодателям. Не скажу конкретно за web, тем более фриланс, но вакансии где приемлем небольшой опыт на Scala, при наличии хорошего опыта разработки с использованием java - попадаются довольно часто (среди всех вакансий связанных со Scala)
    Ответ написан
  • Какие есть добротные блоги о Scala?

    @a1go1ov
    Scala fan, Java developer
    Еженедельные выпуски новостей связанных со Scala (статьи, обновления ПО, конференции и т.д.):
    www.cakesolutions.net/teamblogs/topic/this-week-in...
    scalatimes.com

    Новости об обновлении библиотек, плагинов и других инструментов из экосистемы Scala:
    notes.implicit.ly

    Блоги:
    russian:
    https://habrahabr.ru/hub/scala/posts/
    ru-scala.livejournal.com
    xeno-by.livejournal.com

    не russian:
    www.scala-lang.org/blog - scala official blog
    letitcrash.com - Akka team
    www.lightbend.com/blog - company behind Scala, Akka, Play

    www.cakesolutions.net/teamblogs
    blog.scalac.io
    www.lihaoyi.com
    debasishg.blogspot.ru
    underscore.io/blog
    typelevel.org/blog
    blog.higher-order.com
    danielwestheide.com
    https://github.com/viktorklang/blog
    https://alexn.org
    krasserm.github.io
    hseeberger.github.io
    pchiusano.github.io
    https://partialflow.wordpress.com
    https://meta.plasm.us
    mariussoutier.com/blog
    https://bionicspirit.com

    Видео конференций и другие видео по Scala:

    ScalaDays:
    https://www.youtube.com/channel/UCOHg8YCiyMVRRxb3m...

    functional.tv

    на Skills Matter:
    конференции

    "SillsCasts"

    На parleys.com:
    Если выбрать channels в фильтре то можно посмотреть каналы конференций
    https://www.parleys.com/search/scala

    https://www.youtube.com/playlist?list=PLndbWGuLoHe...

    Сайты конференций:

    https://scala.world
    https://scaladays.org
    www.nescala.org
    scala.bythebay.io
    typelevel.org/events

    PS: также можно посмотреть эту подборку ресурсов по изучению Scala
    Ответ написан
    Комментировать
  • Scala. Как правильно конкатенировать строки?

    @a1go1ov
    Scala fan, Java developer
    На самом деле действительно не хватает контекста. Возможно в задании были какие-то подробности, указывающие на правильный, с точки зрения задания, способ. Так как строки в Scala это строки из java, то к ним применяются все те же правила.
    Если вы используете `+` то, например вот такое выражение не вызовет ошибки:

    scala> "one" + null + 42
    res0: String = onenull42


    то есть при конкатенации строки с значениями других типов, эти значения за сценой переводятся к строке (вызывается метод toString())

    С другой стороны concat, принимает только строки:

    scala> "" concat null
    java.lang.NullPointerException
      at java.lang.String.concat(String.java:2027)
      ... 33 elided
    
    scala> "" concat 42
    <console>:11: error: type mismatch;
     found   : Int(42)
     required: String
           "" concat 42
                     ^


    С точки зрения производительности, строки в java (и как следствие в Scala) - imutable и оператор + при конкатенации каждый раз создает новую строку, что при конкатенации большого количества строк конечно же не очень эффективно и метод concat будет работать быстрее в такой ситуации. С другой стороны компилятор способен оптимизировать простые случаи использования оператора + и конвертировать их с использованием StringBuilder (который mutable) и он в свою очередь более производительный чем concat.

    В общем и целом, если в задании был намек на необходимость конкатенации большого количества строк и чувствительность к производительности, то необходимо было использовать StringBuilder. Если же необходимо было показать более scala way, то возможно лучшим вариантом было бы использовать интерполяцию:
    scala> val (one, two, three) = (1, "two", null)
    one: Int = 1
    two: String = two
    three: Null = null
    
    scala> s"$one $two $three"
    res11: String = 1 two null
    Ответ написан
    Комментировать