Log in

Computação Quântica, o verdadeiro “nim”

José Estêvão de Melo
Engenheiro Informático

Quando se fala em “quântico”, a primeira reação costuma ser associar o tema a algo complicado, e com razão. A mecânica quântica é um dos ramos mais fascinantes e desafiantes da física: ela estuda o mundo subatómico, onde as leis que regem a realidade parecem contrariar a nossa intuição e grande parte do nosso conhecimento. Nesse domínio, o determinismo dá lugar à probabilidade. É precisamente nesse território do incerto que os cientistas procuram construir uma nova geração de computadores capazes de processar informação de forma radicalmente diferente e redefinir o que pensamos ser possível.

Ao aplicar os princípios da superposição de estados ao mundo computacional, abrimos um leque de possibilidades extraordinário. Enquanto um computador clássico trabalha com bits, unidades de informação que só podem assumir o valor 0 ou 1 (Sim ou Não), o computador quântico utiliza qubits, que podem ser 0 e 1 ao mesmo tempo. É aqui que entra o nosso “nim”: o qubit existe num estado intermédio, um espectro de probabilidades que só se resolve quando é medido. É como uma moeda em pleno voo, enquanto gira, é simultaneamente cara e coroa; apenas quando cai é que escolhe um lado. Essa capacidade de coexistência é o que permite aos computadores quânticos explorarem milhões de possibilidades em paralelo.

Existem problemas tão complexos que o número de hipóteses possíveis cresce de forma explosiva. São os chamados problemas não polinomiais (NP), nos quais um ligeiro aumento nas variáveis pode transformar minutos de processamento em milhares de anos. Um exemplo ilustrativo foi o sistema de colocação de professores em Portugal, que, numa fase inicial, tentou testar todas as combinações possíveis. O resultado? Um tempo de execução astronómico de tal forma que a execução teve que ser interrompida provocando atrasos constrangedores. As soluções clássicas passam por descartar hipóteses ou aproximar resultados, encontrando respostas “boas o suficiente”, mas raramente ideais. Contudo, como escreveu Antero de Quental, devemos almejar pelo Ideal, e é exatamente essa busca que alimenta o desenvolvimento da Computação Quântica.

Num computador clássico, todas as hipóteses são testadas de forma sequencial. Já um computador quântico, graças à superposição dos qubits, pode representar e explorar todas as combinações possíveis em simultâneo. Isso não significa que ele resolva todos os problemas complexos instantaneamente, a computação quântica não é uma varinha mágica. Mas, em certas classes de problemas, como otimização, busca ou fatorização, ela oferece uma vantagem exponencial, permitindo resultados em minutos que levariam milénios aos supercomputadores mais potentes da atualidade.

Esse poder, porém, traz consigo uma ameaça igualmente grandiosa: a da segurança digital. Hoje, toda a criptografia que protege transações bancárias e comunicações online baseia-se na dificuldade que os computadores clássicos têm em fatorizar grandes números primos. O algoritmo de Shor, desenvolvido para computadores quânticos, promete realizar essa tarefa em segundos, tornando obsoletos os sistemas de encriptação atuais e levantando sérias preocupações para a cibersegurança global.

Felizmente, a comunidade científica não está parada. Duas frentes de defesa estão em curso. A primeira é a Criptografia Pós-Quântica (PQC), que desenvolve algoritmos resistentes tanto a computadores clássicos quanto quânticos, baseados em problemas matemáticos complexos como os reticulados ou códigos de erro. O Instituto Nacional de Padrões e Tecnologia dos EUA (NIST) já trabalha na padronização desses algoritmos. A segunda é a Distribuição de Chaves Quânticas (QKD), uma tecnologia que usa as leis da física quântica para permitir a partilha de chaves criptográficas de forma absolutamente segura, em que qualquer tentativa de interceção altera o estado quântico da informação e é imediatamente detetada. Assim, embora o risco exista, a resposta também está a ser construída, qubit a qubit.

Apesar do seu potencial revolucionário, a computação quântica ainda enfrenta enormes desafios. Os computadores atuais contam apenas com algumas dezenas ou centenas de qubits estáveis, e sofrem com problemas de decoerência e ruído. Mas o progresso é constante: empresas como IBM, Google, IonQ e Rigetti competem para atingir a chamada “vantagem quântica”, o ponto em que uma máquina quântica supera definitivamente os supercomputadores clássicos em tarefas práticas.

A Computação Quântica não é apenas um salto tecnológico; é uma mudança de paradigma. O “nim” dos qubits, essa coexistência do ser e não ser, abre portas à simulação de novos materiais, à descoberta acelerada de medicamentos e a um novo horizonte para a Inteligência Artificial. Talvez o verdadeiro desafio da era quântica não seja apenas construir máquinas mais poderosas, mas compreender o novo conceito de realidade que elas nos obrigam a aceitar. A corrida está lançada, e o futuro da humanidade será, provavelmente, quântico.

Será que a nuvem é mesmo segura?

José Estêvão de Melo

