company_banner

Тренинг по Scala в JetBrains: как это было

    14 сентября 2013 года в петербургском офисе JetBrains состоялся бесплатный однодневный тренинг по языку Scala.

    Вел тренинг Александр Alefas Подхалюзин, разработчик плагина поддержки Scala в IntelliJ IDEA. За день он провел вводный практический курс по Scala, занятия шли с 12:00 до 19:00. Курс был предназначен для начинающих (или желающих начать), однако все участники должны были иметь опыт разработки на Java.

    Тренинг мы устроили для того, чтобы напомнить, что для Java есть альтернатива. Разработчику подсознательно хочется, чтобы его подтолкнули в новом направлении: развиваться-то надо, а времени нет, да и вообще спать хочется. Так что тренинг должен был стать катализатором желания развиваться у тех, кто пришел, а заодно помочь решить, годится ли Scala для решения их задач.


    Пришли 27 человек (записались 40). Это — отличный результат для бесплатного мероприятия: в среднем по России приходит половина. До конца дошли 18.

    Среди участников были:
    трое пришедших с Хабра;
    две девушки (кстати, drop rate среди девушек — 0%, т.е. все, кто записался, пришли);
    не менее 7% студентов.

    Тренинг состоял из трех частей. В конце первой и второй надо было решить практическое задание (на Scala, естественно). Первая — вводная — часть была самой большой — 2,5 часа.

    С задачами народ справлялся по-разному. Например, одной из задач была реализация быстрой сортировки на Scala. В основном люди писали так же, как если бы они писала на Java. Один человек написал то, что ожидалось:

    def qsort(m: Array[Int]): Array[Int] =   
         if (m.length < 2) m
         else {
             val pivot = m(m.length / 2)
             qsort(m.filter(pivot > _)) ++ 
                  (m.filter(pivot == _)) ++
                  qsort(m.filter(pivot < _))
            }
    


    Мы надеялись, что народ будет активно задавать вопросы, но груз новых знаний оказался настолько тяжелым, что вопросы задавали вяло. Пришлось объявить обед. После погружения в язык пироги с чаем и кофе пошли на ура, и вторая часть тренинга на сытый желудок усвоилась, ясное дело, труднее.

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

    Некоторые практические задания были на смекалку (см. слайды). С ними не справился никто. В следующий раз будем просить не выключать смекалку при входе в офис.



    Больше половины тех, кто выдержал тренинг до конца, сказали, что заинтересовались Scala. На самом деле, если кто-то твердо решил, что Scala ему не годится, это — тоже хорошо, потому что осознанный выбор инструмента — это правильно.

    Александр Подхалюзин, который вел тренинг, остался доволен, что успел рассказать о Scala довольно много. Впрочем, это неочевидный плюс: может быть, кто-то из участников достиг лимита восприятия нового, и будь тренинг двух-трехдневным, он был бы эффективнее, но на длинный тренинг сложнее ходить, а тем более делать домашние задания.

    Диалог в кулуарах:
    — Я понял процентов 30.
    — Ох ты, круто! Ты еще много понял!


    Будем надеяться, день тренинга стал днем рождения новых проектов на Scala в Петербурге.
    JetBrains
    323,00
    Делаем эффективные инструменты для разработчиков
    Поделиться публикацией

    Комментарии 19

      0
      Со скалой трудно разобраться с наскоку, особенно после java. Там нужно очень много примеров и время подумать над каждым. Конечно однодневный формат такой возможности не дает.
        0
        Конечно однодневный формат такой возможности не дает.

        Но он и не для этого предназначен. Он просто дает пинок в нужном направлении.
        А дальше каждый сам решает, надо ему это или нет.
        –1
        6й слайд — фэспалм. 7й слайд — двойной фэйспалм. 9й — рук не хватило, вечерком попробую ещё раз.
          0
          В тот вечер не дошёл. Но всё-таки считаю что должен развёрнуто описать почему презентация произвела на меня столь удручающее впечатление.

          1. Во-первых 6й слайд. Понятно что надо как-то отбивать расходы на помещение, но разлапистая бибилотека коллекций в принципе позволяет этим заняться попозже и с меньшим вредом для аудитории. Здесь же должно быть ровно 3 пункта, из низ 2 — код. «Install scala», "$ scala", "> println(«Hello, World!»)".

          2. Слайд 7. Очень резкий старт. 3 неочевидные (хотя и модные) фичи. Люди ещё не умеют создавать замыкания но им уже показывают что у замыканий есть краткая форма…

          3. 9й и далее. Всё ещё не создано ни одной функции, ни единого объекта… но уже пора знать что классов три вида (таки может типов:) ). Дальше куча слайдов об очень неблизких для новича проблемах. Статические члены, множественное наследование, свойства, обобщённые типы, вариантность? Зачем это всё людям которые не могут написать итерацию по списку?

          4. Вторая часть. Продолжаются дебри типа implicits и TypeTag. При этом case class — 59й слайд. Пятьдесят, мать его, девятый слайд. Это простейшая и полезнайшая вещь, примерно 80% полезности всей этой функциональной движухи на 5м с конца слайде. Я даже достал Мартина с полки, у него это 15 глава из 35, до пропертей, до дженериков и до имплиситов.
            0
            Все верно. Цель была изначально неправильной, а именно рассказать как можно больше, сколько только возможно успеть. Цель достигнута, но ответ неоднозначный, насколько эффективным это окажется в итоге (зависит лишь от того, продолжат ли люди изучение Scala или нет).
            Думаю, что если проведем что-то такое еще раз, то все переделаю, и расскажу в три раза меньше, но с введением в функциональное программирование.

            Спасибо за замечание!
              0
              Смотрите на существующие решения в этой области, «Scala by example», «Learn You a Haskell» проверенно неплохо работают. Ну и это… ревью полезная штука, чирканули бы в scala-russian…
          0
          трое пришедших с Хабра;

          Полагаю события на Хабре — не лучший способ информирования.

          А где еще вы распространяли информацию о мероприятии?
            +1
            по рассылке людей, ранее говоривших нам, что им такое будет интересно, в комментарии к соответствующему вопросу, в событиях на timepad, в твиттере, в группе джавистов в ВКонтакте. В результате пришло даже больше людей, чем мы ожидали. Т.е. уровнем интереса мы полностью довольны. То, что не все они прочли о событии на Хабре — это нормально :)
              +1
              Спасибо за информацию, подписался на ваш timepad. (Ссылка для тех, кто тоже хочет.)

              Планируете и дальше нести свет scala в массы? То есть планируете ли новые встречи по scala?
                +1
                да, конечно!
            +1
            implicits сначала взорвали мой мозг, но уже дома, отдохнув и еще раз переосмыслив, наконец смог поянть о чем говорил докладчик.
            Спасибо вам за тренинг!
              +1
              На coursera отличный вступительный курс есть. Кстати, насчёт конференции, а где вообще новости о ней были?
                +1
                Кстати как раз сегодня начался, если Вы о Functional Programming Principles in Scala.
                  0
                  Он по второму кругу начался, я его ещё весной прошёл, но не нашёл, где знания применить и сейчас просто периодически пытаюсь олимпиадные задачки на ней решать для тренировки.
              0
              Выскажу свое «фи». Иллюстрация scala-way на примере «быстрой» сортировки просто ужасна. Вы отдаете себе отчет, что в такой реализации на один вызов qsort происходит 4 раза создание и копирование массива? Конечно, это всего лишь пример, и он не обязан быть оптимальным, но зачем учить новичков наступать на самые большие грабли скалы — бездумное использование «красивых» методов, за которыми часто скрыты «лишние» операции.
              На мой взгляд, лучше было бы придумать пример, который демонстрирует красивое рекурсивное решение, с использованием красивых фич скалы, при этом по перформансу не уступает императивному подходу. То есть, tail recursion, O(1) list prepending, List immutability, и т.д. Например, у Мартина Одерски в курсе все примеры были как раз такие.
                0
                У Одерски тоже есть такой пример qsort. Но он там обращает внимание читателя на накладные расходы. Возможно при относительно небольшом количестве данных подобный подход допустим с целью минимизировать количество ошибок.

                А вообще это первое, в чем упрекают функциональный подход.
                +1
                А видео тренинга будет?
                  0
                  увы, нет.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое