builderscon tokyo 2019にゲスト(=聴講者)として参加しました。以下では、まず私が参加して特に興味深かったセッションについての感想を述べた後、総括を述べます。

セッションについての感想

Ruby (off|with) the Rails

https://builderscon.io/builderscon/tokyo/2019/session/5acc1604-0f1f-493b-8025-364042db7123

Ruby on Railsを書いていてつらくなってきたときの指針についてのセッション。 内容は非常に面白く、明日から実践していこうという気持ちになった。 メタ的な感想ですが、「『問題を見極める→解法を与える」というフレームワーク」を冒頭で与えた後にそのフレームワークを使って「中規模Railsつらい問題」に対する解を提示する、というトークの構成が美しすぎて涙が出ました。俺もこういうトークをしたいしこういう文章を書きたい。

あとトークの中で言及されてて気づいたんですが、form_forでViewからDatabaseまで結合してるのよく考えたらすごいし、ちゃんと設計したいという気持ちの人がRailsをみて失禁するのは当然だと思った1

Optimizing Ruby with JIT - 最速の言語を目指して

https://builderscon.io/builderscon/tokyo/2019/session/bcb40303-90bc-4403-99c0-e175db457820

Rubyを速くする話。勢いがあって面白かった。以前「Rubyのしくみ」を読んでいたので知識が無の状態よりはトーク内容を理解できたと思う。しかし、言語処理系を含めた低レイヤーに関する知識が決定的に欠けているため、「なるほど〜!」という気持ちには正直あんまりなれなかった。精進が必要。

HyperLogLog sketchは面白い

https://builderscon.io/builderscon/tokyo/2019/session/0ce75428-0842-4ed2-9da5-880874afb381

HyperLogLog sketchという、与えられたデータのcardinalityの近似値を高速に計算するアルゴリズムについての話。一つのアルゴリズムだけで60分も何を話すんだろうと思っていたけれど、問題提起2から解法の基本的なアイディアの提示、アルゴリズムの詳細、実世界での実装例、応用アルゴリズム、得られる示唆などについてお話されていて、一つのアルゴリズムだけでこんなに話すことがあり、しかもそれがこんなに面白いのはすごいと思った。

多分世の中にはいろんな問題があって、それを解くアルゴリズムというのがこれまたたくさんあって、それを学んでいくのはとてもおもしろそうだなと思った3。正直なところ競プロはあんまりやる気にならないが、こういうアルゴリズムを勉強するのはやっていきたい(話の飛躍)。

スーパーカミオカンデの開発と運用

https://builderscon.io/builderscon/tokyo/2019/session/2c1c0bcd-960c-11e9-a530-42010af01081

スーパーカミオカンデのデータを取るシステムの話。実は大学の同期に素粒子を研究してる人がいて、その人からスーパーカミオカンデとか素粒子について話を聞いたことがあった。そのときに聞いた話だけでは理解できなかったことについて、このトークを通じて理解できたということがあり、いい体験だった。

どこの世界もインフラ屋さんは大変でしょうが、スーパーカミオカンデみたいな研究施設に関しては「SLAを設けてその範囲内では落ちることを許容する」みたいなことができないというのが特に厳しいなと思った4。例えば、「ベテルギウスという星が近々(数千年のスケール)超新星爆発するかもしれないので、その瞬間に飛んでくるニュートリノを絶対に観測したい」みたいなことを要求されたりするらしい。超新星爆発のときに飛んでくるニュートリノの量は通常時にくらべて桁違いに多いので、記録システムのネットワーク帯域とかストレージとかその他もろもろが耐えられるようにシステムを作り直す必要がある。しかし通常の観測を止めることはできず、しかも超新星爆発がいつ起こるかというのはわからない。どんな縛りプレイなんだ…

Peddle the Pedal to the Metal

https://builderscon.io/builderscon/tokyo/2019/session/366fb5b0-960c-11e9-a530-42010af01081

ソフトウェアの最適化についての話。最適化についての考え方、計測ツールの話、最適化のテクニックの話などがあり、非常に勉強になりました。この学びを使う機会に恵まれたいという気持ちと、最適化をするのは大変そうなのでやりたくないという気持ちがある。

