GoSuda

Polityka a komputery

By snowmerak views ...

Czym jest filozofia

Jak Pan/Pani sądzi, czym jest filozofia? Według definicji słownikowej jest to działanie polegające na myśleniu o fundamentalnych pytaniach dotyczących życia i świata oraz poszukiwaniu na nie odpowiedzi. Można również przyjąć definicję performatywną, zgodnie z którą filozofia polega na rozwijaniu myślenia poprzez te same pytania lub ciąg pytań wynikających jedno z drugiego, a także na dzieleniu się odpowiedziami.

W przeszłości, w trakcie studiów licencjackich, uczęszczałem na zajęcia związane z filozofią polityczną. Podczas mojej prezentacji na początku semestru profesor wypowiedział zdanie zbliżone do filozofia polityczna i informatyka to dyscypliny znajdujące się na szczytach różnych filozofii. Nie były to dokładnie te słowa ani to zdanie, jednak mniej więcej taki był ich sens.

Informatyka

Uważam, że informatyka to fundamentalne badanie mające na celu rozwiązywanie problemów logicznych. Z tego względu osoby zastanawiające się nad jednym problemem mogą dojść do wielu różnych odpowiedzi. Najbardziej typowym przykładem jest sortowanie. Istnieje wiele metod badania sposobu uporządkowania tych samych danych w określonej kolejności, takich jak sortowanie bąbelkowe, przez wstawianie, przez wybór, przez scalanie, szybkie, przez kopcowanie czy sortowanie Timsort. Dzieląc problem na części, można następnie opracować lepsze algorytmy.

Z lokalnej perspektywy można również powiedzieć, że informatyka polega na tworzeniu i dowodzeniu. Przykładowo wspomniane wyżej sortowanie również wymaga ciągłego tworzenia sposobów sortowania oraz dowodzenia ich wyników. Osoby pracujące jako programiści najlepiej zrozumieją to na bardziej bliskim im przykładzie: gdy pojawia się projekt, należy go zaimplementować i wykazać, że działa poprawnie.

Filozofia polityczna

Uważam, że filozofia polityczna to fundamentalne badanie mające na celu rozwiązywanie problemów społecznych. Wielokrotnie kwestionuje ona problemy istniejące już wcześniej, które różnią się w zależności od epoki, formułuje na nie odpowiedzi i przekazuje je teraźniejszości oraz przyszłości. Zajmuje się głównie abstrakcyjnymi wartościami, takimi jak sprawiedliwość, wolność, równość i władza, które są interpretowane odmiennie w zależności od czasu i kultury. Nie istnieją w niej jednoznaczne granice między dobrem a złem ani jednoznaczne odpowiedzi prawidłowe i błędne, a jej cechą charakterystyczną jest właśnie brak takiego rozstrzygnięcia.

Z lokalnej perspektywy, podobnie jak w informatyce, można powiedzieć, że filozofia polityczna polega na zadawaniu pytań i refleksji. Wobec pojawiających się problemów nieustannie stawia się pytania: dlaczego tak się stało, jakie są lepsze kierunki działania, a następnie podejmuje się refleksję i formułuje odpowiedzi. Również tutaj liczba odpowiedzi rośnie wraz z liczbą osób myślących o problemie.

Dlaczego powinniśmy znać politykę i informatykę

Relacja wzajemnego wywoływania

Oba światy zdają się badać odrębne obszary, lecz w rzeczywistości mają wiele wspólnych cech i w znacznym stopniu stanowią dla siebie nawzajem przyczynę i skutek.

Przedstawię jeden przykład.

  1. Jeśli dane o zdrowiu jednostki zostaną bezpiecznie zapisane w chmurze, to w razie potrzeby będzie można szybko uzyskać do nich dostęp w każdym szpitalu ⇒ rozwiązanie to realizuje się programistycznie, tak aby było bezpieczne i łatwo dostępne, z wykorzystaniem funkcji poszczególnych obszarów.
  2. Kto zatem jest właścicielem tych danych? Ja? Osoba, która je zarejestrowała? A może operator, dostawca oprogramowania, deweloper czy państwo? Dalej: jak daleko te podmioty mogą sięgać w moje dane? Jakie gwarancje mam co do tego, w jakim zakresie i w jaki sposób moje dane osobowe zostaną ochronione? ⇒ Pojawi się debata polityczna dotycząca interesów i różnic w stanowiskach różnych wspólnot oraz pojedynczych osób.
  3. Później, od czasu do czasu, debata polityczna i programistyczne projektowanie oraz implementacja będą się wzajemnie napędzać w nieskończonym cyklu.

