Scala Matsuri 2016に参加した感想と転職活動と

本記事は完全に個人の感想です。

詳細については既に多くの人が書いており、私がこれから書くことなんぞよりはよっぽどためになります。スライドも発表風景も後日公開されるらしい(すでに公開されている?)です。そういうのを見れば雰囲気は分かると思います。雰囲気や内容を知りたければそちらを調べるのをお勧めします。

もう一度念押しして書いておきますが、本記事は完全に個人の感想で、普段から当ブログを見てくれている人を読者として想定した記事です。

英語について

前回(2014)は参加していないので引き続きこういうスタイルなのかどうか分からないのだけど、かなり英語を意識したカンファレンスになっていた。日本語による発表でもスライドは英語になっている。

参加者も英語を意識しているのか、seraさんの「アジアからScala OSSに貢献するということ」は会場が満員で全員入りきらなかったとの事(私は幸い、前方の見やすい位置に座ることが出来た)。本発表の内容は技術的なことは一切なく、日本でのScala人気や、日本人と英語の壁、いかにグローバルで自分の書いたものが使われると言う事が重要かという感じの話をしていた。全く持って仰るとおりであるが、エンリコ・フェルミ(たしか)なんかは「英語で論文書かなくても俺の論文は素晴らしいから誰かが英訳してくれるもーん」と母国語(イタリア語)で論文を書いていたというエピソードがあるから、カリッカリに極めれば英語なんてできなくてもどうにかなるかもしれないなんて思ったりする。いや、自分はそこまでは無理だけど。

そういえば、同時通訳のレシーバ(通訳された音声は会場で配布されるレシーバに接続された耳かけ式ヘッドフォンから聞こえる)を付けている人も少数派であった。ただ、ちょっとこれは不満点なのだけど、レシーバの音漏れが激しく近くぶ聞いている人が居るとうるさくて発表に集中できなかった(英語である発表だと余計に)。どんな人も大体うるさかったので、特定の人がボリューム上げすぎという問題ではないと思う。

この点はアンケートにも書いておいた。ただ、会場設備を借りてるだけかもしれないし、あんまり主催者側には関係ない話なのかもしれん。

発表について

「Refactoring in Scala」ではtype aliasやtagged type,value class,phantom types, Iso / Prismなどを使ったリファクタリング方法について解説。そこまで難しい内容ではないが、実際使うとなると型合わせゲームHARDプレイ、みたいになるような感じがするので個人的にはあまり積極的にはやりたくない。

という意見もありますので、私はそのようにしたいと思います。case classを基本的に使い、パフォーマンスが必要なときはvalue classを使う、とか。自分が業務でやっているシステムだと、9割以上case classで事足りそうな気がする。

「Scalaで始めるDeep Learning」は個人的に機械学習にハマっているので期待した。が、機械学習のコアな話があるわけでもなく、DeepLearning4Jの詳しい話があるわけでもなく、Scalaもあまり関係ないので正直なところターゲットが何処なのか良くわからなかった。個人的には、DeepLearning4JがPython関係のライブラリ(ChainerとかTensorflowとか)と比べてどうなのかというのがしれれば良かったのだが、DL4J自体の話もあんまり無かったので良くわからなかった。

「そんなもん、グダグダ言う前に自分でサンプルコードの一つでも眺めれば分かるだろ」って言われそうだが、DL4Jのサンプルソースは動かなかったり動いても学習が収束しなかったりするものが多く、そもそもインストールして動くようになるまでが一苦労なので自分で見てみることすら面倒なんだよね〜。

ただ、ND4Jの設計思想がnumpyベースというという事はわかって良かった。デファクトスタンダード(?)に合わせてくれるのは嬉しい。

yokotaさんの「猫という考え方(Thinking in Cats)」が個人的には一番面白かった。Cats自体を説明するというよりかは、Catsの設計思想とその周辺の話が中心で関数型バリバリという感じではなかったように思う。

私が心から同意したのは、「我々が良く忘れがちなのは、プログラマの仕事というのは問題のドメインをモデル化してコンピュータが扱える形にしてあげること」という言(厳密にこのような言葉じゃなかったかも)。

「みんなの関数型プログラミング(Functional Programming For All)」はタイトルの通り優しい内容。副作用とは何か、関数型プログラミングとはそもそも何か、参照透過性や純粋関数とは何か、とかそういう内容だった。FPinScalaの最初の章、みたいな感じ。モナドとか知らなくても、関数型プログラミングは重要だよ、みたいな意図を感じた。

