Computação não depende da existência de computadores [PT-BR]
Tags: discuss, braziliandevs
Published: 2024-04-17 14:37:51

## Introdução

Muitas vezes, a computação é associada exclusivamente ao uso de computadores.

Quando fiz o curso de Ciência da Computação, no início eu conhecia a computação aplicada e a área de engenharia de computação, mas com o tempo fui conhecendo a área de computação teórica, que é mais abstrata e que passaremos a focar.

Na área de desenvolvimento de software, que eu trabalho atualmente, é essencial dominar linguagens de programação, frameworks, bibliotecas, arquitetura e engenharia de software, além de boas práticas. Também é crucial entender as dinâmicas do mercado, que direcionam as tecnologias e os avanços no setor. Com isso em mente, nossos cursos são desenhados para atender às necessidades da indústria, com um foco intenso nos aspectos técnicos e práticos, como o desenvolvimento de aplicações web e mobile, o uso de linguagens comerciais, e a implementação de metodologias ágeis. O objetivo final é entregar software que não apenas funcione eficientemente em produção, mas que também atenda às demandas específicas dos clientes e do mercado. Cursos que não alinham com essas necessidades de mercado podem enfrentar uma recepção menos positiva.

As ferramentas que usamos no nosso dia a dia nascem e morrem com uma velocidade incrível. Pretendo fazer um exercício mental: pensar na computação sem linguagens, frameworks, bibliotecas, IDEs, bancos de dados e, até mesmo, sem um computador físico ou digital. O que realmente sobra de essencial na computação?

A ciência da computação, em sua base, é o estudo do processamento de informações e da resolução sistemática de problemas através do pensamento lógico e algorítmico.

Vou abordar abaixo essas duas formas de pensamento que formam a base da computação.

## Pensamento lógico

A lógica formal é um campo interdisciplinar entre filosofia e matemática, dedicado ao estudo das formas de argumentação válida, isto é, das estruturas argumentativas nas quais as conclusões são derivadas necessariamente das premissas. Considere o seguinte raciocínio:

**Premissa 1**: Todos os humanos são mortais.
**Premissa 2**: Sócrates é um humano.
**Conclusão**: Portanto, Sócrates é mortal.

Neste exemplo, usamos a lógica formal para analisar a estrutura do argumento e verificar se a conclusão é realmente derivada das premissas.

Na filosofia, a lógica é utilizada para estruturar argumentos, analisar raciocínios filosóficos, e clarificar debates sobre ética, metafísica, conhecimento, e linguagem.

Na matemática, a lógica é empregada para formular teoremas, demonstrar proposições, estruturar raciocínios rigorosos e solucionar problemas em áreas como álgebra, geometria, cálculo e teoria dos números.

Esse campo serve como o alicerce fundamental para a computação, que é construída com base nos princípios da lógica formal.

## Pensamento algorítmico

Algoritmos são conjuntos de regras para resolver problemas e podem ser aplicados em muitas áreas fora da computação tradicional, como matemática, engenharia, economia, biologia, entre outras.

Na vida cotidiana, seguimos rotinas e procedimentos que podem ser vistos como algoritmos, como receitas de culinária, instruções de montagem de móveis, ou até mesmo o processo que adotamos para tomar decisões. Essas sequências de passos ajudam a organizar e executar tarefas de maneira eficiente e previsível.

Alguns exemplos mais notaveis de algortimos que podem ser aplicados de forma manual:

**Algoritmo de Gale-Shapley**: Resolve o problema de emparelhamento estável. O algoritmo é usado por exemplo para emparelhar cada residente a um hospital de tal forma que se evite situações em que um residente e um hospital prefeririam estar emparelhados um com o outro ao invés de suas atuais alocações, garantindo assim um emparelhamento estável onde ninguém tem incentivo para mudar de parceiro. 
**Algoritmo de Euclides**: Calcula o máximo divisor comum entre dois números.
**Algoritmo de Sieve of Eratosthenes**: Encontra todos os números primos até um limite específico.
**Algoritmo de Fibonacci**: Gera a sequência de Fibonacci, aplicável em diversos campos como matemática e arte.
**Algoritmo de Dijkstra**: Utilizado para encontrar o caminho mais curto em grafos com pesos positivos, um exemplo prático seria planejar a rota mais curta e eficiente em viagens.