W ten sposób informatyka służy rozwiązywaniu istniejących problemów społecznych, a następnie filozofia polityczna pomaga dostrzec powstałe problemy, zakwestionować je i rozwiązać kolejne. W informatyzowanym społeczeństwie współczesnym jest to zjawisko oczywiste.

Czy polityka i informatyka są do siebie podobne

Cechy pozornie odmienne

Oba światy ewoluowały w podobny sposób. Ich podstawy różnią się jednak tak jak relacja między filozofią społeczną a filozofią przyrody, czyli pod względem precyzji wyrażeń: filozofia polityczna opiera się na zmiennych i niejednoznacznych definicjach sformułowanych w języku naturalnym, natomiast informatyka opiera się na niezmiennych i precyzyjnych twierdzeniach wyrażonych raczej w formie wzorów matematycznych niż w języku naturalnym.

Także kierunki ich rozwoju wyrażają się nieco inaczej. Informatyka zakłada, że mogą istnieć rozwiązania optymalne. Z kolei filozofia polityczna operuje pojęciami niejednoznacznymi, takimi jak argument bardziej przekonujący, bardziej uzasadniony czy bardziej etyczny. Uważam jednak, że kierunki obu dziedzin są niemal takie same, ponieważ w gruncie rzeczy zmierzają one do osiągnięcia czegoś lepszego w przyszłości. Nawet w informatyce, która obejmuje wiele dziedzin, w kompresji mediów, nazywanej powszechnie kodekami, dąży się do uzyskania lepszego stopnia kompresji, wydajności oraz niższych kosztów licencyjnych.

Cechy wydające się podobne

Szczególnie wyraźnie widać, że języki programowania i ideologie polityczne oddziałują na ludzi w podobny sposób. Nie da się przyporządkować każdego języka do konkretnej ideologii, jednak dla zabawy przedstawię takie zestawienie.

  • Język C (programista wie, co robi): Chciałbym odnieść go do republikanizmu. Jest to podobne do republiki, która stanowiła podstawę zachodniego systemu politycznego, a także przypomina komunitaryzm, który ceni świadomość obywateli oraz wysiłki poszczególnych osób zmierzające ku lepszym ideałom. Uważam również, że podobnie jak w republice, prawom towarzyszą obowiązki.
  • Java (napisz raz, uruchom wszędzie): Nie wiem. Istnieje silne prawo, a ludzie żyją zgodnie z nim w ujednoliconym trybie życia, jednak jest ono stabilne i w jego ramach istnieje wolność. Ponadto po wejściu w Spring czekają na Państwa różnorodne świadczenia socjalne. Czy można to przypisać do liberalizmu?
  • C# (harmonia produktywności programisty i zasad inżynierii oprogramowania): Wszystko jest dobrze zaprojektowane pod silną ochroną państwa, a w ramach tego, co zaplanowane, można osiągnąć maksymalną produktywność i wydajność. Najlepiej pasuje gospodarka planowana. Nie jest to jednak komunizm, ponieważ środki produkcji zostały uwolnione i nie ogranicza się producentów.
  • Go (porzucamy złożoność, a przyjmujemy praktyczność i efektywność): Nie ma czegoś podobnego. Wszystko rozdaje się hojnie, więc proszę wybrać państwo opiekuńcze.
  • Rust (bezpieczeństwo bez utraty wydajności): Zasady własności i czas życia w Ruście są zarządzane przez surowego władcę, jakim jest kompilator. Ma to na celu zapobieganie nierównościom i zagrożeniom wynikającym z swobodnej działalności gospodarczej jednostek; wspólnota zarządza środkami produkcji i planuje je, zapewniając stabilne życie. Uważam, że jest to socjalizm, ponieważ wolność jednostki zostaje w pewnym zakresie ograniczona w celu zapewnienia bezpieczeństwa i równości całego systemu.
  • JavaScript (elastyczność, tolerancja i wszechobecność): Chciałbym odnieść go do kapitalizmu. W tym języku środki produkcji należą do poszczególnych osób, a nawet urządzenia są przez nie posiadane w dużych ilościach. Dzięki temu powstają różne produkty przemysłowe, a swobodna konkurencja pozwala każdemu dążyć do zysku. Jednak rynek pozbawiony regulacji szybko pogrążył się w chaosie.
  • TypeScript (rozszerzony JavaScript): Oczywiście jest to kapitalizm zmodyfikowany. Wiara w kapitalizm została nadszarpnięta, a aby przeciwdziałać niestabilności rynku, państwo w pewnym stopniu interweniuje. Dotychczasowa całkowita wolność uległa względnemu cofnięciu, jednak nadal każdy może swobodnie wejść na rynek i konkurować.

