GoSuda

Politik und Computer

By snowmerak
views ...

철학이란

철학이란 무엇이라 생각하시나요? 사전적 의미는 세상의 삶과 근본적인 질문에 대해 생각하고 답을 찾아가는 할동라고 합니다. 답이 정해진 문제 풀이가 아니라 같은 질문, 혹은 꼬리를 무는 질문의 연속으로 사고를 확장하고, 그 답을 공유하는 것이라는 행위적 정의도 걸 수 있죠.

과거 저는 학사 과정을 수료하던 중, 정치철학과 관련된 과목을 수강한 적이 있습니다. 그때에 제 자기소개 시간에 교수님은 정치철학과 컴퓨터공학은 서로 다른 철학의 정점에 있는 학문이다와 유사한 말씀을 하셨던 기억이 있습니다. 정확히 이 단어와 문장은 아니었지만, 대충 그런 뜻이었던 것같습니다.

컴퓨터 공학

저는 컴퓨터 공학은 논리적 문제를 해결하기 위한 근본적 탐구라고 생각합니다. 그렇기에 어떠한 문제에 대해 사고하는 사람마다 여러가지 답이 나올 수 있죠. 가장 대표적인 예가 정렬입니다. 같은 나열된 데이터를 순서대로 정렬하는 방법에 대한 탐구에도 버블, 삽입, 선택, 병합, 퀵, 힙, 팀 등 여러가지가 존재하죠. 그리고 이를 나누면서 더 나은 알고리즘이 나올 수 있죠.

또한 지역적으로 본다면, 만들고 증명한다고 할 수도 있겠습니다. 바로 위 정렬도 어떻게 정렬할 것인지 계속 만들고 결과를 증명하죠. 개발자인 분들은 더욱 가까운 예시로 프로젝트 기획이 나오면, 구현하고 멀쩡히 돌아감을 증명하는 것으로 보면 좋습니다.

정치 철학

저는 정치 철학은 사회적 문제를 해결하기 위한 근본적 탐구라고 생각합니다. 각 시대마다 다른 이미 존재하는 문제에 대해 반복적으로 의문을 제기하고, 답을 산출하며, 현재와 미래에 공유합니다. 정의, 자유, 평등, 권력과 같이 시대와 문화에 따라 다르게 해석되는 추상적인 가치를 주로 다루며 명확한 선과 악, 정답과 오답이 정해져 있지 않고, 정해지지 않는 특징이 있죠.

또한 컴퓨터 공학처럼 지역적으로 본다면, 질문하고 성찰한다고 볼 수 있습니다. 발생한 문제에 대해 끊임없이 질문하고, 왜 그렇게 되었는가, 더 나은 방향은 무엇이 있는가, 성찰하고 답을 냅니다. 이 또한 사고하는 사람 수에 비례해서 많은 답이 나타나죠.

우리는 왜 정치/컴퓨터도 알아야 하나

상호 호출의 관계

두 세계는 서로 다른 영역을 파헤치는 것 같지만 실제로는 상당히 유사한 점을 공유하고 있으며, 서로의 원인과 결과가 되는 점을 상당히 많이 가지고 있습니다.

한가지 예를 들어 보겠습니다.

  1. 개인의 건강 데이터를 안전하게 클라우드에 저장하면, 필요할 때에 각 병원에서 빠르게 접근할 수 있을 거야 ⇒ 프로그래밍으로 안전하고 접근성 좋게 각 영역의 기능을 이용해서 구현합니다.
  2. 그러면 해당 데이터는 누구의 것이지? 나? 등록한 담당자? 아니면 주관사? 개발사? 국가? 그럼 그들은 내 데이터의 어디까지 볼 수 있지? 내 개인 정보를 어디까지 어떻게 보호가 된다고 보장받을 수 있지? ⇒ 서로 다른 공동체들과 각 개인들의 입장과 이해 차에 대한 정치적 담론이 오갈 것입니다.
  3. 이후로는 때때로 이에 대해 정치적 담론과 프로그래밍적 설계와 구현이 꼬리를 물고 반복되겠죠.

이처럼, 기존 사회 문제를 해결하기 위해 컴퓨터 공학이 쓰이고, 다시 여기서 발생한 문제를 인지하고 해결하기 위해 의문을 제기하고 다음 문제를 해결하기 위해 정치 철학이 쓰이게 됩니다. 정보화 사회인 현대에 이는 당연한 현상이죠.

