GoSuda

政治とコンピュータ

By snowmerak views ...

哲学とは

哲学とは何だとお考えでしょうか。辞書的な意味では、世界の生と根本的な問いについて考え、答えを探し求める活動とされています。答えがあらかじめ決まっている問題の解答ではなく、同じ問い、あるいは次々と連鎖する問いによって思考を広げ、その答えを共有する営みである、という行為的な定義も成り立ちます。

以前、私は学士課程を修了する過程で、政治哲学に関連する科目を履修したことがあります。そのとき、自己紹介の時間に教授が政治哲学とコンピュータ工学は、互いに異なる哲学の頂点にある学問であると類似した趣旨のお話をされた記憶があります。正確にこの単語や文章ではなかったかもしれませんが、おおよそそのような意味だったと思います。

コンピュータ工学

私は、コンピュータ工学を論理的な問題を解決するための根本的な探究だと考えています。そのため、ある問題について思考する人によって、さまざまな答えが生まれえます。最も代表的な例が整列(ソート)です。同じ並べられたデータを順序どおりに整列する方法を探究する過程にも、バブル、挿入、選択、マージ、クイック、ヒープ、ティムなど、多様な手法が存在します。そして、それらを分けて検討することで、より優れたアルゴリズムが生まれてきたのです。

また局所的に見れば、作り、証明するとも言えるでしょう。まさに上記の整列も、どのように整列するかを絶えず作り出し、その結果を証明しています。開発者の方々にとってはさらに身近な例として、プロジェクトの企画が出されたら、実装してきちんと動作することを証明するものと考えるとよいでしょう。

政治哲学

私は、政治哲学を社会的な問題を解決するための根本的な探究だと考えています。各時代ごとに異なる、すでに存在する問題に対して繰り返し疑問を提起し、答えを導き出し、現在と未来に共有します。正義、自由、平等、権力のように、時代と文化によって異なって解釈される抽象的な価値を主に扱い、明確な善と悪、正解と誤答が定められておらず、定まらないという特徴があります。

また、コンピュータ工学と同様に局所的に見れば、問い、省察すると言えます。発生した問題について絶えず問いを投げかけ、なぜそうなったのか、より良い方向は何があるのかを省察し、答えを出します。これもまた、思考する人の数に比例して多くの答えが現れます。

私たちはなぜ政治とコンピュータも知らなければならないのか

相互に呼び出す関係

両者は互いに異なる領域を探究しているように見えますが、実際にはかなり類似した点を共有しており、互いの原因と結果となる点を非常に多く持っています。

一つの例を挙げてみます。

  1. 個人の健康データを安全にクラウドに保存すれば、必要なときに各病院で迅速にアクセスできるだろう ⇒ プログラミングによって、安全かつアクセスしやすく、各領域の機能を用いて実装します。
  2. では、そのデータは誰のものなのか? 私? 登録した担当者? それとも主管社? 開発会社? 国家? そして、彼らは私のデータのどこまでを見られるのか? 私の個人情報がどこまで、どのように保護されると保障されうるのか? ⇒ 互いに異なる共同体と各個人の立場や利害の差をめぐる政治的な談論が交わされることになるでしょう。
  3. その後も時折、この件について政治的談論とプログラミング上の設計および実装が、連鎖的に繰り返されるはずです。

このように、既存の社会問題を解決するためにコンピュータ工学が用いられ、そこで生じた問題を認識し解決するために疑問を提起し、次の問題を解決するために政治哲学が用いられることになります。情報化社会である現代において、これは当然の現象です。

政治とコンピュータは似ているのか

そうには見えない点

また、両者は類似した形で進化してきました。しかし、その根幹は社会哲学と自然哲学の関係と同様に、曖昧な表現と明確な表現の違いがあります。政治哲学は自然言語からなる可変的で曖昧な定義を基盤とするのに対し、コンピュータ工学は自然言語よりもむしろ数式からなる不変で明確な命題を基盤とします。

また、方向性も微妙に異なって表現されます。コンピュータ工学は最適解が存在しうると見なします。そして政治哲学では、より説得力のある主張、より根拠のある主張、より倫理的な主張のような曖昧な概念を論じます。しかし私の見るところ、両者の方向性はほぼ類似しています。結局のところ、どちらもより良い次を目指しているように見えるからです。たとえばコンピュータ工学にも多様な分野がありますが、代表的にはコーデックと呼ばれるメディア圧縮において、より優れた圧縮率、圧縮性能、そしてライセンス費用を示すために努力しています。