O pensamento lógico é fundamental na criação de algoritmos, oferecendo a estrutura necessária para desenvolver passos claros e precisos que resolvem problemas de maneira eficiente e sistemática. Da mesma forma, computadores abstratos, como a máquina de Turing, empregam esses algoritmos e o pensamento lógico para simular o processamento de informações.

## Computadores abstratos

A máquina de Turing é um modelo teórico que ajuda a entender os limites e possibilidades de qualquer computador. Imagine-a como um conceito que descreve a menor unidade de computação possível, capaz de simular qualquer algoritmo. Esse modelo é fundamental porque nos permite identificar que problemas um computador pode ou não resolver. É uma base teórica essencial que influencia não só a computação, mas também outras áreas como matemática e filosofia.

Embora a máquina de Turing seja um modelo matemático e não um dispositivo construído fisicamente, ela define o funcionamento fundamental de todos os computadores digitais tradicionais que usamos hoje, desde smartphones e consoles de videogame até notebooks e tablets.

Assim como a máquina de Turing, temos também o Cálculo Lambda, um sistema matemático centrado em funções e suas interações. Este modelo abstrato é fundamental na lógica matemática e na teoria dos conjuntos. Na filosofia, é utilizado para modelar e analisar estruturas lógicas e o funcionamento da linguagem humana. Na linguística, ajuda a entender como os significados são construídos na linguagem natural. Além disso, na área de cognição, o Cálculo Lambda pode ser empregado para compreender como conceitos abstratos são processados no cérebro.

Tanto a máquina de Turing quanto o cálculo lambda são modelos fundamentais de computação que, apesar de suas abordagens distintas, são essenciais para entender os limites do que pode ser computado, *quais problemas do universo podem ou não ser resolvidos através da computação*.

Quando me dei conta disso, acreditava que um computador poderia resolver qualquer problema do universo, limitado apenas pelo avanço tecnológico atual e pelo investimento disponível. Imaginava que, eventualmente, teríamos computadores tão avançados que poderiam solucionar todos os problemas. No entanto, com o tempo, percebi que existem problemas que demandariam mais tempo do que a existência do universo para serem resolvidos, ou questões que simplesmente não podem ser formuladas em algoritmos.

Saindo da parte dos computadores abstratos, agora entramos nos computadores naturais, que ainda fogem do computador digital tradicional que conhecemos.

## Computadores naturais não construídos pelo homem

Fenômenos como fotossíntese, padrões climáticos e evolução biológica podem ser compreendidos como processos computacionais. Esses sistemas naturais, executam processamento de informações de maneira eficaz.

Durante a fotossíntese, as plantas capturam energia solar e a convertem em energia química (glicose) através de uma série de reações químicas altamente eficientes e reguladas, semelhante a um sistema computacional que processa e otimiza dados. As plantas ajustam esse processo com base nas condições ambientais, como luz, água e dióxido de carbono, comparável à forma como um sistema computacional ajusta suas operações conforme as entradas recebidas. Além disso, elas armazenam energia convertida para uso futuro, de forma análoga ao armazenamento de dados em computadores, destacando a eficiência e a otimização deste sistema biológico, que foi aperfeiçoado ao longo de milhões de anos de evolução.

Uma célula pode ser considerada um tipo de "computador biológico", que executa algoritmos complexos para processar informações molecularmente, guiadas pelo DNA, que age como um sistema de armazenamento de dados. Respondendo a estímulos ambientais, células ajustam suas funções vitais de maneira sistemática, similar ao processamento de entradas em computadores. Elas também se comunicam através de sinais químicos, estabelecendo redes que regulam operações críticas, em paralelo com redes de computadores que transmitem e processam dados. Adicionalmente, células otimizam continuamente sua eficiência energética e operacional, utilizando estratégias biológicas que espelham a otimização em sistemas computacionais.

O conhecimento da computação teórica e seus modelos de pensamento pode ajudar a entender a própria vida, tanto de forma geral quanto de maneira mais específica.

Confesso que, no início, acreditava que existia uma grande diferença entre tecnologia digital e áreas aparentemente não relacionadas como natureza, vida, mundo animal e biologia. No entanto, hoje percebo que muitos dos exemplos mais interessantes envolvem a computação imitando ou aprendendo com a vida na Terra.

## Visão Geral de Alguns Campos da Computação Teorica

A teoria da computação é rica em diversos campos e pode ser aplicada de várias formas em nosso mundo. Aqui, apresento alguns exemplos nos quais, mesmo sem a existência de computadores, essas áreas ainda possuem uma utilidade profunda. Cito apenas alguns para inspirar você e abrir sua mente para buscar outros possíveis campos que se encaixem nessa categoria.

