デブサミ2016で「Webエンジニアのための並行/非同期プログラミングの実際とこれから」というパネルディスカッションをしました

先日のデブサミ2016でピクシブの川田さんによるモデレートでGolang(メルカリのbokkoさん) × node.js(古川会長) × Scala(わたくし)という謎の組み合わせでパネルディスカッションをさせていただきました。

event.shoeisha.jp

ユーザ層や適用領域が異なる言語ということもあり、噛み合うのか若干不安があったのですが、いい感じにまとまったのではないかと思いますw

パネルディスカッションのまとめ

総論としては

  • ハードウェアのリソースを使い切るために並行処理がますます重要になっていく
  • ただし、アプリケーションのレイヤではなるべくそれを意識させないことが重要

という当たり前といえば当たり前の話だったのではないかと思います。ECMAScript7のAsync/Awaitは記述は同期的だけどブロックはしないという意味で理想に近いかもしれません。

普通にWebアプリを書いているとスレッドすら意識しなくても書けてしまうので、アプリケーションプログラマが非同期処理や並列処理を意識したコードを書けるのかという教育的な問題は悩ましいところです。知らなくても書けるというのは確かに理想ではあるのですが、コードは簡単に書けるような技術の進化があっても、その背後で実際にどのようなことが起きているのかを押さえておくことはソフトウェアエンジニアとしては重要なことなのではないかと思います。*1

そこで、弊社では最近ある程度コードを書けるようになった若者にオレオレHTTPサーバを作ってもらうというトレーニングをしたりしています。スレッドによる並列処理や、ソケットを使ったネットワークプログラミング、ファイル処理、HTTPの仕様までおさえることができ、さらに頑張ればノンブロッキングI/Oにトライすることもできるというなかなか良い課題なのではないかと思います。実際にブラウザからのアクセスで動作した時の感動もあるようです。

また会場から「非同期処理で発生した例外をどう処理するか?」という質問をいただきました。実はこれ、登壇者で事前に打ち合わせをした際にも話題にあがったトピックでした。非同期処理の結果として戻すなり、エラー時のコールバックを用意するなどエラー情報を伝搬するための仕組みが用意されていることが多いのではないかと思いますが、例外と違って透過的に処理することが難しく、各プログラマにエラー処理を任せるとバグの温床になる可能性が高いんですよね…。

個人的には戻り値で戻すようにして型で縛ってフレームワークのレイヤまで伝搬させ、フレームワーク側で処理するのがよいのではと思いますが、仕組み的にそういうコードを強制することも難しく、やはりプログラマには相応のリテラシが必要になってしまうのではないかなぁというのが個人的な現状の印象です。

デブサミの感想

デブサミには初めて参加させていただいたのですが、当たり前といえば当たり前なのですが、コミュニティベースのイベントと比べると運営が段違いだなと感じました。良い悪いという話ではなく、単純にお金がかかっているなという印象です。CROSSなどと比べても凄いなと思いました。スピーカーへの配慮も素晴らしかったですし、個人スポンサーの方にもセッションに優先入場できたり専用のラウンジが使用できるといったメリットがあったようです。

もちろん、企業が主催かつこれだけの運営が可能なイベントに無償で参加できるということは商業イベントとして成立しているからということに他ならないわけですが、主催企業・スポンサー企業・参加者それぞれの利害が一致しているからこそデブサミが現在まで続く巨大イベントになったという点は疑う余地のないところかと思います。

話題も特定の領域ではなく、IT業界においてその時々でホットな話題を浅く広く押さえることができるので、普段あまり関わりのない分野の情報をインプットするにはちょうどよいイベントなのではないでしょうか。平日開催ということで業務時間に参加できたということもあり*2、個人的にもよいリフレッシュになりました。機会があればまた参加したいと思います。

*1:bokkoさんがグロースエンジニアと呼ばれる人たちにはこういった知識は不要だと仰られていましたが、個人的にはそういう人たちの仕事はソフトウェアプログラミングというよりエンドユーザコンピューティングに近いものであると考えています。

*2:個人的に休日のイベントだと本来は休養や個人的な活動にあてる時間を使って参加することになるのでどうしても時間的な費用対効果ということを考えてしまいます。