Programming Scalaを読もうぜ(1)
どうも、鹿島和郎(かしまかずお)です。昔、「BANDやろうぜ」って雑誌ありましたよね(いまもあるのかもしれませんが)。今回のタイトルはそんなノリで元気よく読んでいただければ幸いです。
■熟練職人になろうぜ
○本を読もうぜ
ちょっと前にTwitter上で(少しだけ)話題になっていた「アプレンティスシップパターン」という本を先日読みました。何にでも影響を受けやすいわたしとしては、次の日から早速「熟練職人になるぞ!」という誓いを立てました。
本の内容についてはいろんな人が書評や感想などを書いているので、ここでは詳しく説明しません。ざっくりいうと「ソフトウェア開発者見習い」(アプレンティス、apprentice)がどうやって技術を伸ばしていくかについての実践的なパターンが紹介されています。
わたしは職歴としては、そこそこの年数があるためか、正直いって最近は技術的な勉強を怠りがちでした。でも、この本で目から鱗が落ちた部分もあります。最近はまた学ぶ意欲を取り戻すとともに、本書に紹介されているパターンをできるだけ実践するように心がけています。
さて、そんなわたしが今回実践しようとしてるのは以下のようなパターンです。
- 学びを共有する(Share What You Learn)
- 無知をさらけ出す(Expose Your Ignorance)
- 白帯(The White Belt)
- 学びを記録する(Record What You Learn)
- 気の合った者同士(Kindred Spirits)
○新しい言語を勉強しようぜ
いままでいろいろな言語を使ってきました。しかし、ここ最近はあまり新しい言語を勉強しておらず、何か新しいのを覚えようと思い立ちました。
そういえば、最先端のギーク達の間では(?)関数型言語なるものがちょっと話題になっているそうです。その噂を小耳に挟み、関数型言語が何なのかもよく分からないまま、「関数型言語を1つ覚えよう」と決めました。
Wikipediaの関数型言語のエントリを見ると簡単な説明があり、
- 「純粋」と「非純粋」という概念での区分
- 「静的」と「動的」型付けによる区分(それに加えて「型なし」というのもあるらしいです)
で、主要な関数型言語が分類されていました。
LISPは当然、Haskell、F#などの名前は聞いたことがありました。しかしそれらの言語の特徴はまったく分かりません。それでも、取りあえず1つを選ばなければいけませんでした。
まずは先ほどのWikipediaでの区分ですが、「純粋」と「非純粋」に関しては、素人の自分にとっては純粋性にこだわる意味がその時点ではよく分からなかったので(というかいまでも分かってません)、この区分により候補を振り分けることはしませんでした。
「静的」と「動的」に関しても、両方のタイプの言語を使ったことがあるので、正直どちらでもいいと思ってしまいました。
要するに、Wikipediaのエントリは、「どの関数型言語を学ぶべきか?」 というわたしの疑問にはまったく答えてくれないことが分かりました。
ただ、自分の中では
「せっかく勉強するなら、何かに使いたい」
という思いがありましたので、実用性を判断基準として、言語を1つ選ぶことにしました。
その後、さらに1時間くらいネットを検索した結果、
- Twitterでも使われてる
- JVM上で動き、Javaの過去の資産が生かせる(※)
- LiftなるWebフレームワークがあるらしい
という3つの理由により、Scalaを選ぶことにしました。
※CLR上(.NET)でも動きます。
■Scalaやろうぜ
○コミュニティ探そうぜ
さて、Scalaを勉強する事は決定しました。「アプレンティスシップパターン」(長いので、以降「アプパタ」と略します)によると、ローカルのコミュニティに参加すべしとあるのですが、極度の出不精なわたしはいままでそういったコミュニティ活動などには参加したことがありません。
しかしそのままでは永遠に見習いのままです。意を決してIT勉強会カレンダーでScalaの勉強会がないかを探してみることにしました。その結果、Scalaの勉強会はいくつか見つかりました。が……なぜか東京近辺のみ開催予定がありません。むー。
PCの前で涙を流し続けること1時間、仕方ないので取りあえず独学で勉強することにしました。
○Programming Scalaが無料で公開されてる!……ぜ
さて、徐々に本題に近づいてきました。もう少しお付き合いください。
これもしばらく前に少し話題になっていましたが、O'Reillyが古い書籍のオンライン版を無料で公開するようになったようです。話自体は聞いていて知っていたのですが、特に詳しく調べてみました。Scalaを勉強しようと思っていろいろネットを調べていたらO'Reillyの「Programming Scala」が無料で公開されていることを発見しました。感激です。大昔のバーモントカレーのCMが頭に浮かんだのはわたしだけではないはずでしょう。
「取りあえず積ん読」派の自分としては、独学で勉強すると決めてからすぐにAmazonで「Scalaプログラミング入門」という本を買ったんですが、先に知っていれば……。
さて、オンライン版の「Programming Scala」ですが、当然、英語版です。無料でこんな素晴らしいリソースがあるのに、英語というだけで気後れしている人も多いのではないかと思います。
○読書会やろうぜ
ここでひらめきました。
「『アプパタ』ではコミュニティがなければ自分で作れって書いてあったし、東京でProgramming Scalaの読書会をやろう」
われながら、いいアイデアのように思えてきました。とはいえ、IT業界に(限りませんが)友達が少ないので、取りあえず1人で勝手に始めて興味がある人がいたら参加してもらう、という形を取ることにしました。
だからといって、1人で貸し会議室とか借りて読書会をやっても危ない人に思われる可能性がありますし、そもそもお金がもったいないです。
そこでまた少し考えて、Ustreamでやろうと思いつきました。以前どっかの勉強会がオンライン配信してたのですが、それが面白かったのを思い出しましたので。いいところは何でも取り入れるのが日本人のいいところだと思いますし、わたしのポリシーでもあります。
内容は以下の通りです。
「Programming Scala英語版を読んで、Scalaを勉強しつつ、文中の英語の解説をする」
■試行 → 本稼働……やろうぜ
わたしはあまりコミュニケーション能力は高くないのですが、(自分1人でできることに関して)行動力だけはある方なので、Ustream配信の練習も兼ねて早速第1回を実行してみました。
デスクトップ配信のセットアップ自体に結構戸惑ったのですが、1~2時間格闘した後に何とか配信開始。
で、結果ですが……誰も見てくれません。まぁ、そうですよね。皆さん忙しいでしょうし、30代のおっさんが英語のテキストをボソボソ読みながらたまに日本語でブツブツいったりしてるだけですし。
でも、「ちゃんと配信できてるよー」とチェックしてくれた人たちもいらっしゃって、大昔のバーモントカレーのCMが頭に……。しつこいですね。チェックしてくださった方、どうもありがとうございました。
さて、第1回は完全な失敗でしたが、ここでめげていても仕方ないので、第2回を実行予定です。今度は事前準備(&事前周知!) をしっかりやって、資料とかも用意しようと思います。
今後の流れとしてはこんな感じにしようと思います。
- 事前にテキストを読む(いまのところ、自分1人だけ)
- 資料作成してネットで公開(いまのところ、自分1人だけ……)
- 読書会=Ustreamで発表(いまのところ、自分1人だけ……)
- 読書会の内容をまとめてコラムにする(今のところ(ry)
誰か時間のある・興味のある人、参加者絶賛大募集中です。Twitterで@kaigaiengineerまで声かけてください。告知とかもTwitterでつぶやきます。Ustreamはこちらです。
あるいは、すでに東京近郊でひっそりScala勉強会とかしてる人達がいたら、参加させてください。雑用は何でもやりますので。ぞうきんがけも、打ち上げのための居酒屋の予約も得意です。
なお、日本語でのScalaの情報として、@ITのライバルサイト(?)であるITproに素晴らしい連載記事がありますので、なるべく内容がかぶらないようにしたいと思います。
長くなってきましたので、今回はこの辺で終わろうと思います。次回は1人読書会の報告ができればいいなと思ってます。i18nシリーズの続きは気が向いたら書きます……
それでは、また。