Se, lá no fundo, o computador é só uma “máquina de calcular superpotente”, como ela pode fazer tanta coisa, em tantos lugares, com tanta gente?
Vamos começar com um exercício mental: tente se lembrar da última coisa que você viu/fez que não envolvia algum tipo de computador ou sistema digital. Ok, eu vou te dar algum tempo pra pensar. O tempo de você ler mais essa frase. E talvez essa aqui também. Pronto, conseguiu? Talvez sim, mas imagino que tenha sido uma tarefa difícil. A verdade é que, atualmente, os computadores fazem parte efetivamente da nossa vida. Seja no uso pessoal, no celular, ou ainda diretamente, no sistema do banco, de uma loja de roupas, de um restaurante ou do próprio sistema de saúde.
Mas, afinal, como a Computação está em tantos lugares diferentes? A resposta pra essa é até que simples: os computadores estão em todos os lugares porque conseguem fazer uma infinidade de coisas diferentes. Escrever textos, fazer planilhas financeiras, conversar com outras pessoas, assistir filmes e vídeos, ouvir música, simular mundos altamente realistas, saber a cotação do Boi Gordo na semana que vem… E como ele faz tudo isso?
Sir Arthur Charles Clarke, escritor britânico de ficção científica e autor do livro que deu origem ao clássico 2001: Uma Odisseia no Espaço, já dizia em uma das suas leis que “qualquer tecnologia suficientemente avançada é indistinguível de magia”. E, pra muita gente ainda hoje, tudo que acontece dentro de um computador ainda parece mágica… Enquanto, na verdade, a sua semente reside na mãe de todas as ciências exatas: a Matemática.
A matemágica
Se você procurar por “linha do tempo dos computadores” no Google, você vai achar diferentes links e textos ― e praticamente todos vão começar pelo ábaco ou por outra máquina de calcular muito antiga. Se você for em algum museu de computação/tecnologia também vai se deparar com ábacos, máquinas de calcular, tábuas de cálculo e as calculadoras mais estranhas. Isso tudo porque um computador, na sua essência histórica e, de certa forma, em sua essência técnica, é uma máquina que realiza operações matemáticas e toma decisões a partir desses resultados.
Pulando alguns séculos de história da computação e olhando para as máquinas atuais, as coisas ficam ainda mais complicadas! Afinal, você consegue imaginar como circuitos elétricos podem fazer contas matemáticas? É por isso que, em última instância, os computadores usam o sistema binário de numeração, aquele cujos únicos algarismos possíveis são 0 e 1.
Essa decisão foi feita pelo simples fato de que um componente elétrico não consegue escrever um número em uma microlousa de giz e entender aquilo, mas consegue reagir de formas diferentes de acordo com a quantidade de corrente elétrica que passa por ele. Baixa energia é, geralmente, identificada como o algarismo 0; alta energia, como o algarismo 1. É por isso que, muitas vezes, você pode também ver pessoas da computação falando de “aberto e fechado”, “alto e baixo”, “ligado e desligado”… Todas essas analogias são bem válidas nesse caso.
A partir daí, os circuitos mais básicos são planejados a conseguirem fazer coisas com essas informações binárias. Além das operações matemáticas básicas que aprendemos na escola, existem algumas outras, bem úteis no contexto binário. Você também pode colocar na lista comparações entre números, muito úteis para criar condições e repetições.
Por fim, adicione uma forma de enviar e interpretar os comandos dados por um ser humano, uma forma de ver os resultados e, pronto, tudo indica que você tem os principais elementos de um “computador teórico”. É claro que fazer tudo isso funcionar, no mundo real, não é tão simples quanto eu escrever algumas poucas palavras aqui, mas esse “básico” era o objetivo máximo dos pioneiros da computação.
É só isso!?
Como tudo na vida, em teoria, sim. Na prática, as coisas são um pouco mais complicadas, claro. A imagem abaixo, por exemplo, é o diagrama de um dos meus primeiros trabalhos da graduação. A ideia era usar portas lógicas ― falaremos delas em breve, mas, rapidamente, elas são representações teóricas de algumas operações que podem ser feitas com números binários ― para planejar uma Unidade Lógico-Aritmética (ULA) simples, um circuito lógico capaz de realizar as quatro operações básicas (adição, subtração, multiplicação e divisão) e calcular a raiz quadrada de um número. Cada um desses retângulos grandes representam outro circuito menor e mais genérico, que não estão na figura.
Obviamente isso foi um trabalho do primeiro semestre, então esse circuito poderia ter ficado bem menor e bem mais otimizado do que ele foi, mas funcionava muito bem, obrigado. Ao inserirmos essa lógica em uma placa especial éramos capaz de escolher dois números usando algumas chaves (que eram mostrados em alguns displays), escolher a operação a ser realizada e ver o resultado em um terceiro display. Ah, vale a nota: isso é um circuito lógico (ou seja, a representação de um fluxo de combinações e dados) e não o circuito físico mesmo, com resistores, transistores e capacitores, que seria um pouco mais complicado e estranho do que isso.
Do outro lado, esse vídeo mostra um pouco da tecnologia por trás do filme Zootopia, o Oscar de Melhor Filme de Animação em 2017. Por mais que você não entenda inglês, só de ver as imagens dos programas usados para modelar cada um dos pêlos de cada animal, tudo para tornar o mundo dos animais mais realista e verossímil… E, sim, no final das contas, o que o computador está fazendo ali são milhares e milhares de contas matemáticas por segundo para calcular a posição de tudo que está na tela e transformar aquilo em um sucesso de bilheteria.
Se eu já tive um trabalho absurdo para fazer uma simples lógica capaz de fazer operações simples com números inteiros, deve ser difícil de imaginar como é possível simular um mundo completamente tridimensional calculando a posição de cada fio do pêlo de cada animal…
O poder da abstração
A diferença entre mim e os engenheiros de software da Disney… são várias, no caso. Mas o que importa para o nosso problema, principalmente, é o escopo em que as duas situações estão inseridas. Em qualquer curso de programação que você fizer atualmente, em quase todas as linguagens fazer dois números somarem é uma das tarefas mais simples de todas. Afinal, por que eu tive tanto trabalho pra isso?
Como eu já havia dito antes, eu não desci completamente a toca do coelho: aquilo está longe de ser o circuito físico, eletrônico, para formar uma ULA. Com aquela representação, eu não tenho noção de quantos transistores eu vou ter de usar, qual deve ser o tamanho da minha placa, quanto de solda vai ser usado para tornar aquilo uma placa eletrônica funcional. Eu “ignorei” esses fatos e considerei que, se uma porta lógica está ali para ser usada, ela pode ser implementada e vai ser implementada. Esse é o poder da abstração. A ciência da computação é baseada em abstração. Abstração é a ideia de isolar apenas as características importantes de um conceito ou fenômeno, em detrimento dos detalhes.
Tanto que esse “fenômeno” não para por aí. Circuitos lógicos para todos os componentes do seu computador já são e serão feitos até que se determine como eles funcionarão e qual é o padrão. A partir daí você não tem mais que fazer um circuito para fazer com que dois números sejam somados. Você sabe que essa função já existe e o processador será capaz de realizar essa operação caso precise; você precisa apenas dar o comando. É nesse ponto que surge a linguagem de máquina, a forma mais simples (ou complicada, dependendo do ponto de vista) para “conversar” com um computador. Todos os comandos são números binários, ou seja, formados por 0 ou 1, que indicam qual função deve ser realizada, quais operandos devem ser usados e onde a resposta deve ser armazenada.
Mas, é claro que fazer isso também é deveras complicado. O cérebro humano não está realmente acostumado a trabalhar com tantos elementos iguais para modelar uma ideia… Imagina que droga deve ser confundir o comando “1101”, da adição, e o comando “1011”, da subtração, por exemplo? É aí que a abstração entra em cena novamente, com a criação da linguagem de baixo nível (como o Assembly, por exemplo). Usando palavras para substituir tantos zeros e uns ― como “addi” para somar ou “sub” para subtrair ―, programar um computador torna-se uma tarefa (só) um pouco menos penosa.
Daí em diante a abstração só continua aumentando, criando outros conceitos fundamentais para entender a dinâmica da ciência de computação. As linguagens de alto nível são as conhecidas por criar mais uma camada em cima do Assembly, permitindo uma programação ainda mais próxima do ser humano, em diferentes níveis. Enquanto C é uma das de menor nível (entre as de alto nível), por ainda deixar a cargo do programador cuidar e tratar vários detalhes técnicos, Python cria mais uma série de camadas extras e coloca a legibilidade das instruções acima de tudo, ou seja, se é mais fácil de ler, mais fácil de escrever.
Um dos níveis mais extremos de abstração são softwares utilizados para ensinar programação a crianças como, por exemplo, o Scratch. Criado dentro do MIT, ele traz uma forma visual de programar, no qual você pode arrastar blocos coloridos para programar. A criança que faz um pequeno joguinho em Scratch, por exemplo, não faz nem ideia de todas as camadas que são necessárias para que aquilo funcione, mas, lá no fundo, tanto ela, quanto eu, quanto os engenheiros da Disney estão fazendo a mesma coisa: dizendo quais operações matemáticas a máquina deve fazer e em qual ordem elas devem ser feitas.
Ainda parece magia?
Aqui fica, pelo menos, o começo da resposta a nossa pergunta inicial: a computação está em todos os lugares porque ela não é uma coisa só. A abstração permite com que ela seja desenvolvida em camadas, por profissionais diferentes com um ideal comum: uma máquina de calcular cada vez mais rápida, eficiente e, claro, mais útil.
A abstração também é a responsável por tornar a Computação um lugar tão versátil e, claro, um lugar onde todos podem aprender como funciona esse mundo digital! Comece brincando no Scratch com os bloquinhos coloridos, depois passe para uma linguagem mais amigável, como Python, e continue abstraindo seus conceitos e conheça o que essa “máquina de calcular superpotente” tem pra te oferecer.
Gabriel Toschi
Cientista da computação em formação pela USP, sempre encontra tempo para falar sobre jogos, tecnologia, viagens no tempo e outras loucuras. Desenvolve jogos, aprecia chocotones, escreve para o Deviante e faz piadas ruins em @g_toschi">seu Twitter