似ているように思える点

代表的に、プログラミング言語と統治理念は人間に対して類似した形で適用されるように見えます。各言語と理念を対応させることはできませんが、おもしろ半分に並べてみます。

  • C言語(開発者は自分が何をしているかを知っている):私は共和主義になぞらえたいと思います。歴史的に西洋の政治体制の根幹となった共和政と似ており、市民一人ひとりの意識や、より良い理想に向かおうとする個々人の努力を重んじる共同体主義とも似ていると見ているからです。また、権利には責任が伴う点も類似していると感じました。
  • Java(一度書けば、どこでも実行される):よくわかりません。強力な法があり、それを守りながら画一化された生活を送りますが、それが安定的であり、その中では自由があります。そしてSpringに入れば、さまざまな福祉があなたがたを待っています。自由主義にしましょうか?
  • C#(開発者の生産性とソフトウェア工学の原則の調和):強い政府の庇護のもと、すべてがよく設計されており、この上で計画されたものの中では、生産性と性能を極限まで引き出すことができます。計画経済が似合います。共産主義ではないのは、生産手段を解放しており、生産者を制限しないからです。
  • Go(複雑さは捨て、実用性と効率性を取る):似たものがありません。すべてを与えるので、福祉国家になさってください。
  • Rust(性能低下のない安全性):Rustの所有権とライフタイムは、厳格なコンパイラという統治者によって管理されます。これは、個人の自由な経済活動がもたらす不平等と危険を防ぐため、共同体が生産手段を管理し計画して安定した生活を保障すること、すなわち個人の自由を一部制限して、システム全体の安全と平等を追求することに見えるため、社会主義だと考えます。
  • JavaScript(柔軟性と寛容性、そしてどこにでも存在すること):私は資本主義になぞらえたいと思います。この言語では、生産手段が個々人の手にあり、設備さえも個々人が十分に持っています。そのおかげで多様な工業製品が生まれ、自由な競争を通じて誰もが利潤を追求できるようになりました。しかし、規制のない市場はすぐに混乱に陥りました。
  • TypeScript(拡張されるJavaScript):当然ながら修正資本主義です。資本主義の信念が崩れ、市場の不安定性を打破するために、ある程度政府が介入するようになります。以前の完全な自由は比較的後退しましたが、依然として誰もが自由に市場に参入して競争します。

そして、思いのほか少なくない開発者たちが、まるで現実でイデオロギー戦争をするかのように、言語をめぐって盛んに争います。言語そのものが、開発者にとって馴染みのある理念であり、追求すべき理想であるといえるでしょう。

国家とアーキテクチャ

  • モノリシックアーキテクチャと中央集権国家:ひとつの巨大なコードベースと、ひとつのバイナリにすべてが含まれます。これは強力な中央政府をもつ単一国家や絶対王政に類似した構造です。国家のすべての機能が、ひとつの権力体制によって統制されます。
    • 国家の形を整えることが最も容易で、意思決定が迅速に下されるという利点があります。これは、ソフトウェア全体を速やかに出せるという利点と同じ脈絡にあります。すべての資源と情報が一箇所に集中しているため、管理が明確です。
    • ただし、国家が大きくなるほど変化への対応が難しくなり、小さな法や制度を変えようとしても、全体を検討して適用しなければなりません。ある分野の問題が国家全体を麻痺させる危険も伴います。モノリシックもまた、大きなコードベースと絡み合ったコードのせいで変化への対応が難しく、コード一行を変えようとしても影響範囲を見積もる必要があり、ひとつのモジュールで発生した問題がシステム全体に影響を及ぼしやすいのです。
  • MSAと連邦制国家:システムの各機能が独立したサービスに分離されます。これは、国家の各部分が複数の独立した州から構成される連邦制国家と類似点をもちます。また、各サービスと州は独立したインフラをもつようになります。中央政府の干渉は緩やかで、いつ独立や加入が起こるかわからない点も類似しています。
    • 基本的に、各独立州とサービスは、独立して法律を改正し、コードを作成することができます。そのため、互いのテンポを合わせる必要がありません。また、ある場所で問題が生じても、連邦全体が麻痺しにくいです。さらに、各地域や分野に応じた適切な制度(技術)を選択することができます。
    • しかし、相互の合意を合わせることや通信チャネルを作ることは難しい点です。一貫した政策を打ち出しにくく、混乱を引き起こすこともありえます。
  • EDA(Event Driven Architecture)と市民社会:中央政府や代理人が直接命令を下すよりも、発生した社会問題を個々人が主体的かつ自律的に拾い上げ、解決します。これは、EDAの特徴であるイベントが発生すると、購読者のうちの誰かが自律的に拾い上げて処理することと類似しています。
    • 誰もが容易に参加できます。EDAでも、新しいサービスが容易に新しい購読者となって、プロセスに参加することができます。
    • しかし、全体の流れを把握できないという短所があります。誰がどのように処理したかを追跡しにくく、ひとつの事件がどのような連鎖反応を引き起こすかを知ることができません。
  • Layered Architectureと封建制:封建制は、それぞれの階層において与えられた役割と責任を果たし、上位の階層に対する義務を遂行する構造です。これらは一種の契約関係で結ばれ、厳格な垂直的支配構造をなしているという点で、レイヤードアーキテクチャと類似点を見いだすことができます。