Ponadto nie mało programistów kłóci się w językach programowania niemal jak w realnych wojnach ideologicznych. Sam język staje się dla programistów znaną ideologią, a zarazem ideałem, do którego należy dążyć.

Państwo a architektura

  • Architektura monolityczna i scentralizowane państwo: Wszystko zawarte jest w jednej, ogromnej bazie kodu i w jednym pliku binarnym. Struktura ta przypomina państwo unitarne z silnym rządem centralnym lub monarchię absolutną. Wszystkie funkcje państwa kontrolowane są przez jeden system władzy.
    • Zaletą jest to, że najłatwiej stworzyć strukturę państwa, a decyzje zapadają szybko. Pozostaje to w zgodzie z szybkim wydaniem całego oprogramowania. Ponieważ wszystkie zasoby i informacje skupiają się w jednym miejscu, zarządzanie jest przejrzyste.
    • Jednak im większe państwo, tym trudniej reagować na zmiany; nawet by zmienić drobne prawo lub instytucję, trzeba przeanalizować i zastosować całość. Istnieje również ryzyko, że problem w jednym obszarze sparaliżuje całe państwo. Również architektura monolityczna, z uwagi na dużą bazę kodu i splecione ze sobą fragmenty, trudno dostosowuje się do zmian: nawet zmiana jednej linii kodu wymaga oszacowania zakresu jej wpływu, a błąd w jednym module łatwo oddziałuje na cały system.
  • MSA i państwo federalne: Poszczególne funkcje systemu są wydzielane jako niezależne usługi. Przypomina to państwo federalne, w którym każda część składa się z wielu niezależnych stanów. Również każda usługa i każdy stan posiadają niezależną infrastrukturę. Ingerencja rządu centralnego jest względnie luźna, a podobnie jak w państwie federalnym nigdy nie wiadomo, kiedy dojdzie do secesji lub przystąpienia.
    • Zasadniczo każdy niezależny stan i każda usługa mogą samodzielnie nowelizować przepisy oraz pisać kod. Dzięki temu nie trzeba synchronizować tempa pracy. Ponadto problem w jednym miejscu rzadko paraliżuje całą federację. Można też wybrać rozwiązania (technologie) najlepiej dopasowane do danego regionu lub dziedziny.
    • Trudnością pozostaje jednak uzgadnianie wspólnych ustaleń oraz tworzenie kanałów komunikacji. Trudno też prowadzić spójną politykę, co może prowadzić do chaosu.
  • EDA (Event Driven Architecture) i społeczeństwo obywatelskie: Zamiast tego, by centralny rząd lub pełnomocnik wydawał bezpośrednie polecenia, obywatele samodzielnie i z własnej inicjatywy podejmują się rozwiązywania pojawiających się problemów społecznych. Przypomina to cechę EDA, w której po wystąpieniu zdarzenia jeden z subskrybentów samodzielnie je przejmuje i przetwarza.
    • Każdy może łatwo wziąć udział. W EDA również nowa usługa może łatwo stać się nowym subskrybentem i uczestniczyć w procesie.
    • Wadą jest jednak to, że nie da się objąć całego przebiegu procesu. Trudno ustalić, kto i w jaki sposób przetworzył zdarzenie, a także nie wiadomo, jaką reakcję łańcuchową wywoła pojedyncze wydarzenie.
  • Architektura warstwowa i feudalizm: Feudalizm to struktura, w której każdy wypełnia przydzielone mu role i obowiązki na swoim poziomie, wykonując zobowiązania wobec wyższej warstwy. Relacje te zawiązywane są na zasadzie swego rodzaju umowy, a ponieważ tworzą ścisły, pionowy układ władzy, można dostrzec podobieństwo do architektury warstwowej.

