Twitterは、彼らのEffective Scala ガイドをオープンソースにした。ドキュメントは、GitHubにあり、そのGitリポジトリURLは https://github.com/twitter/effectivescala.git. である。ドキュメントは CC-BY 3.0の下でライセンスされる。
Scalaは、Twitterで使われている主要なプログラミング言語の1つで、TwitterのインフラのほとんどがScalaで書かれている。 Effective Scalaガイドは、短いエッセイのシリーズで、Twitter内でScalaを使っていることから学んだ「ベストプラクティス」セットである。TwitterではScalaを使って、主に大容量の分散システムを作っているが、ガイドのほとんどは、他のドメインに当てはまることであろう。
このドキュメントの中核的な考えは、
- 正しく書いたら、常に読み手のことを考えてください。いつも可読性を大事にしてください。
- 一般的なコードを書いてください。しかし明快さを犠牲にしてはいけません。
- 素晴らしいパワーを提供する単純な言語フィーチャを利用しよう。しかし難解なものは避けなさい。
- Scalaでプログラムしなさい、JavaやHasKellやPythonではありません。
- 洗練された言語には、複雑な実装が必要です。複雑さが複雑さを生みます。こうして、複雑さは洗練さの代償です。いつも有用性がコストに勝ることを確認してください。
Effective Scalaの様々なトピックをここに上げる。目次からの引用である。
- 書式: 空白、ネーミング、Import、中カッコ、パターンマッチ、コメント
- 型とジェネリックス:返り値型アノテーション、変位、型エイリアス、暗黙の型変換
- コレクション:階層、利用法、スタイル、パフォーマンス、Javaのコレクション
- 並列性: Future、コレクション
- 制御構造:再帰、return, forループと内包表記、 require と assert
- 関数型プログラミング:代数データ型(ADT)としてのCaseクラス、Option、パターンマッチ、部分関数、バインディングの分解、遅延評価、名前渡し、flatMap
- オブジェクト指向プログラミング:依存性注入、trait, 可視性、構造的型付け(structural typing)
- ガーベッジコレクション
- Javaとの互換性
ガイドは読者がすでにScalaに馴染んでいることを想定している。Scalaの新人用には、Scala Schoolという書き物があり、TwitterプログラマにScalaを紹介する助けとなる、講義のシリーズである。公式のLearning Scala ページがscala-lang.orgwebサイトで利用できる。別の良い入門用としては、Learning Scala in small bitesという小さな例のシリーズがあり、それぞれがScalaの1つか2つの特徴を良く説明している。
Effective Scalaは、生きたドキュメントでTwitterにおける現在の「ベストプラクティス」を反映して、絶えず変わっていく。ユーザーは、Effective Scala issuesページで課題を発行して、ガイドの改善に役立つことができる。