技術書座談会やってみました -Scalaのバイブル「 Scalaスケーラブルプログラミング 第3版」-

こんにちは、[アカウンティング・サース・ジャパン](http://qiita.com/organizations/a-saas)の永井です。
突発企画として技術書をテーマに語り合う技術書座談会を社内で開催してみたので、そちらのレポートになります。

# 書籍座談会とは？ #
「普通の技術ブログともまた違ったことしたいね」という話をしていたところ、自分たちが使っている技術の情報を探すときに意外と困るという話が出ました。

そこで、私たちが採用しているScalaについての技術書を、うちの[技術の偉い人](http://qiita.com/takuya0301)を中心にエンジニア数名でレビュー、ディスカッションしてオススメ度や感想をまとめたら面白そうということで実施してみました。

# 本日のテーマ #

[Scalaスケーラブルプログラミング 第3版](https://www.amazon.co.jp/Scala%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%A9%E3%83%96%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E7%AC%AC3%E7%89%88-Martin-Odersky-ebook/dp/B01LYPRFI7)

# 総合評価 #

★★★★★/★★★★★

- Scalaを網羅的にカバーしている、Scalaエンジニアなら一家に一冊は欲しくなるバイブルでした。

# こんな方にオススメ！ #

- Scalaをきちんと書きたいJava経験のあるエンジニア
- Scalaを少し書いていて、よりスキルアップしていきたいエンジニア

# この本の概要 #

Scala言語の設計者である Martin Odersky 教授によって書かれたScala言語の入門書です。日本の Scalaコミュニティでは「コップ本」の愛称で呼ばれており、Scalaエンジニアにとってはバイブルともいえる本になっています。

内容としては、Scalaの言語仕様が網羅的に解説されておりScalaがなぜスケーラブルな言語でどんなルーツが有るかと言った根本的なところから、機能ごとに事例も多くテーマによっては1章を割いて1つの例を実装している章もいくつかあります。

序盤は Java を経験している人は素直に読める内容になっていますが、中盤から Scala の特徴的な機能や関数プログラミングの内容になっており、終盤ではScalaの高度な機能や XML や GUI などライブラリを利用した実装の内容になっています。

600ページとボリュームのある本ですが、流し読みでいいのでざっと通読することをオススメします。網羅的にカバーされているので、読み終わった後もリファレンスとして利用できます。
Scala をある程度書けるようになってからまた読み直してみると新しい発見があったりもしますので、タイミング問わずScala エンジニアの名乗るのであれば間違いなく一度は読んでおくべき本です。

# 座談会コメント #

## 総評
- 文法などは広く乗っていて、リファレンス的な使い方ができる本。
- 1章まるまる割いてサンプルコードが用意されていたりする。Javaやってきた人は感動するポイント。
- Javaを知らなくても読めないことはないけど知ってたほうが良い。サンプルコードにJavaが出てくることもある。ただ、Javaを深く理解しなくても読みやすい。
- ちゃんと読み込んだらScalaでロジックが書けるようになる。
- 関数型の例文が載っていてわかりやすい。とくに前半はイメージが湧きやすい。

## 注意点
- 言語の本であるためフレームワークやライブラリや、sbt 、 IntelliJ IDEA などの開発環境についての記載は全くないので自分で調べる必要がある。
- 紙で読んだほうがいい。Kindle版はいまいち。ページが画像なのか、検索はできないし動作が重たい。

## オススメの読み方
- サンプルが結構むずかしいものが多いため、まずは流し読み推奨。ただ、最初から通しで読む想定で書かれているから読み飛ばすとわかりづらい。
- Java でいうところの「プログラミング言語 Java」のような教科書系の本なので、体系的に読み込みたい時に良い。
- Scala を実務で使ってみた後ににもう一度読み直すと新しい学びがある。
- 一旦読まなくてもいい章もある。特に、最後のスプレッドシートアプリケーションの作成などは不要な気がする。
- 既にプロジェクトでScalaを使っている場合は、先輩がここを読んだだほうがいいなど、マークしておくと後輩メンバーの学習効果がより出やすくなる。
- Scalaのクラス階層の図は何度か見直してて、今でも参考になる。


## 内容についてコメント
- 1章から13章まではJavaを経験したことがある初学者向け。
- 8章「関数とクロージャー」は重要。Java経験者はオブジェクト指向プログラミングはわかっていると思うので関数型について学んでほしい。
- 15、16、17、20、21、30、32章はちゃんと実装する中級者向け。
- 終盤だけど特に30章「オブジェクトの等価性」や32章「フューチャーと並行処理」は重要。
- 32章「フューチャーと並行処理」は第3版のみ。第2版は2011年に出版されて第3版は2016年に出版されてる。今買って損はない。
- 共変の概念は書籍に乗っている内容だけで理解するのは難しいが、そもそも具体的な話が載っているのが稀なため貴重。
- 暗黙の型変換・暗黙のパラメータなどの記載は実務でも参考になる。

## その他
- 間違いなく読むべきだけどハードモードな本。
- 600ページ程度とボリュームが多くて大変。登竜門的な書籍なのに・・・。初学者にはどこを省いていいかわかりづらい。
- もっとコンパクトでライトな本があればもっと良い。もしくは初級編と中級編で分冊してほしい。
- というかScalaは日本語の書籍が元々あんまりない。

## 目次（コメント参考用） 

第01章　スケーラブルな言語
第02章　Scalaプログラミングの第一歩
第03章　Scalaプログラミングの次の一歩
第04章　クラスとオブジェクト
第05章　基本型と演算子
第06章　関数型スタイルのオブジェクト
第07章　組み込みの制御構造
第08章　関数とクロージャー
第09章　制御の抽象化
第10章　合成と継承
第11章　Scalaの階層構造
第12章　トレイト
第13章　パッケージとインポート
第14章　アサーションとテスト
第15章　ケースクラスとパターンマッチ
第16章　リストの操作
第17章　コレクションの使い方
第18章　ミュータブルオブジェクト
第19章　型のパラメーター化
第20章　抽象メンバー
第21章　暗黙の型変換とパラメーター
第22章　リストの実装
第23章　for式の再説
第24章　コレクションの探究
第25章　Scalaコレクションのアーキテクチャ
第26章　抽出子
第27章　アノテーション
第28章　XMLの操作
第29章　オブジェクトを使ったモジュラープログラミング
第30章　オブジェクトの等価性
第31章　ScalaとJavaの結合
第32章　フューチャーと並行処理
第33章　パーサー・コンビネーター
第34章　GUIプログラミング
第35章　SCellsスプレッドシート

# 書籍座談会、いかがでしたでしょうか？ #

様々な意見が出ましたが、「Scalaスケーラブルプログラミング 第3版は600ページ有るので通読することもかなりパワーが必要」「初心者から中級者までどのフェイズのエンジニアにも気づきを与えてくれる素晴らしい本」という意見が多く出ていました。

実際にScalaで開発しているエンジニアのコメントなので、これからScalaを始める方にも参考になったのではないかと思います。これからも技術を大切にする文化を活かして、有意義なコンテンツの発信をしていきます！