というか、全般を通して関数型に寄ったカンファレンスだったように思うのだけど、その中でもさらに「モナドだけが関数型じゃないよ」みたいな話があったり、「モナドっていうと構えちゃうけどそんな難しい概念じゃないよ、for式使うための仕組みと思えばいいよ」という話があったり、なんというか、う~ん。まあどれも同意するのだけど、モヤモヤした感じ。うまく説明できない。

言語とはツールだ

yokotaさんの発表にあったように、現実の問題を計算機で解ける形、すなわち数学の問題の形にしてあげるのがプログラマの仕事であって、関数型だのオブジェクト指向だのはその方法だと私は思う。関数型も、オブジェクト指向も、現実の問題をうまくモデル化できるが、互いに得意とする分野がほんの少し違っていて、我々はそれを柔軟に切り替えて使えばよい。そのために有用な道具がScalaであったり、Catsであったりする。

なんというか、私の中では問題を解決するためのツールとしてプログラミング言語があるのであって、特に業務にフォーカスすれば、ビジネスを回すためのツールとしてプログラミング言語やライブラリ、設計思想があるのであって、道具にフォーカスしてビジネスを忘れるのはアカンよな…という気持ちがある(誤解のないように言っておくと、yokotaさんはそういう意図で言ったのではない。あくまでも私が思ったこと)。

仕事をするうえで技術に詳しければビジネスに疎くてもいいという発想は個人的には同意しがたい。むちゃくちゃずば抜けて技術が出来る人ならばそれが許されると思うけど、そういうひとはごく少数だ。

同じようにして、テクノロジーオリエンテッドカンパニーみたいなうたい文句も最近は嫌気がさしてきた。新しい技術が新しいビジネスを創出することはあるかもしれないけれども、本当に技術しかない所からビジネスは生まれないと思う。多少のアイディアやエッセンスがビジネスの創出には必要で、そのアイディアみたいなものは出来上がってから見ると「何だそんなことか」という単純なものであることがほとんどだが、それを生み出すには技術だけでなくてリベラルアーツみたいな考え方が必要というか、もうちょっとゼネラリスト的視点が無いと難しいと思う。

身の回りを改めてみてみると、MineCraftが登場するまで誰もJavaアプレットでまともなゲームが作れるなんて思っても居なかった(正確には作れるかもしれないけど作ろうとしなかった)だろうし、スマホアプリで儲けているアプリが必ずしもKotlinやScalaやSwiftで素晴らしいソフトウェア設計によって担保されて動作しているわけでもない。数多の魅力的なWebサービスがphpベースで動いている。良い道具(良いというのも主観的だが)が無ければ良いものが生まれない、というのは少なくともソフトの分野では当てはまらない。

で、上記のようなことは多分皆重々承知で、それを踏まえたうえで2日間はScalaというテーマにフォーカスして皆で祭りを楽しみましょう、という事なのだと思う。というか、そんなめんどくせえ事を考えているのは多分参加者の中で私一人であって、皆は純粋にScalaが好きなのだろう。別にビジネスがプログラミング言語のすべてでもないし。

結局私がScalaMatsuriを精一杯楽しめなかった原因は、私がこのタイミングでScala言語で仕事がしたいと転職活動をしており、妙な色眼鏡をかけてしまっているからだ。つまり自分が悪い。冒頭に「本記事は完全に個人の感想で、他にいかなる意味を持ちません」と書いてありますのは、そういう理由です。そういう事ばかり考えていたらなんだか疲れてしまった。

Scala Matsuri自体はとても有益で、行ってよかったと思います。主催者やボランティアの方々にも、このような会に出席できるチャンスを作って下さり、感謝いたします。

転職活動に関しては、Scalaにこだわる理由も別に無いな(Scalaで開発できればそれが一番いいけど)、とも強く思っている。ここ半年くらいは妙にScalaに傾倒しすぎていたという反省。そこらへんが転職活動に影響している。まだ転職活動中なのでこのあたりの気持ちは後で詳しく書く。

あと、最近論文や書籍をあんまり読んでいなかった(せいぜいFPinScalaとコップ本、あとはMonadに関する2〜3の論文くらい)ので、タブレットを買って空いた時間で本や論文をたくさん読んでいきたいと思う。

早速、Nexus 7(2013)の中古をソフマップで買い、深層学習の青い本を買って読んでる。リフロー対応本だと思ったらただの画像でムカつく。