정치와 컴퓨터는 닮은 꼴일까

그렇지 않아 보이는 점

또한 두 세계는 유사한 형태로 진화해 왔습니다. 하지만 그 근간은 사회 철학과 자연 철학의 관계와 마찬가지로 모호한 표현과 명확한 표현의 차이가 있습니다. 정치 철학에선 자연어로 이루어진 가변적이고 모호한 정의를 기반으로 한다면, 컴퓨터 공학은 자연어보다는 수식으로 이루어진 불변하고 명확한 명제를 기반으로 하죠.

또한 방향성도 미묘하게 다르게 표현하죠. 컴퓨터 공학은 최적해가 존재할 수 있다고 봅니다. 그리고 정치 철학에선 더 설득력 있는 주장, 더 근거 있는 주장, 더 윤리적인 주장같은 모호한 개념을 이야기하죠. 하지만 제가 볼 때 둘의 방향성은 거의 유사합니다. 결국 더 나은 다음을 도모하는 것으로 보이거든요. 당장 컴퓨터 공학도 다양한 분야가 있지만, 대표적으로 코덱이라 불리는 미디어 압축에 대해서는 더 나은 압축률과 압축 성능, 라이센스 비용을 보여주기 위해 노력하고 있죠.

비슷한 것같은 점

대표적으로 프로그래밍 언어와 통치 이념은 인간에게 유사하게 적용되는 것으로 보입니다. 각 언어와 이념을 대응 시킬 수 없으나 재미로 나열해보겠습니다.

  • C 언어 (개발자는 자신이 무엇을 하는지 알고 있다): 저는 공화주의에 빗대고 싶습니다. 역사적으로 서구 정치 체제의 근간이 된 공화정과 비슷하고, 시민 개개인의 의식과 더 나은 이상을 향해 나아가려는 개개인의 노력을 중시하는 공동체 주의와도 닮아 있다고 보기 때문입니다. 또한 권리에는 책임이 따르는 점이 유사하다고 느껴졌습니다.
  • Java (한 번 작성하면, 어디서든 실행된다): 모르겠습니다. 강력한 법이 있고, 그걸 지키며 획일화된 삶을 살지만, 그것이 stabil und darin frei ist. Und wenn Sie in Spring einsteigen, erwarten Sie verschiedene Vorteile. Soll ich es Liberalismus nennen?
  • C# (개발자 생산성과 소프트웨어 공학 원칙의 조화): Unter dem Schutz einer starken Regierung ist alles gut konzipiert, und innerhalb des Geplanten kann die Produktivität der Entwickler und die Leistung maximiert werden. Eine Planwirtschaft passt gut. Der Punkt, an dem es kein Kommunismus ist, ist, dass die Produktionsmittel freigegeben wurden und die Produzenten nicht eingeschränkt sind.
  • Go (복잡성은 버리고, 실용성과 효율성을 취한다): Es gibt nichts Vergleichbares. Da alles gegeben wird, machen Sie es zu einem Wohlfahrtsstaat.
  • Rust (성능 저하 없는 안전성): Die Ownership und Lifetime von Rust werden von einem strengen Compiler als Herrscher verwaltet. Dies ähnelt der Vorstellung, dass eine Gemeinschaft die Produktionsmittel verwaltet und plant, um ein stabiles Leben zu gewährleisten, um Ungleichheit und Risiken zu verhindern, die durch die freie wirtschaftliche Tätigkeit des Einzelnen entstehen. Dies strebt die Sicherheit und Gleichheit des gesamten Systems an, indem die Freiheit des Einzelnen teilweise eingeschränkt wird, und daher halte ich es für Sozialismus.
  • JavaScript (유연성과 관용성, 그리고 어디에나 존재함): Ich möchte es mit dem Kapitalismus vergleichen. In dieser Sprache besitzen Individuen die Produktionsmittel, und sogar die Ausrüstung ist reichlich vorhanden. Dadurch entstanden vielfältige Industrieprodukte, und der freie Wettbewerb ermöglichte es jedem, Gewinne zu erzielen. Aber ein unregulierter Markt geriet bald ins Chaos.
  • TypeScript (확장되는 JavaScript): Natürlich ist es der modifizierte Kapitalismus. Der Glaube an den Kapitalismus ist zerbrochen, und die Regierung greift bis zu einem gewissen Grad ein, um die Instabilität des Marktes zu überwinden. Die ursprüngliche vollständige Freiheit hat sich relativ zurückentwickelt, aber jeder kann immer noch frei in den Markt eintreten und konkurrieren.

