Scalaコースプログラムと資料

こんにちは



私の名前はGolovach Ivanです。私はScalaに切り替えた10年以上のプログラミング経験(Java EE、J2ME、C、C ++、M言語、Delphi)を持つJavaテクニカルリードプラクティショナーです。



私は、通常のプログラミングコース( Java Core + Junior Java Developer )と特別なコース(JVMのマルチコアプログラミング( 1つおよび2つ ))の両方を準備し、読みました。



現時点では、 Scalaの特別コースを開始しています。このトピックでは、最も興味深く有益な資料を共有したいと思います(コースは1年以上準備されました)。



コースプログラム

材料:「その他」

マテリアル:Scalaでのオブジェクト指向プログラミング

マテリアル:Scalaでの関数型プログラミング

材料:高級な種類

材料:パーサーコンビネーター

マテリアル:メタプログラミング/リフレクション

材料:メタプログラミング/マクロ

材料:スカラズ

材料:網

材料:アッカ

材料:フィナグル

材料:ズーキーパー

資料:金融業界でのFPの使用





コースプログラム





Scala特別コースの目的

1.マクロ、パス依存型、上位のジェネリックなどの「ダークコーナー」を含む言語を詳細に研究する。 内部および外部DSLの作成方法を学びます。 なぜ関数型プログラミング言語が金融業界でこれほど人気が​​あるのか​​を理解するため。

2.関数型プログラミング言語(特にScala)でコードを記述するときに、代数とカテゴリー理論を参照する数学ライブラリがよく使用される理由を理解します。

3.なぜ最近のスタートアップ(TwitterやLinkedInなど)がScalaでインフラストラクチャを作成するのかをご覧ください。



特別コースは2015年2月27日に始まり、2〜2.5時間の16のウェビナーで構成されます。 期間3か月(週1〜2レッスン)。 すべての講義はビデオに記録され、学生に提供されます。 必要な資料はすべて電子形式で提供されます。 私はウェビナー中とそれ以外の時間の両方で質問に答えます。 Scalaを並行して学習している他の15〜20人の学生とコミュニケーションを取る機会があります。









材料:「その他」





Scala入門記事



これらの記事は、言語の簡単な概要です(15〜20ページ)。 彼らはイデオロギー的/歴史的である可能性が高い-著者自身(Odersky)が彼の発案を見ているので、彼はそれを最も重要/独特/特徴と考えています。





Scalaスタイルガイド







主要なScalaの記事





これらの記事は、言語の基本的な特徴を明らかにし、明確にします。







Scalaコース/コレクション





小さな本の資料に到達するが、本には到達しない。 「クラシック」から。





はい、 Courser自体はScalaで書かれています。







Scalaには多数の書籍(約20冊)が市場に出回っていますが、私は次の4冊が一番好き







マテリアル:Scalaでのオブジェクト指向プログラミング









マテリアル:Scalaでの関数型プログラミング



Scalaの関数型プログラミングは、Scalazの貢献者の1人による強力な本です。





材料:高級な種類









材料:パーサーコンビネーター





Scalaには、EBNFに近い形式でScala外部DSL文法を記述するためのツールを提供するパッケージ( scala.util.parsing )が含まれています。 つまり 「外部DSL」を作成するための「内部DSL」です。



Scalaでは、パーサーはモナドとして実装されます。したがって、パーサーのコンビネーターの定義は、シーケンス、交替、またはその他の合成操作を実装するモナド変換にすぎません。



多くのサブジェクト領域で、いくつかのプリミティブ要素(この場合はパーサー)の形式でAPIを構築し、これらの要素を特定の方法で結合する方法(コンビネーター)を作成できます。 この場合、言語のコアには、外部DSLを構築するために必要なものがすべて含まれています。









マテリアル:メタプログラミング/リフレクション



マクロの特に興味深い点は、パッケージscala.reflect.apiで提供されるScalaのランタイムリフレクションにも使用される同じAPIに基づいていることです。 これにより、ランタイムリフレクションを利用するマクロと実装間で汎用コードを共有できます。



2.10まで、Scalaには独自のリフレクション機能がありませんでした。 代わりに、JavaリフレクションAPIの一部、つまり、クラスとオブジェクトを動的に検査し、そのメンバーにアクセスする機能を提供するものを使用できます。 ただし、スタンドアロンのJavaリフレクションではScala固有の要素の多くは回復できません。Javaリフレクションは、Java要素(関数、特性なし)および型(存在、高種類、パス依存、および抽象型なし)のみを公開します。 さらに、Javaリフレクションは、コンパイル時に汎用であるJava型のランタイム型情報を回復することもできません。 Scalaのジェネリック型のランタイムリフレクションに引き継がれる制限。



