GoSuda

Política e computação

By snowmerak views ...

Filosofia

O que você acha que é a filosofia? Segundo o dicionário, ela é a atividade de pensar sobre a vida no mundo e as questões fundamentais e buscar respostas. Também é possível adotar uma definição pelo seu caráter prático: não a resolução de problemas com respostas predeterminadas, mas a ampliação do pensamento por meio da mesma pergunta, ou de perguntas que se encadeiam uma após a outra, e o compartilhamento dessas respostas.

No passado, durante a graduação, cursei uma disciplina relacionada à filosofia política. Lembro que, na minha apresentação pessoal, o professor disse algo semelhante a a filosofia política e a ciência da computação são disciplinas que se situam nos extremos de filosofias diferentes. Não foram exatamente essas palavras e essa frase, mas creio que o sentido era mais ou menos esse.

Ciência da Computação

Eu penso que a ciência da computação é a investigação fundamental para resolver problemas lógicos. Por isso, pessoas diferentes que pensam sobre um mesmo problema podem chegar a respostas diversas. O exemplo mais representativo é a ordenação. Para o problema de ordenar dados dispostos em sequência, existem vários métodos de investigação, como bolha, inserção, seleção, intercalação, quicksort, heap e Tim sort. E, ao dividir e analisar esses métodos, podem surgir algoritmos melhores.

Além disso, do ponto de vista local, pode-se dizer que ela consiste em construir e provar. Mesmo a ordenação mencionada acima constrói continuamente a forma de ordenar e prova o resultado. Para os desenvolvedores, um exemplo mais próximo é o planejamento de projetos: ao surgir um projeto, implementa-se e demonstra-se que ele funciona corretamente.

Filosofia Política

Eu penso que a filosofia política é a investigação fundamental para resolver problemas sociais. Ela levanta repetidamente questões sobre problemas já existentes, que variam em cada época, produz respostas e as compartilha com o presente e o futuro. Ela trata principalmente de valores abstratos, como justiça, liberdade, igualdade e poder, que são interpretados de maneira diferente conforme o tempo e a cultura, e possui a característica de não haver limites claros entre o bem e o mal, nem respostas certas ou erradas definidas, permanecendo indefinida.

Além disso, do ponto de vista local, como na ciência da computação, pode-se dizer que ela consiste em questionar e refletir. Sobre os problemas que ocorrem, questiona-se incessantemente, reflete-se sobre por que aconteceu assim e quais direções melhores existem, e então se chega a uma resposta. Também aqui surgem muitas respostas, proporcionalmente ao número de pessoas que pensam.

Por Que Devemos Conhecer Política e Computação

Relação de Invocação Mútua

Os dois mundos parecem explorar campos diferentes, mas, na realidade, compartilham muitos pontos semelhantes e têm, em grande medida, causas e consequências entre si.

Vou dar um exemplo.

  1. Se os dados de saúde pessoais forem armazenados com segurança na nuvem, poderão ser acessados rapidamente por cada hospital quando necessário ⇒ isso é implementado por meio de programação, utilizando funções de cada área de forma segura e com boa acessibilidade.
  2. Então, a quem pertencem esses dados? A mim? Ao responsável pelo cadastro? Ou à operadora, à desenvolvedora, ao Estado? E até onde essas entidades podem ver os meus dados? Até onde e de que maneira posso ter a garantia de que minhas informações pessoais serão protegidas? ⇒ Surgirá um debate político sobre as diferenças de posição e interesse entre diferentes comunidades e indivíduos.
  3. A partir daí, o desenho e a implementação por programação e o debate político se sucederão repetidamente, encadeados uns aos outros.

Assim, a ciência da computação é empregada para resolver problemas sociais existentes e, novamente, a filosofia política é empregada para reconhecer e resolver os problemas surgidos, levantando questionamentos e preparando a solução do próximo problema. Na sociedade da informação contemporânea, esse fenômeno é natural.

Política e Computação São Semelhantes?

Pontos Que Não Parecem Semelhantes

Além disso, os dois mundos evoluíram de forma parecida. Contudo, sua base apresenta a diferença entre expressões vagas e expressões claras, como ocorre na relação entre a filosofia social e a filosofia natural. A filosofia política se fundamenta em definições variáveis e vagas, formuladas em linguagem natural, enquanto a ciência da computação se fundamenta em proposições invariáveis e claras, formuladas em fórmulas matemáticas e não em linguagem natural.

Além disso, a direção também é expressa de maneira sutilmente diferente. A ciência da computação considera que pode existir uma solução ótima. Já a filosofia política trata de conceitos vagos, como um argumento mais convincente, um argumento mais fundamentado ou um argumento mais ético. Contudo, a meu ver, a direção dos dois é quase semelhante, pois, em última instância, ambas parecem buscar um próximo melhor. Por exemplo, mesmo a ciência da computação possui diversas áreas, mas, de forma representativa, no que se refere à compressão de mídia, chamada de codec, empenha-se em apresentar melhor taxa de compressão, desempenho de compressão e custo de licenciamento.

