非同期・分散処理時代のプログラマ

最近はノンブロッキングI/Oを使ったり、分散処理に特化したミドルウェアフレームワークが珍しくなくなってきました。ハードウェアのマルチコア化もこの方向を後押ししています。

これらのソフトウェアに共通するのは、処理の流れがコード上では分断されるため単純に上から順番にソースを読んでも何をやっているか把握するのが非常に困難であるということです。例えばノンブロッキングI/Oを使った処理では入出力処理をチャンクごとにバケツリレー方式で行います。そのため、ソースコード上の一部の処理だけに着目して読み込んだだけでは全体としてどのようなことを行っているかを判断することができません。

また、ろくにコードの検証もせず、すぐにデバッガを使い始めるプログラマもいます。こういったプログラマはコードを読めないだけでなく、書くコードも大抵読みにくいことが多いです。個人的にはデバッガはソースコード上である程度仮説を立てたうえで実証を得るために使うとか、どうしても動きがわからない場合の手がかりを得るためにあたりをつけて使用するのが望ましいと思っています。

とはいえ、非同期・分散処理ではデバッガもほぼ無力化されます。あるポイントでブレークポイントで止めても他のスレッドはガンガン動き続けているし、データ自体がスレッドからスレッドへ受け渡されていくのでデバッガで処理の前後関係を追うことが困難だからです(もちろん処理の流れを完全に把握していれば適切な箇所にブレークポイントを張って動作を追うことは可能なので、無効化されるというよりは用途が限定されるといったほうが適切でしょうか)。

OSSはソースがオープンであることで、いざとなったら自分で修正したりワークアラウンドを見つけることが可能であるという点は大きなメリットになりますが、こういったミドルウェアフレームワークを利用する場合、とにかく動けばよいというスタイルで乗り切ってきたプログラマは手も足も出なくなってしまうでしょう。

このような時代だからこそ、とにかくトライ&エラーを繰り返す手が早いだけのプログラマではなく、論理的にコードを読み書きできる能力を持ったプログラマが必要なのではないかと思います。

そういった視点から考えると、例えばRuby on Railsなどのフレームワークは確かにとても簡単にWebアプリを作ることができる反面、プログラミング初心者からこういった論理的に物事を考える能力を鍛える機会を奪ってしまっているのではないかという気がしています。むしろことあるごとに「コンパイルが遅い」と言われるScalaのほうが、じっくり考えてコードを書く癖がつくという意味では教育上好ましい言語と言えるのかもしれません。

…なんちゃってw