### Teoria dos Grafos 

Essencial para a matemática e a organização teórica de sistemas, a teoria dos grafos é aplicada em muitas áreas que não envolvem diretamente computadores, como teoria de redes, sociologia, biologia, e mais. Na ecologia, por exemplo, podem modelar redes de interações entre espécies, representando os organismos como vértices e suas relações como arestas, crucial para estudar a dinâmica de ecossistemas. Na logística, ajudam a otimizar cadeias de suprimentos ao representar fábricas e distribuidores como vértices e rotas de transporte como arestas. Em urbanismo, grafos facilitam o planejamento e a gestão do tráfego ao modelar interseções e vias como pontos e conexões. Essas estruturas também são essenciais em áreas como a sociologia, para analisar redes sociais e entender padrões de comunicação e influência entre indivíduos.

### Teoria da informação

Área que se concentra na quantificação, armazenamento e comunicação da informação.
Um exemplo prático é a utilização de código Morse em comunicações de rádio, onde diferentes combinações de sinais curtos e longos (pontos e traços) são usadas para representar letras e números.

Outro exemplo seria a "dança das abelhas". Quando uma abelha exploradora descobre uma fonte de alimento, ela retorna à colmeia e realiza uma dança específica, cujo padrão e intensidade comunicam a localização exata do alimento em relação ao sol e a distância da colmeia. Esta dança é uma forma de codificação de informações que permite às abelhas compartilhar dados vitais sobre recursos de forma incrivelmente eficiente. A precisão e a complexidade dessa comunicação natural demonstram como conceitos de codificação e transmissão de informações são fundamentais não apenas em tecnologias humanas, mas também em comportamentos animais sofisticados.

### Álgebra Booleana

Fundamental em diversas áreas práticas, atuando como base para decisões binárias de "sim/não". Por exemplo, no setor financeiro, ela orienta decisões de compra e venda de investimentos através de critérios claros e definidos. Na logística, é utilizada para planejar a distribuição de produtos e a organização de itinerários de transporte. Na engenharia civil, princípios de "se-então" ajudam a garantir a funcionalidade e segurança das estruturas. 

Além disso, mesmo em sistemas manuais como a irrigação agrícola, a observação das condições do solo e previsões meteorológicas pode guiar a abertura ou fechamento de válvulas, demonstrando a aplicabilidade da álgebra booleana mesmo sem tecnologia avançada.

### Teoria dos Autômatos

Esta teoria estuda máquinas abstratas e os problemas computacionais que podem ser resolvidos com essas máquinas.

No mundo da música, autômatos celulares têm sido usados para compor peças musicais que seguem regras específicas, criando harmonias e ritmos a partir de padrões matemáticos simples.

Jogos de tabuleiro e estratégia que envolvem regras fixas e um número finito de movimentos possíveis podem ser analisados usando teoria dos autômatos para desenvolver estratégias ou prever resultados.

Aplicada no Direito para modelar e simular processos judiciais e administrativos. Utilizando esta teoria, é possível representar as diversas etapas de um caso legal como estados em um autômato, com transições entre esses estados determinadas por condições específicas como decisões, prazos e ações das partes. Isso permite prever os impactos de diferentes variáveis no andamento e no resultado dos processos, oferecendo uma ferramenta para análise e otimização do sistema jurídico.

## Conclusão

Em suma, a computação transcende a simples existência de computadores físicos ou digitais, sendo enraizada no pensamento lógico e algorítmico. Ao compreendermos essa essência, percebemos que a ciência da computação é uma poderosa ferramenta para solucionar problemas, inovar, entender e moldar o mundo ao nosso redor.

Decidi escrever sobre isso porque, como desenvolvedor de software, meu dia a dia é dominado por questões práticas e pela aplicabilidade da computação em sistemas e computadores reais. A parte mais teórica e abstrata, que explorei durante a faculdade, acabou ficando no passado. No entanto, pretendo resgatar esse aspecto na minha vida pessoal, buscando construir um conhecimento mais sólido e duradouro. Agradeço sinceramente a quem chegou até o final. Espero que o conteúdo tenha sido inspirador para vocês!

Agradeço a Jean Jardim do [dev init](https://open.spotify.com/show/3gHPZGNDjvTuKtlM2JVS74?si=5b78031acddf40d2) e Diego Penha pela revisão cuidadosa deste texto.