読者です 読者をやめる 読者になる 読者になる

ScalaMatsuri 2016 2 日目に参加してきました

scalamatsuri.org

引き続き ScalaMatsuri 2016 2 日目に参加してきました。

午前中は所用があったため、午後からの参加となりました。
もったいない...

ScalaMatsuri 初参加で、アンカンファレンスって一体どうなるんだろうと少し不安もありましたが、実際終えてみてとても楽しい一日になりました。
みんなの興味あることとか、実際に話してみたい人とか、せっかく来てくれている Typesafe の方に話を聞きたいとかいろいろあって、そういうのをうまく吸収できていると思いました。

参加したの以下のセッションです。

  • SBT 人間
  • Typesafe の人にリアクティブについて聞いてみよう
  • Scala 社内教育

SBT 人間

人間ってなんだろうと思ったんですが、SBT をメンテしている方の話を聞きたいってことなんでしょうか..
SBT はビルドツールですが、ちょっとカスタマイズしようと思うと途端にどうすればいいか分からなくなっていました。

以下は聞いた内容のメモです。

  • sbt プロジェクトの構成
    • build
      • sub-project
      • source
      • libraryDependencies
  • ビルドツールには系譜がある
  • なぜ lazy val にする必要がるか
    • 依存関係を作るときに、順番通りに上から評価するといろいろ面倒なんです
    • Scala Puzzlers に書いてあります、みんな買いましょう
  • インクリメンタルコンパイラ
  • Task や Setting について
    • tasks ていうのは def のような感じで、副作用を伴って、エンターキーを押すたびに何度も実行してほしいことを書く
    • settings は副作用のない定義を書く
    • Keys.scala, Defaults.scala これらのソースを読むしかない
    • 積み上がったタスクの定義を読まないとできないことがある
    • カスタマイズしづらいのはある
    • Key はグラフになっていて、inspect tree で依存関係の一覧をみれる
  • sbt はインタラクティブであることが大きな特徴です
    • 対話形式のコンソールがありますしね

sbt Reference Manual — 始める sbt というドキュメントがあるんですが、これでだいぶ理解が進みそうです。

Typesafe の人にリアクティブについて聞いてみよう

初日に、「なぜリアクティブは重要か」というセッションを聞いていましたが、ちょっとついていけてないところもありました。
Typesafe の 4 名の方に Akka Stream の話を中心に質問を指定ました。

以下はメモです。

  • 金融系などレジリエンスが本当に求められるようなところにリアクティブは使えるのか
    • 具体的な話はできないが、有効ではある
  • リアクティブシステムは、実装方法たたくさんあるからリアクティブマニフェストでは原則論にとどめている
  • アクター同士の組み合わせは非常に難しいのではないか
  • アクターに対する批判に対しての、リアクティブストリームなのか
  • ストリームがなんのかに混乱があるのでは
    • spark や Apache Dataflow と競争しているわけではない
    • Akka はクラスタ
    • 実装レベルでは全く別。ストリームではない
    • Akka Stream とはなにか、Spark や Storm はバックプレッシャーを使わない
    • Akka Stream は安全に、高速に、処理のスピードを適切に保つ。
  • Akka Stream は統合手段
    • spark だけでなく、いろんなツールをつなぐ
    • Akka Stream のプラグインを作ってエコシステムに参加してください
  • Gearpump というランタイムの実装を開発中
  • ログデータを ElasticSearch に流すことを Akka でやっている。
    • やらないといけないのは、ElasticSearch のバックプレッシャーのシグナルを認識できるようにしないといけなかった
    • バックプレッシャーに対してのコンフィグレーションが必要

だいぶ混乱してしまったところがあるので、メモの内容が間違ってることろがあると思います
訂正できるようにあとで勉強しておこうと思います。

Scala 社内教育

非常に興味のあったテーマです。
社内でどう広めていくかの参考にしようと思っていました。

  • ドワンゴはてなも教科書を作っている。
  • ドワンゴの研修で使っている Scala のテキストを公開しました
  • はてなではプログラミングや関数型の素養がある人を中心に Scala の教育を行っていた
  • 知見が溜まってきたので、情報系の教育を受けた人なら大丈夫かなと思う
  • オープンソースにしたのはなぜなのか
    • 公開するとフィードバックが得られやすくなるし、社外の人にも活用してもらえる
    • 公開するデメリットは?
      • 怖い人からツッコミをもらうかもしれない..
  • イスラエルの会社の方
    • トレーニングはどうしたか
    • Scala関数型プログラミングは別項なんです
    • JavaC# のバックグラウンドを持っている人からすると、コンセプトは学ばなきゃいけない
    • 市販されているテキストは二分されがち、関数型よりか、完全に無視か
    • 伝統的な Java プログラマからすると馴染みにくい。
    • 十分な言語的な理解がないと Play とかツールの使い方を理解するのは危険
    • 仕組みではなく知識が大事
  • チャットワークでは、新卒ではなく実力者が来るので、別のコストがかかる
    • Scala は分かる、FPinScala は?というところ
    • 実際の Scala のタスクを与えて学習させる
    • 必ずペアで
    • 遅延型ペア学習?
    • 必要になってから深める
    • まずは、Scala に慣れる
    • 次は関数型を活かせるようになる
    • 次に純粋関数型とはなにか
    • イテレーションを切ることが大事かな
  • Scala と関数型は別物として捉えることが大事では
    • 一方向の進化として捉えるべきなのか
    • 関数型として使うことは一つの意思決定なのではないか
    • 解決する課題は関数型でも関数型じゃなくても対応できる
  • Scala のパワーを活かすには関数型の理解が必要だという目的意識を持っていた
    • 目的は目の前の業務なのか
    • 使いこなしたいというエンジニアとしての欲求もあった
    • 次のスッテップにすすめるんじゃないかというタイミングも見計らっていた
  • どう Scala に入るのがスムーズなのか
    • 大学教育に対しては、影響を持とうとはしていない
    • 思考が大事
    • Java で純粋関数はどう記述するかに感銘を受けた
  • Java の世界を隠蔽しきれていないところがあって、スタックトレースを調査するときに Scala の世界を出ないといけないときがある

なんだか書いてることがよくわからないところもあると思いますがご容赦ください。
結局 Scala の教育は難しいかなと思いました。
ある程度素養があれば、遅延型学習が効率的だなと思います。
けど現状そのステップに行くまでがハードルが高いなと思います。
英語であれば充実したドキュメントはたくさんありますが、読めたとしても習得に時間がかかります。
書籍であれば、コップ本や FPinScala があると思いますが、コップ本は内容はさほどハイレベルではありませんが、読了に時間がかかります。
また 2.8 の頃の記載なので、最新の Scala コードを読もうとするとわからないところ多々出てきたりします。
FPinScala はそもそも何回で時間がかかります。

そんなわけで引き続き社内で広めるために試行錯誤していくしかないかなというところです。

まとめ

スタッフの方、本当にありがとうございました。
会場は快適で、お弁当はおいしくて、セッションも面白くて最高でした。
レシーバーの回収は大変そうでしたが、同時通訳は本当にありがたいです。
セッションの登壇者の英語は、意識的に気をつけてゆっくり喋ってくれる方もいましたが、パネルディスカッションや発表者に対する質問などはやはりしゃべるスピードは全然早くて、英語だとついていけませんでした。

ScalaMatsuri で Scala のモチベーションが上がりまくったので、今年は Scala をガンガン使っていきたいと思います。