Pontos Que Parecem Semelhantes

De forma representativa, linguagens de programação e ideologias de governo parecem aplicar-se de maneira análoga aos seres humanos. Não é possível relacionar cada linguagem a uma ideologia, mas, por diversão, vou enumerá-las.

  • Linguagem C (o desenvolvedor sabe o que está fazendo): gostaria de compará-la ao republicanismo. Isso porque ela se assemelha ao regime republicano, que historicamente serviu de base ao sistema político ocidental, e também se parece com o comunitarismo, que valoriza a consciência de cada cidadão e o esforço individual em direção a um ideal melhor. Além disso, senti que nela, assim como nos direitos, a responsabilidade acompanha a liberdade.
  • Java (escreva uma vez, execute em qualquer lugar): não sei. Há leis fortes e vive-se uma vida uniformizada conforme elas, mas essa estrutura é estável e, dentro dela, há liberdade. E, ao entrar no Spring, há diversos benefícios sociais esperando por vocês. Devo classificá-la como liberalismo?
  • C# (harmonia entre produtividade do desenvolvedor e princípios da engenharia de software): sob a proteção de um governo forte, tudo está bem planejado, e dentro do que foi planejado é possível extrair ao extremo a produtividade e o desempenho. A economia planificada lhe cai bem. Ela não é comunismo porque libera os meios de produção e não restringe os produtores.
  • Go (abandone a complexidade e adote a praticidade e a eficiência): não há nada semelhante. Ela distribui tudo, então adotem o estado de bem-estar social.
  • Rust (segurança sem perda de desempenho): a posse e os tempos de vida (lifetimes) do Rust são administrados por um governante rigoroso, o compilador. Isso parece buscar, para impedir a desigualdade e os riscos gerados pela atividade econômica livre dos indivíduos, que a comunidade administre e planeje os meios de produção, garantindo uma vida estável, e que, ao limitar parcialmente a liberdade individual, persiga a segurança e a igualdade de todo o sistema; por isso, penso que se trata de socialismo.
  • JavaScript (flexibilidade, tolerância e presença em toda parte): gostaria de compará-la ao capitalismo. Essa linguagem faz com que os meios de produção estejam nas mãos dos indivíduos e, além disso, cada um possui equipamentos em abundância. Graças a isso, surgem diversos produtos industriais, e, por meio da livre concorrência, qualquer pessoa pode buscar lucro. Contudo, um mercado sem regulação logo mergulhou no caos.
  • TypeScript (o JavaScript em expansão): naturalmente, trata-se do capitalismo revisado. A crença no capitalismo se abala, e, para superar a instabilidade do mercado, o governo passa a intervir em certa medida. A liberdade plena anterior regrediu relativamente, mas ainda assim qualquer pessoa pode ingressar livremente no mercado e competir.

E não são poucos os desenvolvedores que, como numa guerra ideológica real, travam muitas batalhas por meio de linguagens. A própria linguagem é, para o desenvolvedor, uma ideologia familiar e, ao mesmo tempo, um ideal a ser perseguido.

