プログラミングが退屈だ

Posted on June 6, 2015

最近、プログラミングが退屈に感じる。もはやルーチンと言っても差し支えないとまで思うこともある。プログラミングというと一般的には創造的な活動だと思われているが、実際のところその大部分は定型的な作業であり、多少頭を使うというだけである。

諸説あるだろうが、自分にとってプログラミングとはコンピュータ上で仮説を実証する作業なのだ。プログラミングを学び始めたころは、実証作業だけで十分に刺激的だったし、それによって新たな仮説を生み出すこともできた。しかし、最近は実装作業による学びがほとんどなく、いまいち楽しみを見出せない。逆に言えば、仮説を考える楽しさの純度が増したとも言える。でも実証のない仮説は説得力に欠けるし、そもそも仮説と実証をそんなに簡単に分業できるかという話もある。そういうわけでできればプログラミングをもっと楽しみたい。

ところで、プログラミングにはどうしても退屈にならざるを得ない傾向があるようだ。よく言われるのは、プログラミングの大部分はソフトウェアの保守に割かれるという話である。では新規開発なら退屈でないのかと言えばそうでもない。ある機能なり製品を開発するには、さまざまな問題を解決しなくてはならないが、経済や淘汰が適切に機能していれば、多くの(有意義で面白い)問題がすでに解かれており、プログラミングと言えば単にそれらを結合したり瑣末な実装をするといった定型的でありきたりな作業を指すようになるのである。いわば知的雑務なのだ。

とはいえ定型的な作業がまったくもって楽しくないということはないと思う。ただその楽しみが感じにくいだけである。問題なのは、プログラミングにともなう面倒な作業がそれを上まわることではないだろうか。面倒なことを挙げれば切りがないが、例えば変数名を考えたり、データ構造を考えたり、モジュールの依存関係を考えたり、もっと言えばファイル名を決めることすら、はっきり言って面倒だ。

チューリングマシンやラムダ計算といった計算モデルは知的雑務によく適していると言えるだろう。雑務である以上、多種多様な作業をこなせる必要がある。そのためできるだけ原始的な演算で閉じていると都合がいい。こういった低レベルな計算モデルにおいては、理論を積み上げることでどこまで到達できるかが主な研究テーマになるのだが、よく考えればその計算モデルを採用する必然性はない。それどころか、それが本当に効率的で現実に即しているかを疑ってみるべきだ。例えばもっと大胆な仮説を設定することもできるはずだ。もちろんこういった試みの大半は失敗に終わる。でもやってみないことには成功しないし、そもそも他人の思想の上で踊らされるのがいやだ。

話を戻すと、プログラミングを楽しくする当てが実はすでにある。といっても私がすべて考えたわけではないが。詳しい話はここではしないがポイントは以下である。

どのような形になるか分からないが、イメージを伝えるとこうなる。まず、プログラムの状態やデータは木構造ではなくグラフ構造で表現される。さらに、状態は常に一貫する。つまり、状態の関係式さえ書いておけば適切に更新が行なわれる。また、性能に関する関心は分離される。その他、式の表現力が高い点も挙げられる。

うまく実現できれば、このモデルは多くの問題を解決するし、プログラミングがもっと楽しくなるに違いない。