数学者ではなくソフトウェアエンジニアを選んで - あるいはLaughterの話

339s
·
公開:2025/7/5

私は仕事を選ぶ時、数学とシステム開発と教育の3択からシステム開発を選んだ。その時思っていた事が、大きく二つぐらいある。一つは、本気で生きたい、自分の得意な事を全力でやっておきたい、ということ。もう一つは、積み上げるような仕事をしたい、ということ。

研究はできそうだったが、しかし自分の特に興味のある対象というのが何かよくわからなかったし、五角数定理で級数で書ける事の面白さ、qを使った謎の級数たちに全く面白さを見出せなかった私は、すごく強く惹かれる数学的対象というものがそんなになかった。ポッチャマーってポケモンみたいな名前だな、と思うぐらい。いや、本当はポッホハマーだ。分配法則は最終的にとんでもなく面白かったし、テンソル積やそこからの任意の射影、というかテンソル積が普遍性を持つ事なども面白く、そのような意味での代数は面白かったし、そうした形が不明なものを一つずつ理屈で触っていって、結果としてホモロジー代数のようなものが出てきたり、というのは今では世界の触れ方としてわかるのだが、まあしかし根本的な面白さがあまりよくわからない事が多かった。ジョーンズ多項式やマクドナルド多項式の面白さは今でも私にはわからない。鏡映群やワイル群の構造、あるいは様々な対象における双対の概念は面白かったし、アルティン環の表現の構造を射影や入射などで整理するのも面白いと思ったが。ただ、そのような対象に死ぬほど齧り付くのか?と思った時に、私自身は別に研究でなくてよいと思い、数学の道はなくなった。もし研究したくなったら趣味とか中年になってからでいいかな、と思ったのもある。学部の時にセミナーの先生に相談した時に、人と数学のふれあいは色々で、副社長をしながら論文を書いている人も、家業を継ぐと決まっていて博士に進んだ人も、いろんな人がいると聞いて、それは人生を考えるうえで大いに参考になった。あの会話がなかったら、今の自分はないだろう。

教育はどうか。当時の私は、いわゆるできない子に全く教えられなかったので、教育者になるべきではないだろうというのもあった。どうすれば良いのか全くわからなかったので、まあどうにもならないかな、とは思った。

システム開発、というかプログラミングは、私はそれ自体の"すごい才能"があるとは思っていなかったが、まあそれなりには触っていたし、作業としては得意な方ではあったので、これで良いかなと思った。直接人に喜んでもらえることもある。最終的な決め手は、人に喜んでもらえる事だったと思う。こんなに人とコミュニケーションが必要だとは思っていなかったが、幸い、仕事でのコミュニケーションはそこまで苦手ではなかった。

数学の研究では、私はほとんど積み上げる事ができなかった。理解ができなかった、勉強ができなかったという訳ではないが、例えば過去の実績にきちんと今が上乗せされている、というのを強く実感できるような状態には全く無かった。浅い知識を積んでいるというのか。それで、次に仕事として選ぶことについては、きちんと自分の仕事というものを積み上げていきたい、未来の自分が振り返って過去の仕事として通用する説明ができるものにしたい、と思っていた。

研究とソフトウェアエンジニアの仕事がどう違ったか。これは全てのソフトウェアエンジニアについての話ではないが、ソフトウェアは研究よりも積み上げの効果が大きいと思っている。個人のレベルでのレバレッジが非常に大きいからだ。

研究は、当然だが、進む事によって次に触れる対象が増えるのだが、そのことで自分自身が単位時間に生み出し得る知見そのものの量は根本的には増えない。研究者の評価基準は必ずしも論文の本数やインパクトファクターであるべきではないという前提の上で、それでも単位時間あたりにどれだけの知を生産したかが研究者の価値とされがちだろう。深い知識がないとできない事は沢山あり、また熟練という意味での速度の向上もあって、その意味でレバレッジ的な効果はあるのだが、しかし評価はレバレッジというよりは生産量ベースという事になり、それが根本的に増えるということはない。(と私は思っている。例えばある人が熟練しても、博士を取った時の10倍のペースで論文を書くことは普通はない、というような意味で。)

