GoSuda

政治とコンピュータ

By snowmerak
views ...

哲学とは

哲学とは何だとお考えですか。辞書的な意味は「世界の生活と根源的な問いについて考え、答えを見つけていく活動」とされています。答えが決まっている問題解決ではなく、同じ問い、あるいは連鎖する問いの連続によって思考を拡張し、その答えを共有するという行為的な定義も可能です。

過去、私は学士課程を修了する際、政治哲学に関連する科目を履修したことがあります。その時、自己紹介の時間に教授が「政治哲学とComputer Scienceは、互いに異なる哲学の頂点にある学問である」といった趣旨の発言をされた記憶があります。正確にこの言葉や文章ではありませんでしたが、大体そのような意味だったように思います。

Computer Science

私はComputer Scienceを「論理的な問題を解決するための根源的な探求」だと考えます。そのため、ある問題について思考する人ごとに様々な答えが出ることがあります。最も代表的な例がSortingです。同じ並べられたデータを順序通りにSortingする方法の探求においても、Bubble Sort、Insertion Sort、Selection Sort、Merge Sort、Quick Sort、Heap Sort、Tim Sortなど、様々なものが存在します。そしてこれらを分類することで、より良いAlgorithmが生まれる可能性があります。

また、局所的に見れば、「作り、証明する」とも言えるでしょう。まさに上記のSortingも、どのようにSortingするかを継続的に作り、結果を証明します。Developerの方々には、より身近な例として、Projectの企画が出たら、それを実装し、正常に動作することを証明すると考えると良いでしょう。

政治哲学

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

また、Computer Scienceのように局所的に見れば、「問い、省察する」と見ることができます。発生した問題に対し、絶えず問いを発し、なぜそうなったのか、より良い方向性は何があるのかを省察し、答えを出します。これもまた、思考する人の数に比例して多くの答えが現れます。

我々はなぜ政治/Computerも知るべきなのか

相互呼び出しの関係

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

一つの例を挙げてみましょう。

  1. 個人の健康データを安全にCloudに保存すれば、必要な時に各病院から素早くAccessできるようになるだろう ⇒ Programmingによって、安全かつAccessしやすい形で各領域の機能を利用して実装します。
  2. では、そのDataは誰のものか?私か?登録した担当者か?それとも主催者か?開発会社か?国家か?では、彼らは私のDataのどこまで見ることができるのか?私の個人情報がどこまで、どのように保護されると保障されるのか? ⇒ 異なる共同体と各個人の立場および利害の差異に関する政治的議論が行われるでしょう。
  3. その後、これについて政治的議論とProgramming的な設計および実装が連鎖的に繰り返されるでしょう。

このように、既存の社会問題を解決するためにComputer Scienceが用いられ、そこから発生した問題を認識し解決するために疑問が呈され、次の問題を解決するために政治哲学が用いられます。情報化社会である現代において、これは当然の現象です。

政治とComputerは似たようなものか

そうは見えない点

また、両世界は類似した形で進化してきました。しかし、その根幹は社会哲学と自然哲学の関係と同様に、曖昧な表現と明確な表現の差異があります。政治哲学が自然言語で構成された可変的で曖昧な定義に基づいているとすれば、Computer Scienceは自然言語よりも数式で構成された不変で明確な命題に基づいています。

また、方向性も微妙に異なって表現されます。Computer Scienceは最適解が存在し得ると考えます。そして政治哲学では、より説得力のある主張、より根拠のある主張、より倫理的な主張といった曖昧な概念を語ります。しかし、私が考えるに、両者の方向性はほぼ類似しています。結局、「より良い次」を追求しているように見えるからです。Computer Scienceにも様々な分野がありますが、代表的なCodecと呼ばれるMedia圧縮については、より良い圧縮率と圧縮性能、License費用を示すために努力しています。

似ている点

代表的にProgramming言語と統治理念は、人間に類似して適用されるように見えます。各言語と理念を対応させることはできませんが、面白半分に列挙してみましょう。

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

そして、意外と多くのDeveloperが、まるで現実でイデオロギー戦争をするかのように、言語で激しく争います。言語自体がDeveloperにとって慣れ親しんだイデオロギーであり、追求すべき理想であるわけです。