Und es gibt nicht wenige Entwickler, die sich in Sprachen streiten, als ob sie in der Realität Ideologiekriege führen würden. Die Sprache selbst ist für Entwickler eine vertraute Ideologie und ein Ideal, das angestrebt werden sollte.

국가와 아키텍처

  • Monolithic Architecture und zentralisierter Staat: Eine riesige Codebasis und eine einzige Binärdatei enthalten alles. Dies ähnelt der Struktur eines Einheitsstaates mit einer starken Zentralregierung oder einer absoluten Monarchie. Alle Funktionen des Staates werden von einem einzigen Machtsystem kontrolliert.
    • Der Vorteil ist, dass es am einfachsten ist, eine Staatsform zu bilden und Entscheidungen schnell zu treffen. Dies ist vergleichbar mit dem Vorteil, dass die gesamte Software schnell verfügbar ist. Da alle Ressourcen und Informationen an einem Ort konzentriert sind, ist die Verwaltung klar.
    • Allerdings wird es für den Staat mit zunehmender Größe schwieriger, auf Veränderungen zu reagieren, und selbst wenn ein kleines Gesetz oder eine Institution geändert werden soll, muss das Ganze überprüft und angewendet werden. Es besteht auch das Risiko, dass ein Problem in einem Bereich den gesamten Staat lahmlegt. Auch Monolithic Architecture macht es aufgrund der großen Codebasis und des miteinander verknüpften Codes schwierig, auf Änderungen zu reagieren, und selbst wenn eine Zeile Code geändert werden soll, muss der Umfang der Auswirkungen abgeschätzt werden, und ein Problem, das in einem Modul auftritt, kann leicht das gesamte System beeinflussen.
  • MSA und föderaler Staat: Jede Funktion des Systems ist in unabhängige Services unterteilt. Dies weist Ähnlichkeiten mit einem föderalen Staat auf, in dem jeder Teil des Landes aus mehreren unabhängigen Bundesstaaten besteht. Auch jeder Service und jeder Bundesstaat verfügt über eine unabhängige Infrastruktur. Die Einmischung der Zentralregierung ist locker, und es ist auch ähnlich, dass man nie weiß, wann eine Unabhängigkeit oder ein Beitritt stattfindet.
    • Grundsätzlich können die einzelnen Bundesstaaten und Services unabhängig Gesetze ändern/Code schreiben. Dadurch müssen sie sich nicht gegenseitig anpassen. Auch wenn an einer Stelle ein Problem auftritt, ist es unwahrscheinlich, dass der gesamte Bund lahmgelegt wird. Und es können geeignete Institutionen (Technologien) je nach Region oder Bereich ausgewählt werden.
    • Es ist jedoch schwierig, sich gegenseitig abzustimmen oder Kommunikationskanäle zu schaffen. Es kann auch schwierig sein, eine kohärente Politik zu verfolgen, was zu Verwirrung führen kann.
  • EDA (Event-Driven Architecture) und Zivilgesellschaft: Anstatt dass die Zentralregierung oder Vertreter direkt Befehle erteilen, übernehmen Individuen die Initiative und lösen soziale Probleme autonom. Dies ähnelt dem Merkmal von EDA, bei dem, wenn ein Event auftritt, jemand unter den Abonnenten autonom die Initiative ergreift und es verarbeitet.
    • Jeder kann leicht teilnehmen. Auch bei EDA kann ein neuer Service leicht ein neuer Subscriber werden und am Prozess teilnehmen.
    • Der Nachteil ist jedoch, dass der Gesamtfluss nicht erfasst werden kann. Es ist schwierig, nachzuvollziehen, wer was verarbeitet hat, und es ist unmöglich zu wissen, welche Kettenreaktion ein einzelnes Ereignis auslösen wird.
  • Layered Architecture und Feudalismus: Der Feudalismus ist eine Struktur, in der jede Schicht ihre zugewiesenen Rollen und Verantwortlichkeiten erfüllt und Verpflichtungen gegenüber der oberen Schicht erfüllt. Sie sind durch eine Art Vertragsbeziehung verbunden und bilden eine strenge vertikale Hierarchie, in der Ähnlichkeiten mit der Layered Architecture gefunden werden können.

