プログラミングするときも、マネジメントするときも、そんなに変わらない

お休み前なので、元々調べてたことを放り出して、雑文を書きます(むしろ駄文?)。

わたしはプログラミング大好きですが、だからと言っていわゆる「マネジメントの何が面白いのかわからない」という人間ではありません。そもそも出自が学生時代からバリバリプログラム書いてたぜ、という人間ではないのが大きいし、ぶっちゃけると、哲学やってる時点で世間からすれば残念ながらだいぶおかしいやつ(言いすぎ)なのでレアケースなのかな、という気持ちは最初からあります。しかもかじっていたのは分析哲学なので、プログラミングというか概念操作とかが論理とかが好きなわけですね。

そしてそういう視点から見ると、プログラミングもマネジメントも大きくは変わらないんじゃないですか?と思ってしまう。でもそう口走った直後に、自分に反論する自分も確かに喉元を迫り上がってきます。「大きくは変わらない」って便利な言葉ですけど、雑な言葉とも形容できてしまいますよね、髪の毛も豚肉もタンパク質だよね、みたいな雑さ。いやそこまでは気持ち悪くはないんですけど。

ところが会話はもう一往復していて、いやいや「本質的に変わらない」って言い換えるべきだよ、と自分Aが自分Bに再反論します。哲学では「本質的」とか口が裂けても言ってはいけないワードなわけですが、つまり、この場合に「本質」とされているのは何なのか、というのが重要なポイントです。

では、ちょっと真面目にいうと、ある概念的に構成された機能体を、人為的に作成する場合には、それらを部分に分解した上で、なるべく小さな状態にしてからそれぞれを作成して、後からそれらを統合する、という方法が使えます。分割統治という便利な言葉もあります。現時点でのシステム開発は、この分割統治が標準的な方法として取られていて、システム開発でのプロジェクトマネジメントの果たす役割も、結局はその部品に人間が混ざっただけのバリエーションに過ぎません。ただ人間が部品として、プログラミングにおけるモジュールと少し違った特性を持っているだけで、合目的的であれば、それは水彩絵の具なのか油絵具なのか、といった差でしかないのではないか、とも考えられます。

逆にいうと、プログラミングと称されていても、機械学習であるとか、深層学習であるとかは、そもそもがそういった分割統治でシステムを作成するわけではありません。例えば、深層学習であれば、「組織」を作って準備はするものの、それらが協調しながら変化していくのを見守る、といった「創り方」なわけで、途中でうまくいかないからと言ってだめな部分を故障した機械のパーツのように取り替えて対処したりするわけではありません(いや、あんまり詳しくないので、もしかするとそういう方式もあるわけではないんですけど)。とにかく、わたしがここで言いたいのは、いわゆるテキストプログラミングの手法を使っているとしても、根本的なシステムの創り方が異なっていれば、それは本質的に違うものだ、ということです。そしてそれならむしろ、人間相手に役割分担して、大きなシステムを作り上げていくほうが、従来の「テキストプログラミング」に遙かに近い活動なのではないか、ということです。

まあ、最初から他人の理解も自分の厳密さも諦めている文章になってしまいました。文字通りの駄文ですみません。WebAssemblyやSlack Botの話や、MathMLの話は追々いたします。