Choć możliwych jest więcej analogii, najważniejszym przedmiotem niniejszego tekstu nie jest sama struktura, lecz proces jej kształtowania.

Czy rozwiązywanie problemów w programowaniu i w polityce jest takie samo?

Jeśli architektura oprogramowania i ustrój państwa są do siebie podobne, to również proces ich tworzenia biegnie niezwykle równolegle. Rozwijanie oprogramowania w gruncie rzeczy nie różni się od działania politycznego, które polega na budowaniu i rozwijaniu nowego porządku w przestrzeni cyfrowej.

  1. Upublicznienie problemu społecznego i analiza wymagań**:** Wszystko zaczyna się od pytania: „Co jest problemem?”. Tak jak cierpienie i niedogodności społeczeństwa obywatelskiego, ujawnione w debacie publicznej, stają się przedmiotem polityki, tak uciążliwości użytkowników i ich postulaty, poddane analizie, stają się pierwszym kamieniem milowym rozwoju w postaci „specyfikacji wymagań”.
  2. Projektowanie konstytucji i architektury**:** Jakie państwo chcemy zbudować? Jaki system chcemy stworzyć? Tak jak politycy, opierając się na ideologii i filozofii, wznoszą szkielet konstytucji i ustaw, tak architekt, kierując się przekonaniami technicznymi, kreśli plan architektury, która stanie się fundamentem systemu. Decyzje podjęte na tym etapie przesądzają o losie systemu.
  3. Egzekwowanie polityki a implementacja oprogramowania**:** Gdy projekt zostanie ukończony, programiści piszą właściwy kod, a urzędnicy administracji realizują politykę zgodnie z ustawami. Jest to proces, w którym abstrakcyjny plan przybiera konkretną postać i zaczyna działać w świecie rzeczywistym.
  4. Ocena w wyborach a testowanie oprogramowania**:** Polityka zostaje rozliczona przez wybory i opinię publiczną, które decydują o jej legitymacji. Oprogramowanie potwierdza swoją wartość dzięki testom zespołu QA oraz opiniom użytkowników. Oba te procesy wymagają ostatecznie zgody suwerena (obywateli, użytkowników), aby mogły przetrwać.
  5. Reformy instytucjonalne a utrzymanie systemu**:** Raz stworzone prawo i system nie są wieczne. Tak jak w miarę zmian epoki nowelizuje się przestarzałe przepisy i reformuje instytucje, tak również oprogramowanie musi dostosowywać się do zmieniającego się otoczenia, a przestając prowadzić „refaktoryzację”, czyli usuwać wewnętrzne nieefektywności, staje się martwym kodem.

W ten sposób cały proces, od definiowania problemu, przez projektowanie, implementację i weryfikację, aż po nieustanne doskonalenie, pokazuje, że oba światy dzielą ten sam rytm rozwiązywania problemów.

Dzień nowych prawodawców

Społeczeństwo informacyjne sprawiło, że odległość między szczytami tych dwóch filozofii straciła znaczenie. Kod nie jest już zwykłym układem logicznym, lecz stał się „prawem” (Code is Law), które określa relacje między ludźmi, rozdziela władzę i urzeczywistnia wartości społeczne. Jeśli architektura, którą projektujemy, przypomina strukturę rządzenia państwem, a procesy rozwojowe, których przestrzegamy, są tożsame z procesem uzgadniania decyzji politycznych, to kim właściwie jesteśmy my, programiści? I co powinni robić politycy? Dlatego programista powinien dziś refleksyjnie zastanawiać się nie tylko nad logiką kodu, lecz także nad społeczeństwem, które ten kod kształtuje, a polityk powinien rozumieć nie tylko logikę głosów, lecz także logikę technologii poruszającej światem. Ta ogromna władza, którą każdy z nas sprawuje w swoim świecie, pociąga za sobą równie wielką odpowiedzialność etyczną.