Пользователь
0,0
рейтинг
18 января 2014 в 18:30

Разработка → Основы Scala. 5 часов поедания мозгов tutorial

Добрый день, уважаемое хабрасообщество!image

В конце ноября 2013 года мы с коллегой устроили встречу, на которой провели сеанс «интенсивного введения Scala в мозг добровольцев».

Выкладываю на суд общественности наше творчество и краткое описание «эксперимента».


Отказ от отвественности и Крик о помощи


Мы не являемся Scala-экспертами, но являемся практикующими специалистами.
Поэтому некоторые концепции мы можем обрисовывать неправильно.
Злого умысла в этом нет, errare humanum est.
Если вы видите неувязочку или уличили нас во лжи — оставьте комментарий к статье и разъясните нам, как жестко мы ошиблись. Я буду крайне за это благодарен!


TL;DR;


Все получилось. Нам понравилось. Людям понравилось. Смотрите и комментируйте.

Часть 1:Введение. Иммутабельность. «Строительные блоки». Основные типы. Иерархия классов.


Часть 2:Функции, методы. Функции как первородные объекты. Вывод типов. Замыкания. Коллекции. Циклы и for compehension. Сопоставление с образцом. Неявные конструкции.


Часть 3:Синтаксический сахар. Ленивые вычисления. Рекурсия. Streams. Монады.


Презентацию можно найти тут.

Отчет для представителей доLTDRной эры


Социальная часть

Итак, основной целью нашего выступления были следующие вещи:
  1. Повысить ЧСВ. Показать, что Scala не так страшна, как ее малюют.
  2. Продемонстрировать наличие крутых концепций, о которых многие вообще не думали.
  3. Задать вектор «кудаДальшеКопания».
  4. Подсадить на тяжелый наркотик Scala… ???… PROFIT!!

Проанализировав отзывы и пронаблюдав «подопытных» в естественной среде, мы пришли в к выводу, что большая часть наших целей выполнена! Ура!

Краткая примерная статистика:
  • Зарегестрировалось около 130 участников.
  • Пришло около 90 участников.
  • До конца дожило около 40 участников.
  • Письменные отзывы прямо на месте оставило 15 участников.
  • Численность участников чатика Scala.UA выросла на 8 человек.

В ходе выступления мы рассмотрели практически все темы, необходимые для уровней A1, A2 и L1 из классификации скала-программистов.

К тому же мы испробовали интерактивный формат выступления:
  • Любой участник задает вопрос в любой момент выступления
  • Лайфкодинг, в ходе которого любой участник может предложить изменение

Апарт №1
Я лично очень люблю форматы, поддерживающие живое общение с аудиторией, потому что они не дают отклониться от темы, уйти в «сложный язык» или перескочить на уровень непонятных аудитории абстракций.
Вероятно, такая любовь вызвана тем, что мне нравится импровизировать и не нравится заучивать выступление.

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

Теоретическая часть

Апарт №2
Главная проблема при рассказе про Scala — правильная структура и последовательность материала.
Мы прочитали ряд книжек, просмотрели ряд выступлений, прошли курс на курсере.

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

Мы попытались структурировать материал немного иначе, чем принято его подавать, чтобы оградить людей от «концентрированных знаний» в самом начале.

Наш список основных тем выглядит примерно так:
  • Introduction
  • Immutability
  • Building blocks
  • Basic types
  • Class hierarchy
  • Functions. Methods. First-class functions
  • Type inference
  • Closures
  • Collections
  • Loops. For comprehension.
  • Pattern matching.
  • Implicits
  • Scala syntax sugar

Ряд дополнительных тем «вшит» в само выступление и разъясняется по мере того, как аудитория этих тем касается.

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

Так делать нельзя!
Вопросы про хитрые конструкции языка будут всплывать практически во всех рассматриваемых темах.
Как правильно показать и разъяснить сахар по мере выступления — вопрос открытый.



Спасибо за внимание и конструктивную критику.
Приглашаем всех желающих в наш скайп-чат: bit.ly/scalachat (украинский чат: bit.ly/scala-ua)
Будем рады как новичкам, так и экспертам. Место проживания, раса, пол, и прочие малозначительные факторы значения не имеют.