最適化についての考え方について、「早すぎる最適化は悪」という格言がありますが、トークの冒頭でこの格言を否定していたのが印象的でした。僕の解釈では、最適化には自明でトレードオフなしに導入できるものと、何かしらのトレードオフが必要なものがあり、前者は初めから入れてしまうべきだ、ということが話されていたと思います56。 自明にやるべき最適化とも言えないような”最適化”が入ってないせいで地獄になるソフトウェアの話も聞くんで同意できるところもあるんですが、実際にどのぐらいの最適化なら自明であるかというのは自明ではないなとは思いました。つまりChuさんにとっては自明な”最適化”であっても俺にとっては自明ではないということはいくらでもあって、これは俺が泣きながらソフトウェアの勉強をするしかない。精進する必要があるし、教育をする必要がある。

Oxygen Not Included: Making a Game That Inspires Science

https://builderscon.io/tokyo/2019/session/1a239003-960c-11e9-a530-42010af01081

Oxygen Not Includedというゲームの開発の話。面白いゲームの作り方の話と、どうやったらゲームを通じて科学(というか「科学的思考」?)を教えられるかという話の合成みたいな話だった。トークの中で「理解できないものをユーザーは面白いと感じない」という話があって、ほんとうにそれという気持ちになった。ゲームルールとか、ゲームルールを超えたところにある”勝ち方”みたいなものが理解できないとゲームは面白くない7。 あと、科学的思考とはなにかという話があって、試行錯誤と観察の結果からモデルを作ってそれを現実(この場合はゲームだが)に適応するというプロセスを繰り返すというのを科学的思考というんだ、ということを言っていたと思う。この話で行くと、もう普通のゲームをやるのも科学的思考だし、科学を絡めなくても”科学的思考”を鍛えることはできるのでは?と思った8

総括

全体的に振り返って、buildersconはなかなかよい体験だった。トークも面白かったし、プロ(登壇者)にいろいろ質問ができたのも良かった。

と言っておきながらなんだが、60分のセッションは刺激的だし面白いが、それだけでは役には立たないと思った。セッションの内容をそのまま実践することには価値はなくて、体系的な知識とか現場での経験みたいなものが必要になってくる。これはトークに限らず本を読んでいてもそうで、どの分野を掘ってもそこには体系的な知というのがあって、「ここからは本腰入れて体系的に勉強しないとだめだ…」「ハウツー的な、その場しのぎの、よくある問題に対する解法だけが書いてある本を読んでも無理だ…」というタイミングが出てくるので厳しい。精進するしかない。

また、これは前の項にも関連するが、60分のセッションの内容を理解することそれ自体には意味がない。自分だけに向けられたわけでもない60分のセッションを聞いて解決するような問題は、自分の中である程度知識のあるものについてはすでに解決済みのはずだ(その問題が新しい問題で、書籍とか知見などがまだ世に出ていないというなら話は別だが)。それよりも、自分が得意でない分野とか知らない分野についての話を聞くほうが、刺激が大きいので良い。

  1. これはRailsを否定するという意図ではないです 

  2. 身近な(?)例だったので瞬時にトークに引き込まれた 

  3. でもたぶんこういう問題-解法の組があるというのは、こういうある種競プロ的な分野に限らなくて、例えば画像処理とかRDBMSとかWebとかにも多分あって、ある分野に関して問題-解法の組を網羅的に知っているというのが”専門性”なんだろうなあと思ったりした 

  4. どんなインフラも実はそうなのかもしれないが 

  5. 「ソート関数を作るときに、アルゴリズムが単純だからってバブルソートを使うやつはおらんやろ」みたいな話があった気がする 

  6. 正しく意図を説明できている自信がないので、「は?」と思った人は発表スライドをあたってください 

  7. もちろんそういうのとは違う楽しみ方をするように作られているゲームもある 

  8. 科学的思考とか科学的プロセスみたいなものがそれ単体で成立すると考える立場からは、その対象を今僕たちが存在している宇宙に限る必要はなくて、科学的思考をゲームに適用することはできるし、それも科学だよなあと思った