Scala 2.10では、新しいリフレクションライブラリが導入され、Scala固有およびジェネリック型に関するJavaのランタイムリフレクションの欠点に対処するだけでなく、Scalaに汎用リフレクション機能のより強力なツールキットも追加されました。 Scalaタイプとジェネリックの場合...







材料:メタプログラミング/マクロ



マクロの特に興味深い点は、パッケージscala.reflect.apiで提供されるScalaのランタイムリフレクションにも使用される同じAPIに基づいていることです。 これにより、ランタイムリフレクションを利用するマクロと実装間で汎用コードを共有できます。



マクロのフレーバーは、タイプセーフと豊富な構文を組み込むように適合されたLispマクロを連想させます。 悪名高いC / C ++プリプロセッサマクロとは異なり、Scalaマクロ:1)本格的なScalaで記述されている、2)生の文字列ではなく式ツリーで動作する、3)Scalaの構文を変更できない [ ここ ]



マクロは、コンパイル中にコンパイラーによって呼び出される関数です。 これらの関数内で、プログラマはコンパイラAPIにアクセスできます。 たとえば、コードを生成、分析、およびタイプチェックすることができます。 マクロの詳細については、ドキュメントをご覧ください。 [ ここ ]



Defマクロは、バージョン2.10.0以降、Scalaの実験的な機能として出荷されています 。 完全な仕様が保留されているdefマクロのサブセットは、Scalaの将来のバージョンの1つで安定するように暫定的にスケジュールされています。



実験的な機能 -また、マクロは実験的で高度な機能と見なされるため、マクロを記述するためにはマクロを有効にする必要があります。 ファイルごとにscala.language.experimental.macrosをインポートするか、コンパイルごとに-language:experimental.macros(コンパイラスイッチを提供)でインポートします。 ただし、ユーザーは何も有効にする必要はありません。マクロは通常のメソッドのように見え、コンパイラの切り替えや追加の構成なしで通常のメソッドとして使用できます。







材料:スカラズ









材料:網



Netty-メンテナンス可能な高性能プロトコルサーバーおよびクライアントを迅速に開発するための、非同期でイベント駆動型のネットワークアプリケーションフレームワーク。 Nettyはjava.netを使用するためのデファクトスタンダードです*、NIOおよびNIO.2(AkkaとFinagleはNettyを使用し、ZookeeperはNIO / NIO.2の「内部」で直接使用されます)。 Reactor / Proactor / Asynchronous Completion Token / Acceptor-Connector非同期メッセージ処理テンプレートを直接実装することはできますが、これには多くのテンプレートコードが含まれ、サブジェクト領域の機能がわかりにくくなります。 Nettyの利点は、宣言型コードと、ライブラリがプロトコルコンストラクター(http、ftp、smtp、websockets、...)であるという事実の両方です。









材料:アッカ



Akkaは、JVMのマルチスレッドおよび分散アクタベースアーキテクチャの事実上の標準フレームワークです。 Scalaバージョン2.10.0から、Akkaはアクターのネイティブ実装に取って代わりました







材料:フィナグル



Finagle-高並行性サーバーの構築に使用される、JVM用のプロトコルに依存しない拡張可能なRPCシステム。 twitter.comで作成および使用。 基本原則は「ローカルでプログラミングし、グローバルに通信する必要がある」です。 Twitterスタックの一部(ダチョウ、Zipkin、Mesos、Iago、ZooKeeper、Scaldingとともに)。 Finagleには、負荷分散、接続プーリング、タイムアウト付きの呼び出し、監視、統計収集が含まれます。







材料:ズーキーパー



Zookeeperは、構成情報、ネーミング、分散同期、およびTwitterスタックの一部である他のグループサービスを管理するためのフェイルセーフの集中型サービスです。 キュー、ロック、バリアなどの基本的なデータ構造(クラスター)を作成するために使用できます。 2フェーズコミット、リーダー選出などの分散アルゴリズムに適しています。







資料:金融業界でのFPの使用





多くの理由(コンビネーターの言語で主題分野を記述する能力)のために、彼らは金融業界で関数型プログラミング言語を使用することを好み、それはニューヨークとロンドンで「関数型」の需要を生み出します。







PSご質問にお答えします

スカイプ:GolovachCourses

メール:GolovachCourses@gmail.com



All Articles