A nuvem (Cloud) parece ser a solução para todos os problemas de armazenamento de dados. As ofertas disponíveis no mercado são vastas — e, em muitos casos, cada vez mais integradas de forma quase automática nos nossos dispositivos. Todas as grandes marcas, como Apple, Google e Microsoft, têm os seus próprios serviços de armazenamento na nuvem. É uma solução prática e com custo relativamente baixo, com mensalidades que variam entre 1 e 3 euros por mês para algumas dezenas de gigabytes de espaço.

De forma resumida, a nuvem é um sistema composto por dezenas, centenas ou milhares de computadores, chamados nós, que podem estar distribuídos por todo o mundo e que trabalham em cooperação. Qualquer um desses nós pode ser substituído a qualquer momento por outro e, como são muitos, nenhum é indispensável — sendo possível até que vários apresentem falhas simultaneamente sem comprometer o funcionamento do sistema.

Essa organização permite um crescimento praticamente ilimitado, capaz de armazenar quantidades de dados difíceis até de imaginar.

Um exemplo impressionante é o do CERN, onde o volume de dados atualmente ultrapassa 1 Exabyte — o equivalente a 1 milhão de Terabytes. Considerando que um computador portátil comum tem capacidade para cerca de meio Terabyte, seriam necessários aproximadamente 2 milhões de portáteis para armazenar toda essa informação.

Ao utilizarmos serviços de nuvem para armazenar os nossos dados, estamos, na maioria dos casos, a ceder o controlo dos mesmos às entidades que gerem esses serviços. Dizem-nos que os nossos dados estão seguros, mas o termo “seguro” é bastante amplo.

Se por segurança entendermos que, em caso de perda do telemóvel, podemos recuperar as fotografias a partir da nuvem, então sim — os dados estão seguros nesse sentido. No entanto, se segurança significar garantir que ninguém (nem sequer o fornecedor) pode aceder ou ler os dados armazenados, então poucos serviços oferecem essa proteção.

Além da possibilidade de acesso indevido por parte do fornecedor, existe o risco de ciberataques. Um exemplo conhecido é o da Uber, em 2016, quando um ataque informático resultou no roubo dos dados de 57 milhões de condutores e clientes. A empresa acabou por pagar aos atacantes para que a informação não fosse divulgada — um caso que demonstra como mesmo grandes empresas estão vulneráveis.

O objetivo deste artigo não é gerar medo, mas sim consciência. A melhor forma de garantir que a informação armazenada na nuvem não possa ser lida por terceiros é através da criptografia.

A criptografia é o processo que transforma os dados em informação ilegível, que só pode ser decifrada com a senha correta. Alguns serviços oferecem criptografia ponto-a-ponto (end-to-end encryption), o que significa que os dados são cifrados antes de saírem do seu dispositivo, e nem sequer o fornecedor consegue vê-los.

Infelizmente, os serviços mais populares (como Google Drive, iCloud ou OneDrive) não oferecem esta funcionalidade por padrão. Por isso, é importante refletir sobre que tipo de informação está a armazenar e, se necessário, utilizar ferramentas externas para cifrar os dados antes de enviá-los para a nuvem.

A nuvem é uma tecnologia poderosa e conveniente, mas não está isenta de riscos. A responsabilidade pela segurança dos nossos dados é partilhada — cabe também a cada utilizador proteger a sua informação.

Cifre antes de enviar. Saiba o que partilha. E escolha bem onde armazena os seus dados.

Programação Orientada por Inteligência Artificial

José Estêvão de Melo

O título escolhido para este artigo, para os mais ligados ao meio, é um paralelo imediato com a Programação Orientada a Objetos, mas para a grande maioria dos leitores, tem o efeito pretendido de anunciar uma crescente vaga, em que a programação é realizada não por programadores, mas por software de inteligência artificial (IA) como o GitHub Copilot, Cursor ou, o famigerado, ChatGPT.

Para contextualizar o leitor, o desenvolvimento de aplicações informáticas é feito através de linguagens de programação, que ao contrário das linguagens naturais que usamos para comunicar uns com os outros, são extremamente rígidas, dependendo de uma estruturação inflexível quer ao nível da sua sintaxe, quer ao nível da ordem de especificação das instruções, não havendo lugar a interpretações múltiplas. A mesma frase em linguagem natural (como o português) pode dar origem a dois resultados distintos dependendo de quem a ouve, já numa linguagem de programação o resultado será sempre o mesmo.

Esta rigidez associada a todas as complexidades informáticas de gestão de memória, complexidade algorítmica, e outros pormenores dos sistemas informáticos com os quais não desejo sobrecarregar o leitor, fazem com que a programação seja de difícil acesso àqueles que não tem formação na área.