Estado e Arquitetura

  • Arquitetura monolítica e Estado centralizado: tudo está contido em uma única base de código enorme e em um único binário. Isso tem estrutura semelhante a um Estado unitário com governo central forte ou a uma monarquia absoluta. Todas as funções do Estado são controladas por um único sistema de poder.
    • Tem a vantagem de ser a forma mais fácil de constituir um Estado e de as decisões saírem rapidamente. Isso segue o mesmo raciocínio da vantagem de o software inteiro ficar pronto rapidamente. Como todos os recursos e informações se concentram em um só lugar, a gestão é clara.
    • Contudo, quanto maior o Estado, mais difícil é responder às mudanças; mesmo para alterar uma pequena lei ou instituição, é preciso examinar e aplicar o conjunto inteiro. Também existe o risco de um problema em um setor paralisar o Estado como um todo. A arquitetura monolítica igualmente, por causa da base de código extensa e do código entrelaçado, dificulta a adaptação às mudanças; mesmo para alterar uma única linha de código, é preciso calcular o escopo de impacto, e um problema em um módulo tende a afetar todo o sistema.
  • MSA e Estado federal: cada função do sistema é separada em serviços independentes. Isso guarda semelhança com um Estado federal, em que cada parte do Estado é composta por vários estados autônomos. Além disso, cada serviço e cada estado possuem infraestrutura independente. A interferência do governo central é relativamente frouxa, e também é semelhante o fato de nunca se saber quando ocorrerão independências e adesões.
    • Basicamente, cada estado autônomo e cada serviço podem revisar leis ou escrever código de forma independente. Por isso, não é necessário sincronizar o ritmo uns dos outros. Além disso, mesmo que um problema surja em um ponto, dificilmente a federação inteira ficará paralisada. E é possível escolher instituições (tecnologias) adequadas a cada região ou área.
    • Contudo, é difícil alcançar consenso mútuo ou criar canais de comunicação. Pode ser complicado manter políticas coerentes, o que pode gerar confusão.
  • EDA (Event-Driven Architecture) e sociedade civil: em vez de um governo central ou representantes darem ordens diretamente, os próprios indivíduos assumem de forma proativa e autônoma os problemas sociais que surgem e os resolvem. Isso se assemelha à característica da EDA, em que, ao ocorrer um evento, algum dos assinantes o recolhe de forma autônoma e o processa.
    • Qualquer pessoa pode participar com facilidade. Na EDA também, um novo serviço pode tornar-se facilmente um novo assinante e participar do processo.
    • Contudo, há a desvantagem de não ser possível compreender o fluxo como um todo. É difícil rastrear quem processou e como, e não se sabe qual reação em cadeia um evento provocará.
  • Arquitetura em camadas e feudalismo: o feudalismo é uma estrutura em que cada um, em sua camada, cumpre o papel e a responsabilidade que lhe foram atribuídos e exerce as obrigações em relação à camada superior. Essas relações são estabelecidas como uma espécie de contrato e formam uma dominação hierárquica vertical rigorosa, por isso é possível encontrar semelhanças com a arquitetura em camadas.

Assim, embora seja possível fazer muitas outras analogias, o núcleo deste texto está no processo de construção dessas estruturas, mais do que na estrutura em si.

A Resolução de Problemas na Programação e na Política É a Mesma?

Se a arquitetura de software e o sistema de Estado se assemelham, o processo de construção de ambos também traça linhas paralelas de maneira surpreendente. O processo de desenvolvimento de software não é, na prática, diferente de um ato político que constrói e desenvolve uma nova ordem no espaço digital.

  1. Publicização de problemas sociais e análise de requisitos: tudo começa com a pergunta "qual é o problema?". Assim como o sofrimento e o incômodo da sociedade civil se tornam pauta política ao serem publicizados, as dificuldades e as demandas dos usuários, após análise, tornam-se o primeiro marco do desenvolvimento, que é a "especificação de requisitos".
  2. Desenho constitucional e design de arquitetura: que Estado queremos construir? Que sistema queremos construir? Assim como os políticos erguem o arcabouço da constituição e das leis com base em ideologias e filosofias, o arquiteto traça a planta da arquitetura que servirá de base ao sistema, com fundamento em convicções técnicas. As decisões desta etapa determinam o destino do sistema.
  3. Execução de políticas e implementação de software: concluído o projeto, os desenvolvedores escrevem o código real, e os funcionários administrativos executam as políticas conforme as leis. É o processo em que um plano abstrato nasce como uma entidade concreta que funciona no mundo real.
  4. Julgamento por meio de eleições e testes de software: as políticas são julgadas quanto à sua legitimidade por meio de eleições e da opinião pública. O software tem seu valor verificado por meio dos testes da equipe de QA e do feedback dos usuários. Ambos, afinal, só podem sobreviver se obtiverem o consentimento dos soberanos (cidadãos, usuários).
  5. Reforma institucional e manutenção do sistema: leis e sistemas, uma vez criados, não são eternos. Assim como se revisam leis antigas e se reformam instituições conforme as mudanças do tempo, o software também precisa se adaptar a um ambiente em transformação e aprimorar suas ineficiências internas por meio de "refatoração"; no momento em que essa prática cessa, ele se torna código morto.

Desse modo, todo o percurso, desde a definição do problema até o projeto, a implementação, a verificação e a melhoria contínua, mostra que os dois mundos compartilham o mesmo ritmo na resolução de problemas.

O Dia dos Novos Legisladores

A sociedade da informação tornou insignificante a distância entre os extremos dessas duas filosofias. O código deixou de ser um simples circuito lógico e tornou-se um direito (Code is Law) que define as relações entre as pessoas, distribui o poder e concretiza valores sociais. Se a arquitetura que projetamos se assemelha à estrutura de governo de um Estado, e se o processo de desenvolvimento que seguimos equivale ao processo de consenso político, quem somos nós, os desenvolvedores? E o que deve fazer o político? Por isso, o desenvolvedor deve agora refletir não apenas sobre a lógica do código, mas também sobre a sociedade que esse código irá criar, e o político deve compreender não apenas a lógica dos votos, mas também a lógica da tecnologia que move o mundo. Isso porque o enorme poder que exercemos em nossos respectivos mundos vem acompanhado de igual responsabilidade ética.