ソフトウェアエンジニアも、時間給の構造で仕事をするならば、そうである。コードの生産量、あるいは品質が基準になってくる。そしてコードを書く量は増えない。ものすごく難しいコードは別で、ゼロだったものが知見によって書けるようになったりするし、いつもゼロに近い進捗の人がコツを掴むという場合はあるだろうが、普通のコードを書くという行為は基本的には作業であって、その速度が劇的に変わるということはない。しかし、コードを資産として所有する状況を考えると、ソフトウェアエンジニアは時間給の構造で戦うべきではないのだ。ソフトウェアエンジニアが生み出す価値は、もっとレバレッジの効くものである。いや、実際には研究の仕事も、普遍的な方法や他の人が生み出す価値のレバーにはなっているはずなのだ。しかし、その結果を当人だけが保有するということではないし、生じるレバレッジを評価するのも難しく、普通はピアレビューなどでその人の仕事を直接的に評価するしかない。そうすると、生きているうちに価値がわからない事だってたくさんあるのだ。ガロアは、生きているうちに、群論がそれ自体独立した対象として深く研究されて化学に応用されることを想定はしていなかっただろう。自分の研究が具体的にここでこう成果を生み出す、といった事をいうのは、特に純粋数学のような学問にあっては非常に難しい。自分の研究が直接的に世の中の役に立つと思っていない数学者も少なくないだろう。研究費の為に価値を示す申請が必要であっても。

ところが、ソフトウェアエンジニアの仕事の評価は必ずしもピアレビューだけではない。つまり、本質的に"成果"にどのような影響を与えたか、ということをもっと実直に考えることができる。例えば売上への影響だが、それに限ったことではない。本来のソフトウェアの価値は、売上の対価として実際に提供する"価値"そのものであり、またそれによって生じる物理的・経済的な動きの全てである。これは知的生産においても稀有な性質である。数学も教育も、その結果がすぐ直ちに効果を生むとは限らない。ソフトウェアエンジニアリングは、それらと比べれば比較的すぐに人間が得られる成果があり、かつ成果を所有することすらできて、一方でその成果が蓄積してさらに成果を生む、レバレッジの効くような構造がある。音楽家の演奏は、記録もできるが、しかし本質的にはワンタイムのことだ。本人が熟練して生み出せる価値が向上したとしても、既存の音源が成長して大きな価値を生み出すという構造はない。スポーツ競技もそうだ。記録は残るが、しかし記録が将来にわたって何かを生み出すわけではない。もちろん元気づけられる人はいるかもしれないが、記録を伸ばすのはあくまでも本人だ。

少し比較対象を変えよう。工場建設には、ここで述べているような永続的な作用はあるが、しかしすぐに出来上がるようなものではない。コピーもすぐにはできない。ソフトウェアはコピーができる。環境構築手順も、スクリプトになっていればコピーできる。運用環境も含めればコストが必要であるにしても、ソフトウェアとしてはコピーがいくらでもできる。

こうしたことが、ソフトウェアエンジニアリングの唯一無二の特性なのだ。他より偉いとか、そういうことではない。熟練した技能の一つとしての価値は他と変わらないが、特性として、レバレッジが本質的によく効くのだ。かつ、この特性は一般的なWebアプリ開発スクールを卒業してから1年で実感し得るような特性なのだ。私はこのレバレッジが効く構造を本当に実感できるまで働いて10年かかったと思うが、これこそが、例えばインターンで実感させられれば良かったことだった。それは8年前には叶わなかったが、今ではようやく教育できるようになった。うまく作ればレバレッジが効いて、うまく作れなければレバレッジが効かない。どう選択してレバレッジを生み出すか。それがソフトウェアエンジニアリングなのだ。

これは、15年前に決めた人生に対する勝利だと思う。積み重ねる仕事ができるようになって、それがレバレッジ構造も持っていて、コピーや単純なタスク消化最適化ゲームとしてはワークして、でもそのゲームでは教育ができなかったが、教育や学習の構造を少しずつ理解して、そうして自分が10年かかったことについて、確かにこれと思えること(のいくつか)をたかだか一年で教えられるようになった。方法が完成されたというようなことでは決してない、誰でも教えられるということでも決してない、決してないが、しかしこれは勝利なのだ。

これは、自分自身に勝利を告げるための歌。ケージを壊して15年、まあなんとかなった。

@339s
あるソフトウェアエンジニアの考え