なぜソフトウェアエンジニアの私が哲学をやるのか

 なぜなのか。それは、哲学が役に立つから。ちょっとわけがわからないと思うので、順を追って説明します。

 ソフトウェアエンジニアは何をしているのでしょうか。まずはこの問いからです。ソフトウェアエンジニアは、計算機科学、つまりソフトウェアの設計と実装そして運用の技術で仕事をします。主な用途は自動化されスケールするシステムの構築です。ではこのシステム、ソフトウェアエンジニアがつくるシステムは何のためのものなのか。たいていは実社会の問題を解決するために作られます。会計システムであれば、会計の効率化、自動で計算や仕分けをしてくれたり、ですよね。ソフトウェアエンジニアは実社会の問題をソフトウェアによる自動化の力を借りて解決します。ここまでは簡単ですね。

 それでは、彼らは何を作っているのかみていきましょう。実社会の問題を解決するシステムとは何なのか。これは具体化するときりがないものですが、いくつかの特徴があります。まずは定型的な処理であること。つまり、ルールが決まっている性質のことです。税の計算や商品の購入のルールは短期的には一定ですよね。つぎに、たくさん行われる処理であること。税金の計算も買い物もたくさん行われますね。繰り返し行われる業務を自動化すると人間はほかのことをできてめでたいですね。柔軟性が要求されないものから自動化されてゆき、効率的になってゆきます。

 さて、ルールが決まっていてたくさん行われる処理、これは何なのでしょうか。計算機誕生以降にできたものなのでしょうか? 違いますね。計算機が誕生する前からあったはずです。その頃は人間が計算して、処理していました。つまり、当時はシステムを人間が運用していたといえます。ソフトウェアエンジニアは社会のシステムを実装して自動化しているだけです。

 余談ですが、この自動化が資本主義と組み合わさると莫大な利益をもたらします。商売をするにあたり、利益はどうやって決まるのでしょうか。単純化すると利益率と売った数のかけ算ですね。利益率を上げるのは人件費などの難しい問題と限界がありますが、販売数は数十億人オーダーまでスケールする余地があります。つまり、どれだけスケールするかによっても利益の量が左右されます。コンピュータ誕生以前は、人間が商売のシステムを運用していました。ところが、このシステムが自動化されたことにより、スケーラビリティが桁違いに伸びたのです。これがサーバー屋さんでスケーラビリティが重視される理由です。根源的に、データベースでスケーラビリティが律速しやすいのですが、その限界は人間が運用するよりはよっぽど大きいのです。GAFAMが注目され、実際に莫大な利益を生み出しているのは、億オーダーまでスケールするシステムを構築したからですね。

 脱線しました。つまりですね、ソフトウェアで自動化されようとされまいと、システムはあるのです。会社にも役所にもシステムはありますし、法律だってシステムです。システムとは何なのか説明するのを忘れていました。これはルールの集合です。ここでは、実社会に適用されるルールを指しています。システムは数千年前にだってあります。租税制度は古代からありますね? 人間が運用するシステムであれば、それは社会がある限り存在してきました。これを自動化することに、ソフトウェアの価値があるのです。

 ソフトウェアエンジニアとして賃金が得られているということは、何らかの必要とされるシステムを自動化していることになります。これは疑いようがありません。ですが、このシステムはソフトウェアがあろうとなかろうと存在します。システムの仕様、ルールそのものは計算機の外の世界にあります。なので、ソフトウェアエンジニアが計算機科学および仲間内の知識に閉じこもっている限りは避けがたく仕様に襲われます。仕様変更にも苦しめられます。

 だから、計算機の外の、実社会のことを知らなければよいシステムは実装できません。社会のことを知らないばかりにまずい設計をして、仕様変更も増えます。仕様を決める人がそこを説明しろやという話もありますが、これはおのおのの現場における政治の問題でもあるのでおいておきます。ソフトウェアエンジニア「も」社会を理解しておくことで、給与交渉としましょう。そして、実社会は人間と慣習の集合でできています。慣習は法学、政治学社会学などによって研究されています。人間そのものは哲学や人類学が研究をしています。

 今までにないシステムを作っているという意見もあるでしょう。ですが、この新しいシステムも実社会プラットフォームのうえで動いています。実社会プラットフォームは自然プラットフォームおよび人間たちプラットフォームのうえで動いています。Appleのプラットフォームで稼ぐものはiOS更新のしきたりに従わなければなりませんね? 同様に、どんなシステムを構築してもそれは基盤側に左右されてしまいます。ですので、実社会および人間の理解は役に立ちます。自然プラットフォームもございますので、科学の基礎的な勉強も当然有用でしょう。

 脱線はじまり。これは私の経験則ですが、学習という投資では基本的な知識ほどリスクが低い特徴があります。古いものほど役に立つといってもよいですね。多くの人は新しいものに飛びつきますが、新しいものほどリスクは高く、たくさんの新しいもののうちどれが残っていくのかは誰にもわかりません。未来予知できた人はすごいですね。今後も未来予知にかけるのもありでしょう。ですが、古いのに今でも残っているものは社会変化に耐える安定性を持っています。破壊的イノベーションで、古いものが倒されることを指摘する人もいるでしょう。ところが、破壊的イノベーションは古い知識が倒されたのではなく、古い知識から脱することのできなかった人間たちが倒されただけです。イノベーションの文脈でなくとも、柔軟性がないものは淘汰されてゆきます。脱線おわり。

 実社会の人間と慣習を研究する学問は人文科学だとか社会科学と言われます。人文科学の部分集合が社会科学だとか読んだことありますが、ジャンルの名前はどうでもいいです。重要なのは、社会の慣習と人間を知ることです。題では哲学をあげましたが、じっさいには社会学や法学をやるのもよいでしょう。私もいろいろ手を出しています。ただ、その中でも哲学は格別です。古典として残っている哲学書は思考が深くて、考えれば考えるほど発見がありますし、前提から疑いつづけ判断を留保する態度を得るのも有用です。前提や自明性を疑う態度は、デバッグやサーバー障害で役に立ちます。おもしろいことに哲学の内容は抜きにしても、思考様式が非常に実用的です。そもそもソフトウェアエンジニアの皆さんはプログラミング「言語」を操りますが、言語って何かわかっていますか? なぜ変数の名前にこだわるのが重要なのですか? 私にはまだまだわからないことだらけです。答えられません。ですが、人間と言語について勉強すると答えに近づけるのは間違いないです。

 疲れてきたのでまとめます。ここまで読んだ人はお疲れ様でした。いいたいことは、「ソフトウェアエンジニアとしてお給料をもらっている人は、実社会のシステムを実装しているはずなので、社会の勉強にも投資するとスーパーエンジニアになれるよ」です。なれるかは知りません。ですが、よい設計ができるようになります。デバッグもかなり強くなります。

 え?人間と関わりたくないからソフトウェアエンジニアをやっている? そうですね、私もそうです(そうでした)。でも読書は一人でできますよ。まずは興味のわいたジャンルからどうぞ。