P.S. Если вам нравится наше мероприятие, вы можете пригласить нас к себе в гости. Стучитесь в личку.
О планируемых мероприятиях можно узнать в нашем чатике.
Алексей Мигутский @MrMig
карма
69,0
рейтинг 0,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (29)

  • 0
    Какую тему на ваш взгляд сложнее всего объяснить?
    • +5
      Монады однозначно. У каждого в голове они формируют свою собственную абстракцию и аналогии.
      Есть такой анекдот — если вы думаете, что вы можете объяснить монады, то вы их не понимаете. Как только вы понимаете монады — вы их уже никогда не объясните другому человеку.
      • 0
        Где-то тут про «the m word»: infoq.com/presentations/functional-pros-cons
        • 0
          0:24:10
      • 0
        Про монады можно рассказать понятно, просто и весело. Вот пример: www.youtube.com/watch?v=ZhuHCtR3xq8
        После просмотра понимаешь что монады это очень нужная вещь в функциональных языках
    • 0
      Объяснить не знаю, но понять мне было сложнее всего Implicits. Разобрался только благодоря примеру реализации классов типов через него.
      Правда, я уже хорошо знал C++ и Haskell.
  • 0
    Большое спасибо за лекции!
    Для интересующихся — лучший англоязычный курс — на Coursera (от авторов языка, между прочим).
  • +4
    У меня такая история. Я Java-man. И не раз уже ставил перед собой задачу ознакомиться со Scala и немного разобраться в ней. Ходил на конференции, пробовал читать, начинал курс на корсеа, но все равно меня немного подташнивало…

    Но вот сейчас 1:30 ночи и я уже посмотрел 30 минут первой лекции и понимаю, что я буду смотреть это! Кажется я всё-таки смогу! :-)

    Спасибо за лекцию. Дадим еще один шанс Scala вместе!
    • –5
      Мыши плакали и кололись, но продолжали жевать кактус…
    • 0
      Scala есть альтернатива в виде Clojure. Не холивара ради, может стоит и на него посмотреть? Или вас тощнит от функциональности?
      • +1
        Я смотрел. Язык приятный, особенно радуют макросы, которые значительно проще, чем в Scala.
        Но в Clojure практически отсутствует pattern matching (деструкция его не заменяет), и сложнее интеграция с java-библиотеками. На данный момент Scala практичнее.
        • 0
          Все же «деконструкция», а паттерн матчинг реализован в библиотеке clojure.core.match, хотя обычных средств clojure.core хватает за глаза и за ушли пока что…
          • 0
            Destructuring, в книжке переводится как деструктизация. Термин деструкция слышал от знакомого лиспера, по этому не правильно прочитал :-).

            Это отдельная библиотека. Надо будет посмотреть. Правда я слишком уже избалован Haskell и Scala и хотел бы pattern matching иметь в ядре языка.
  • 0
    в статье перепутаны ссылки на видео.
    • 0
      Обновите страницу — должно помочь. Все видео идут в правильном порядке.
  • –3
    На 12 -ой минуте второй части, Алекс заявил, что в яве параметры передаются по значению, и явисты в аудитории промолчали)
    • +3
      Ибо это чистая правда: и примитивы и указатели на объекты передаются по значению.
      • –2
        Мы говорим Ленин, подразумеваем — партия,
        мы говорим партия, подразумеваем — Ленин.
    • +1
      Если ты про то, что передается указатель, то он тоже по значению передается. Pointer value.
  • 0
    Оффтопик, извиняюсь, но персонаж с картинки напомнил творчество Gorillaz
  • 0
    Посмотрел пока что 3 часа, появился вопрос, который скорее всего не задавался, ибо этот кусочек уже прошел. Можно ли писать свои классификации (span), где предварительно делаем какие-то модификации с данными?
    или это вообще не имеет смысла и span это грубо говоря заготовка для if/else, в которую просто передаем условие? т.е. скажем, что-нибудь типа strlen(_)>3?
    ну или же вообще все разворачивается в то самое замыкание, где предварительно работаем с данными, а затем производим классификацию (тогда речь шла о постоянной выборке из базы, момент с подготовкой калькулятора)?
    • 0
      Боюсь ответить вам не по теме и ввести в заблуждение, но span просто разбивает коллекцию в нужной «точке» на две части.
      Возможно, первая часть вашего вопроса относится ко всем «предикатам» (функциям с условиями). В этом случае вы можете создать функцию отдельно и использовать ее в методах типа filter.

      Если вас не затрудник — скопируйте ссылку с привязкой ко времени и переформулируйте вопрос, и мы обсудим его подробней.
      • 0
        На самом деле, кажется я уже понял, что просто нет смысла в том, что я написал, т.к. в итоге так или иначе все сведется к одному условию.
        Мой вопрос связан с вот этой репликой — www.youtube.com/watch?feature=player_detailpage&v=-TMVAtlxiEQ#t=2779 и видимо там та самая ошибка, о которой говорится в комментарии к видео, т.е. span сработает до первого false?

        в общем я думал, что в posNum будет 1,2,122 а в negNum будут -55 и -33.
        • +1
          Для «классификации» можно использовать groupBy.

          List(1, -55, 2, -33, 122) groupBy { _ > 0 }
          // Map(false -> List(-55, -33), true -> List(1, 2, 122))
          
  • 0
    Численность участников чатика Scala.UA выросла на 8 человек.

    Публикация на хабре => численность выросла в 5(?) раз.
    • +1
      Если быть точным, то на данный момент численность увеличилась в 6.3 ± 0.36 раз :)
  • 0
    Замечательная лекция. Все понятно разжевано.
    Единственное замечание: фраза «взорвем вам мозг» очень часто употребляется. Но ничего такого мозговыносящего, вроде, не было. Хотя, может мне так кажется после Хаскеля.
    Спасибо за ваш труд.

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