このように、さらに多くの比喩が可能ですが、この文章の核心は構造そのものよりも、その構造をつくり上げていく過程にあります。

開発と政治の問題解決は同じなのだろうか?

ソフトウェアアーキテクチャと国家体制が似ているならば、その両者をつくり上げていく過程もまた、驚くほど平行線を描きます。ソフトウェアを開発する過程は、実のところデジタル空間において新たな秩序を構築し発展させていく政治行為と何ら変わりません。

  1. 社会問題の公論化と要件分析**:** すべては「何が問題なのか?」という問いから始まります。市民社会の苦痛と不便が公論化されて政治的議題となるように、ユーザーの不便と要求は分析を経て「要件定義書」という開発の最初の道標となります。
  2. 憲法設計とアーキテクチャデザイン**:** どのような国家をつくるのか? どのようなシステムをつくるのか? 政治家が理念と哲学に基づいて憲法と法律の骨格を立てるように、アーキテクトは技術的な信念に基づいて、システムの根幹となるアーキテクチャの青写真を描きます。この段階の決定がシステムの運命を左右します。
  3. 政策執行とソフトウェア実装**:** 設計図が完成すると、開発者は実際のコードを書き、行政官僚は法律に従って政策を執行します。抽象的な計画が現実世界で作動する具体的な実体として生まれる過程です。
  4. 選挙による審判とソフトウェアテスト**:** 政策は選挙と世論を通じてその正当性を審判されます。ソフトウェアはQAチームのテストとユーザーのフィードバックを通じてその価値を検証されます。両者はいずれも、結局のところ主権者(市民、ユーザー)の同意を得てこそ生き残ることができます。
  5. 制度改革とシステム保守**:** 一度つくられた法とシステムは永遠ではありません。時代の変化に合わせて古い法を改正し制度を改革するように、ソフトウェアもまた変化する環境に適応し、内部の非効率を改善する「リファクタリング」を止めた瞬間、死んだコードとなってしまいます。

このように、問題定義から設計、実装、検証、そして絶え間ない改善に至るまでの全過程は、両者が同じ問題解決の呼吸を共有していることを示しています。

新たな立法者たちの日

情報化社会は、その二つの哲学の頂点の間の距離を無意味なものにしました。コードはもはや単なる論理回路ではなく、人々の関係を規定し、権力を配分し、社会的価値を実現する「法(Code is Law)」となりました。私たちが設計するアーキテクチャが国家の統治構造に似ており、私たちが従う開発プロセスが政治的合意過程と同じであるならば、私たち開発者は一体誰なのでしょうか? また、政治家は何をすべきなのでしょうか? だからこそ、開発者はもはやコードの論理だけでなく、そのコードがつくり出す社会を省察しなければならず、政治家は票の論理だけでなく、世界を動かす技術の論理を理解しなければなりません。私たちが各自の世界で振るうこの強大な権力には、それだけの倫理的責任が伴うからです。