Obwohl weitere Analogien möglich wären, liegt der Kern dieses Artikels eher im Prozess der Schaffung der Struktur als in der Struktur selbst.

Ist die Problemlösung in der Entwicklung und Politik vielleicht dieselbe?

Wenn Softwarearchitektur und staatliche Systeme ähnlich sind, verlaufen auch die Prozesse ihrer Entstehung erstaunlich parallel. Der Prozess der Softwareentwicklung ist im Grunde nichts anderes als ein politischer Akt, der eine neue Ordnung im digitalen Raum etabliert und weiterentwickelt.

  1. Öffentliche Diskussion sozialer Probleme und Anforderungsanalyse: Alles beginnt mit der Frage: "Was ist das Problem?" So wie das Leid und die Unannehmlichkeiten der Zivilgesellschaft öffentlich diskutiert und zu einem politischen Thema werden, werden auch die Unannehmlichkeiten und Anforderungen der Benutzer durch Analyse zum ersten Meilenstein der Entwicklung, dem 'Anforderungsspezifikationsdokument'.
  2. Verfassungsdesign und Architekturdesign: Welches Land soll geschaffen werden? Welches System soll geschaffen werden? So wie Politiker auf der Grundlage von Ideologien und Philosophien das Gerüst von Verfassungen und Gesetzen errichten, entwerfen Architekten auf der Grundlage technischer Überzeugungen den Blaupausen der Architektur, die das Fundament des Systems bilden wird. Die Entscheidungen in dieser Phase bestimmen das Schicksal des Systems.
  3. Politikdurchsetzung und Softwareimplementierung: Sobald der Entwurf fertiggestellt ist, schreiben die Entwickler den eigentlichen Code, und die Verwaltungsbeamten setzen die Politik gemäß den Gesetzen um. Es ist der Prozess, in dem abstrakte Pläne zu konkreten Entitäten werden, die in der realen Welt funktionieren.
  4. Beurteilung durch Wahlen und Softwaretests: Die Politik wird durch Wahlen und die öffentliche Meinung auf ihre Legitimität geprüft. Software wird durch Tests des QA-Teams und Benutzerfeedback auf ihren Wert geprüft. Beide können letztendlich nur überleben, wenn sie die Zustimmung der Souveräne (Bürger, Benutzer) erhalten.
  5. Institutionelle Reform und Systemwartung: Einmal geschaffene Gesetze und Systeme sind nicht ewig. So wie alte Gesetze geändert und Institutionen reformiert werden, um sich an den Wandel der Zeit anzupassen, wird Software, die sich nicht an die sich ändernde Umgebung anpasst und interne Ineffizienzen durch 'Refactoring' verbessert, zu totem Code.

Dieser gesamte Prozess, von der Problemdefinition über Design, Implementierung, Verifizierung bis hin zur kontinuierlichen Verbesserung, zeigt, dass beide Welten den gleichen Rhythmus der Problemlösung teilen.

Der Tag der neuen Gesetzgeber

Die Informationsgesellschaft hat die Distanz zwischen den Gipfeln dieser beiden Philosophien bedeutungslos gemacht. Code ist nicht mehr nur ein einfacher Logikschaltkreis, sondern ein 'Gesetz (Code is Law)', das menschliche Beziehungen definiert, Macht verteilt und soziale Werte realisiert. Wenn die von uns entworfene Architektur der Regierungsstruktur eines Staates ähnelt und die von uns befolgten Entwicklungsprozesse dem politischen Konsensprozess gleichen, wer sind wir Entwickler dann wirklich? Und was sollten Politiker tun? Daher müssen Entwickler nicht nur die Logik des Codes, sondern auch die Gesellschaft, die dieser Code schafft, reflektieren, und Politiker müssen nicht nur die Logik der Stimmen, sondern auch die Logik der Technologie verstehen, die die Welt bewegt. Denn diese gewaltige Macht, die wir in unseren jeweiligen Welten ausüben, bringt eine entsprechende ethische Verantwortung mit sich.