O rápido crescimento das ferramentas de IA, tem colocado em foco o termo Vibe Coding. Coding refere-se a codificação, considerando as regras das linguagens de programação, parece-se mais com codificar, talvez por ser impercetível a quem não é da área (e às vezes também para quem é). Já o termo Vibe está mais associado a um estado de espírito do que a algo tão rígido como as linguagens de programação. O paradoxo destes dois termos é apenas possível pela introdução de IA, nomeadamente dos LLM (Large Language Models) que, sem entrar em detalhe, são algoritmos alimentados com enormíssimos volumes de dados em linguagem natural e, com recurso mecanismos de aprendizagem são capazes de a interpretar. Com estas ferramentas passa a ser possível especificar em linguagem natural a aplicação que se pretende desenvolver, ficando a cargo da IA toda a codificação e a rigidez a ela inerente. Tudo o que parece bom demais para ser verdade, normalmente é, podendo ter origem numa compreensão incompleta da tecnologia, ou aproveitamento mal-intencionado da mesma.

A programação é um processo desafiante, complexo e acima de tudo extremamente gratificante. Quem programa, conhece a sensação de resolver um problema após uma noite em claro, e a satisfação de compreender um assunto de tal forma que o conseguimos decompor instrução a instrução, de fio a pavio. Mas também a sensação de querer transformar o teclado em reciclagem.

A utilização de IA não elimina o bom nem o mau, bem utilizada permite reduzir as tarefas mais repetitivas, mas mal utilizada é uma fonte de problemas futuros com custos potencialmente muito maiores. A IA é excecionalmente boa a resolver problemas bem definidos, mas em grandes aplicações, um pequeno erro pode ser catastrófico em partes aparentemente não relacionadas, cuja correção implica períodos de indisponibilidade, trabalho a corrigir dados que nunca deviam ter ficado mal causando elevados custos operacionais e até legais.

A programação é um processo formal, por vezes frustrante, mas extremamente criativo, e é este último aspeto que não devemos, nem podemos, delegar em ferramentas de IA, porque simplesmente não a possuem. A utilização destas ferramentas na minha atividade profissional aumenta a produtividade, mas apenas ao reduzir tarefas que, apesar de necessárias, são morosas e sem acrescento de valor. A IA ainda não têm a capacidade de contextualização necessária para produzir aplicações interligadas, estáveis, escaláveis e de fácil manutenção.

Pessoalmente, considero um risco a utilização de IA por profissionais com pouca experiência e sem capacidade de avaliar todos os impactos das soluções propostas. Ao fazê-lo, e à semelhança de um atleta, estão a saltar o aquecimento que lhes permite realizar a prova em segurança, ficando sem a capacidade de reagir e resolver os problemas, pelo menos em tempo útil, que inexoravelmente irão acontecer! Boa programação!

Coding for Teachers

Código para todos

Qualquer pessoa pode aprender código.

A abordagem transversal do projeto “Coding for Teachers”, cuja tradução para o português é “Código para Professores”, pretende capacitar os docentes de competências básicas em Python para que possam ser aplicadas a vários currículos, não se cingindo à informática.

Para atingir este objetivo foi criado o sítio gratuito de apoio – Coding for Teachers – que se encontra traduzido para português. O docente pode beneficiar de uma aprendizagem guiada,  mediada por vídeos, muito curtos, de alguns minutos, e atividades muito simples. Aprendendo, no seu ritmo, os conceitos básicos da programação em Python.

Cada um dos vídeos aborda um conceito de programação diferente, introduzindo o docente às ferramentas necessárias. Além do sítio Coding for Teachers, existe também um canal no Youtube, estando disponíveis legendas em Português.

O professor não tem de se tornar um programador, apenas compreender o fundamental para criar atividades para os alunos. A compreensão do Python irá dar ao docente uma nova visão do mundo que poderá ser depois desenvolvida pelos alunos. Jogos de palavras, listas interativas, cálculos de probabilidades e outros pequenos projetos podem dar ao aluno uma visão diferente do conhecimento.

Vídeo: https://www.youtube.com/watch?v=yTGYgl3Zfik&t=10s

Da mesma forma que a Matemática e o Português não se limitam às disciplinas respetivas,  o código não tem de estar limitado às aulas de Informática. Na sua forma aplicada, o pensamento computacional, neste caso a linguagem Python, pode ser utilizado em muitos contextos  e cenários curriculares.

O entendimento de código determina a inclusão, ou não, num mundo cada vez mais tecnológico.

No projeto Erasmus Coding for Teachers, além da Escola Secundária de Lagoa, foram parceiras a escola finlandesa, de Ylivieska, Kaisaniemen koulu; a empresa alemã, Ingenious Knowledge GmbH e a empresa Checa, Evropska rozvojova agentura, s.r.o.

Para além das aprendizagens ao nível da tecnologia, pedagogia e didática, o contacto com o sistema educativo Finlandês foi por si uma experiência muito rica.

As docentes Finlandesas que participaram no projeto possuíam conhecimentos superficiais de programação, mas grande era o seu interesse em aprender os fundamentos necessários para que os seus alunos viessem a dispor dessa imprescindível ferramenta integrada no contexto de todas as disciplinas. Esta visão interdisciplinar era o espírito do projeto. 

No mundo atual há que saber ler, escrever, contar e dominar conceitos básicos de programação.