国家とArchitecture

  • Monolithic Architectureと中央集権国家: 一つの巨大なCode Baseと一つのBinaryに全てが含まれます。これは強力な中央政府を持つ単一国家や絶対王政に類似した構造を持ちます。国家の全ての機能が単一の権力体制によって統制されます。
    • 国家の形態を整えるのが最も容易であり、意思決定が迅速であるという長所があります。これはSoftware全体が迅速に完成するという長所と同じ文脈です。全てのリソースと情報が一箇所に集中しているため、管理が明確です。
    • ただし、国家が大きくなるにつれて変化への対応が難しくなり、小さな法や制度を変更しようとしても全体を検討し適用する必要があります。ある分野の問題が国家全体を麻痺させる危険も伴います。Monolithicもまた、大きなCode Baseと関連するCodeのために変化への対応が難しく、Code一行を変更しようとしても影響範囲を算定する必要があり、一つのModuleで発生した問題がSystem全体に影響を及ぼしやすいです。
  • MSAと連邦制国家: Systemの各機能が独立したServiceとして分離されます。これは国家の各部分が複数の独立した州で構成される連邦制国家との類似性を持ちます。また、各Serviceと州は独立したInfrastructureを持つことになります。中央政府の干渉は緩やかであり、いつ独立と加入が発生するか分からない点も類似しています。
    • 基本的に各独立州とServiceは独立して法を改正/Codeを作成できます。これにより、互いのTempoを合わせる必要がありません。また、一箇所で問題が発生しても連邦全体が麻痺することは困難です。そして、各地域や分野に応じた適切な制度(技術)を選択できます。
    • しかし、相互間の合意を形成したり、通信Channelを構築することは困難な点です。一貫した政策を打ち出すことが難しく、混乱を引き起こす可能性もあります。
  • EDA (Event Driven Architecture)と市民社会: 中央政府や代理人が直接命令するのではなく、発生した社会的問題を個々人が主導的かつ自律的に引き受けて解決します。これはEDAの特性であるEventが発生すると、Subscriberの誰かが自律的に引き受けて処理することと類似しています。
    • 誰でも簡単に参加できます。EDAもまた、新しいServiceが容易に新しいSubscriberとなってProcessに参加できます。
    • ただし、全体的な流れを把握できないという短所があります。誰がどのように処理したのかを追跡することが難しく、一つの出来事がどのような連鎖反応を引き起こすかを知ることができません。
  • Layered Architectureと封建制: 封建制は、各階層で与えられた役割と責任を果たし、上位階層に対する義務を遂行する構造です。これらは一種の契約関係で結ばれ、厳格な垂直的支配構造をなす点でLayered Architectureと類似性を見出すことができます。

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

開発と政治の問題解決は同じかもしれない?

Software Architectureと国家体制が似ているとすれば、その両者を作り上げていく過程もまた驚くほど平行線を描きます。Softwareを開発する過程は、事実上Digital空間に新たな秩序を構築し発展させていく政治行為と変わりありません。

  1. 社会問題の公論化とRequirement Analysis: 全ては「何が問題か?」という問いから始まります。市民社会の苦痛と不便さが公論化されて政治的議題となるように、Userの不便さと要求はAnalysisを経て「Requirement Specification」という開発の最初の里程標となります。
  2. 憲法設計とArchitecture Design: どのような国家を作るのか?どのようなSystemを作るのか?政治家が理念と哲学に基づいて憲法と法律の骨格を築くように、Architectは技術的信念に基づいてSystemの根幹となるArchitectureの青写真を描きます。この段階の決定がSystemの運命を左右します。
  3. 政策執行とSoftware実装: 設計図が完成するとDeveloperは実際のCodeを記述し、行政官僚は法律に従って政策を執行します。抽象的な計画が現実世界で機能する具体的な実体として生まれる過程です。
  4. 選挙による審判とSoftware Test: 政策は選挙と世論を通じてその正当性を審判されます。SoftwareはQAチームのTestとUserのFeedbackを通じてその価値を検証されます。両者とも結局、主権者(市民、User)の同意を得て初めて生存できます。
  5. 制度改革とSystem保守: 一度作られた法とSystemは永遠ではありません。時代の変化に合わせて古い法を改正し制度を改革するように、Softwareもまた変化する環境に適応し、内部の非効率性を改善する「Refactoring」を止めた瞬間、死んだCodeとなってしまいます。

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

新しい立法者たちの時代

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