Politics and Computers
What is Philosophy?
What do you consider philosophy to be? The dictionary definition states it is "the activity of contemplating and seeking answers to fundamental questions about the world and life." One could also propose an action-oriented definition: it is the continuous expansion of thought through the same questions, or a series of cascading questions, and the sharing of those answers, rather than merely solving problems with predetermined answers.
In the past, while completing my undergraduate degree, I once took a course related to political philosophy. I recall my professor, during my self-introduction, saying something akin to, "Political philosophy and computer science are disciplines at the pinnacle of different philosophies." While these exact words and sentence structure may not be precise, that was generally the gist of it.
Computer Science
I consider computer science to be "the fundamental inquiry into solving logical problems." Therefore, for any given problem, various answers can emerge depending on the individual contemplating it. The most representative example is sorting. Even in the inquiry into methods for sorting enumerated data sequentially, numerous approaches exist, such as bubble, insertion, selection, merge, quick, heap, and Timsort. Furthermore, by differentiating these, superior algorithms can arise.
Additionally, from a localized perspective, it could be described as "creating and proving." The sorting example just mentioned involves continuously creating methods for sorting and proving their results. For developers, a more pertinent example is that when a project proposal emerges, it is best viewed as implementing it and proving that it functions correctly.
Political Philosophy
I consider political philosophy to be "the fundamental inquiry into solving social problems." For each era, it repeatedly questions existing problems, produces answers, and shares them with the present and future. It primarily addresses abstract values such as justice, freedom, equality, and power, which are interpreted differently across times and cultures. It is characterized by the absence of clear-cut good and evil, right and wrong answers, and indeed, by the very nature of not having them predetermined.
Furthermore, from a localized perspective, similar to computer science, it can be seen as "questioning and reflecting." It incessantly questions emergent problems, reflects on why they occurred, and what better directions exist, subsequently yielding answers. This also results in a multitude of answers, proportionate to the number of individuals contemplating them.
Why Should We Understand Both Politics and Computers?
Relationship of Mutual Invocation
Although these two domains appear to explore distinct areas, they in fact share significant commonalities and possess numerous points where they act as mutual causes and effects.
Let us consider an example.
- If individual health data is securely stored in the cloud, each hospital will be able to access it quickly when needed. ⇒ This is implemented through programming, utilizing the functionalities of various domains to ensure security and accessibility.
- Then, whose data is this? Mine? The registered person in charge? Or the managing entity? The development company? The state? To what extent can they view my data? To what extent can I be guaranteed that my personal information is protected? ⇒ Political discourse will ensue regarding the positions and differing interests of various communities and individuals.
- Subsequently, political discourse, programming design, and implementation will repeatedly follow one another.
In this manner, computer science is employed to resolve existing social problems, and then political philosophy is utilized to recognize and address issues arising from this, posing questions to resolve subsequent problems. In the information society of today, this is a natural phenomenon.
Are Politics and Computers Similar?
Points of Apparent Dissimilarity
Furthermore, these two domains have evolved in similar ways. However, their fundamental basis, much like the relationship between social philosophy and natural philosophy, exhibits a difference between ambiguous and clear expressions. While political philosophy is grounded in variable and ambiguous definitions formulated in natural language, computer science is based on immutable and clear propositions expressed in mathematical formulas rather than natural language.
Moreover, their directional expressions are subtly different. Computer science posits that an optimal solution may exist. Political philosophy, conversely, discusses ambiguous concepts such as more persuasive arguments, more evidence-based arguments, or more ethical arguments. However, in my view, the directions of both are almost identical. Ultimately, they appear to strive for "a better next." While computer science encompasses diverse fields, for instance, in the realm of media compression, commonly known as codecs, efforts are consistently directed towards achieving superior compression ratios, performance, and licensing costs.
Points of Apparent Similarity
Notably, programming languages and governing ideologies appear to apply similarly to humans. While a direct correspondence between each language and ideology cannot be established, I will list them for amusement.
- C language ("The developer knows what they are doing"): I wish to analogize this to republicanism. This is because it resembles a republic, which historically formed the foundation of Western political systems, and also communitarianism, which emphasizes the consciousness of individual citizens and their efforts to advance towards a better ideal. Furthermore, I felt a similarity in that rights entail responsibilities.
- Java ("Write once, run anywhere"): I am uncertain. There are strong laws, and one lives a uniform life by adhering to them, yet it is stable, and within it, one is free. And upon entering Spring, various welfare benefits await you. Shall we call it liberalism?
- C# ("The harmony of developer productivity and software engineering principles"): Under the patronage of a strong government, everything is well-designed, and within this planned framework, productivity and performance can be maximized. A planned economy is suitable. The reason it is not communism is that the means of production have been released, and producers are not restricted.
- Go ("Discard complexity, embrace practicality and efficiency"): There is no equivalent. It gives everything away, so let's call it a welfare state.
- Rust ("Safety without performance overhead"): Rust's ownership and lifetimes are managed by a strict compiler, acting as a ruler. This suggests socialism, as it seeks to prevent the inequality and risks arising from individuals' free economic activities by having the community manage and plan the means of production to ensure a stable life, which involves some restriction of individual freedom to pursue the safety and equality of the entire system.
- JavaScript ("Flexibility and tolerance, and omnipresence"): I wish to analogize this to capitalism. In this language, individuals possess the means of production, and even equipment is abundantly available to individuals. Consequently, a variety of manufactured goods are produced, and through free competition, anyone can pursue profit. However, an unregulated market soon descended into chaos.
- TypeScript ("JavaScript that scales"): This is, of course, modified capitalism. The belief in capitalism is shattered, and the government intervenes to some extent to overcome market instability. While the previous complete freedom has relatively regressed, everyone can still freely enter the market and compete.
And surprisingly, a considerable number of developers engage in heated debates over languages, much like ideological warfare in the real world. The language itself serves as a familiar ideology and an ideal to be pursued for developers.
Nation and Architecture
- Monolithic Architecture and Centralized State: A single, massive codebase and a single binary encompass everything. This resembles the structure of a unitary state with a strong central government or an absolute monarchy. All governmental functions are controlled by a single power system.
- This offers the advantage of being the easiest way to form a state and allows for rapid decision-making. This is analogous to the advantage of quickly producing the entire software. All resources and information are concentrated in one place, making management clear.
- However, as the state grows, it becomes more difficult to adapt to change; even minor legal or institutional amendments require review and application across the entire system. There is also the risk that a problem in one area could paralyze the entire state. Similarly, a monolithic architecture makes it difficult to adapt to changes due to a large codebase and intertwined code; even changing a single line of code requires assessing the scope of impact, and a problem in one module can easily affect the entire system.
- MSA (Microservices Architecture) and Federal State: Each function of the system is separated into independent services. This bears resemblance to a federal state where each part of the nation comprises several independent states. Furthermore, each service and state possesses independent infrastructure. The central government's interference is loose, and the potential for independence and accession is also similar.
- Fundamentally, each independent state and service can independently amend laws/write code. This eliminates the need to synchronize with one another. Moreover, even if a problem arises in one area, it is difficult for the entire federation to be paralyzed. And appropriate institutions (technologies) can be selected according to each region or field.
- However, reaching mutual agreement or establishing communication channels is challenging. It can also lead to confusion due to the difficulty of implementing consistent policies.
- EDA (Event-Driven Architecture) and Civil Society: Rather than direct commands from a central government or representatives, individuals proactively and autonomously address social problems as they arise. This is analogous to EDA's characteristic where, when an event occurs, one of the subscribers autonomously handles it.
- Anyone can easily participate. In EDA, new services can easily become new subscribers and participate in the process.
- However, a disadvantage is the inability to grasp the overall flow. It is difficult to track who processed what and how, and it is impossible to know what chain reactions a single event might trigger.
- Layered Architecture and Feudalism: Feudalism is a structure where each layer fulfills its given role and responsibilities, performing duties for the layer above it. These are bound by a contractual relationship and form a strict vertical hierarchy, which shares similarities with layered architecture.
While many more analogies are possible, the core of this article lies not in the structures themselves but in the process of creating those structures.
Could Problem Solving in Development and Politics Be the Same?
If software architecture and national systems are alike, then the processes of creating them also run remarkably parallel. The process of developing software is, in essence, no different from the political act of constructing and evolving a new order in the digital realm.
- Public Discussion of Social Issues and Requirements Analysis: Everything begins with the question, "What is the problem?" Just as the suffering and inconvenience of civil society become public issues and political agendas, user inconvenience and demands undergo analysis to become the first milestone in development: the 'requirements specification.'
- Constitutional Design and Architecture Design: What kind of nation will be created? What kind of system will be created? Just as politicians establish the framework of constitutions and laws based on ideology and philosophy, architects draw the blueprint of the system's fundamental architecture based on technical convictions. Decisions at this stage determine the fate of the system.
- Policy Implementation and Software Implementation: Once the design is complete, developers write actual code, and administrative officials implement policies according to laws. This is the process where abstract plans are transformed into concrete realities that function in the real world.
- Judgment through Elections and Software Testing: Policies are judged for their legitimacy through elections and public opinion. Software is validated for its value through testing by QA teams and user feedback. Both ultimately can only survive with the consent of the sovereign (citizens, users).
- Institutional Reform and System Maintenance: Laws and systems, once created, are not eternal. Just as outdated laws are revised and institutions reformed to adapt to changing times, software that ceases to adapt to changing environments and improve internal inefficiencies through 'refactoring' becomes dead code.
Thus, the entire process, from problem definition to design, implementation, verification, and continuous improvement, demonstrates that these two domains share the same rhythm of problem-solving.
The Day of the New Legislators
The information society has rendered the distance between the pinnacles of these two philosophies meaningless. Code is no longer a mere logical circuit; it has become 'law' (Code is Law) that defines human relationships, distributes power, and realizes social values. If the architecture we design resembles the governance structure of a nation, and the development process we follow is akin to the political consensus-building process, then who exactly are we, the developers? And what should politicians do? Therefore, developers must now reflect not only on the logic of code but also on the society that code creates, and politicians must understand not only the logic of votes but also the logic of technology that moves the world. This is because the immense power we wield in our respective domains comes with an equivalent ethical responsibility.