Tudo o que a IA não é….

… ou não faz.

Olá a todos.

O post hoje é em forma de desabafo e relatório pessoal do que tenho observado sobre IA em alguns dos meus Clientes.
Tenho ouvido lideres de mercado se referirem a inteligencia artificial como a melhor coisa desde a pizza com ananás. É verdade que a IA generativa pode melhorar a produtividade dos developers ou administradores de sistemas — mas apenas quando se nivelam corretamente as expectativas.

Uma das coisas que venho notado são alguns tipos certezas absolutas por quem decide, sobre o que é IA e o que pode fazer na sua organização.  E normalmente estão completamente desajustadas da realidade. Tentar passar um dia de trabalho sem ler ou ouvir falar sobre IA é outra aventura. É como tentar enviar uma mensagem de texto por RFC2549 — altamente improvável.

Os developers ou sysadmins, em particular, são inundados com artigos que os incentivam a usar IA generativa (GenAI) para escrever o seu código. A maioria desses artigos faz promessas estapafurdias, afirmando que a adoção da GenAI irá garantir uma produtividade superior.
E muitas vezes tentam amedrontar os leitores para se juntarem ao movimento, sob pena de verem as suas carreiras seguirem o mesmo caminho do mamute lanudo da sibéria.

Sim, é verdade que muitas pessoas estão a experimentar ou a adotar a GenAI, sem dúvida. E sim, a Gartner prevê que oito em cada dez empresas usarão APIs e modelos de GenAI ou implementarão aplicações habilitadas para GenAI em ambientes de produção até 2026, um aumento em relação a menos de 5% no início de 2023.

E igualmente correta é a afirmação que estas empresas estão a experimentar uma melhor produtividade na programação, também — até certo ponto. Nove em cada dez programadores inquiridos no Relatório Global de Desenvolvimento 2023 da Evans Data afirmam que obtiveram algum benefício ao usar GenAI.

Mas um “Sim, vamos a isso!” não significa que todos os developers devem mergulhar de cabeça na onda. A IA generativa não é ideal em todas as situações — especialmente quando os mesmos fazem suposições erradas sobre o seu uso.

Antes de adotarem a GenAI, p.f. dediquem algum tempo a desmistificar estas crenças frequentemente mal compreendidas, destiladas a partir das experiências de dezenas de engenheiros de software. Depois, irão ver que podem usar estas ferramentas para obter o melhor benefício.

Quais são os conceitos errados mais habituais?

Conceito Errado: Basta pedirmos o que queremos.

Durante décadas, as pessoas procuraram maneiras infalíveis de instruir computadores. O COBOL foi inicialmente apresentado como uma forma para que pessoas de negócios não técnicas criassem software. O mesmo sonho impossível está a ser oferecido hoje: Tudo o que precisa fazer é dizer ao sistema o que quer, e ele cria-o. Puf… aqui está a sua solução!

No entanto, como qualquer engenheiro de software pode confirmar, os utilizadores nem sempre sabem o que querem, muito menos como o pedir.
Os developers já com alguma experiencia são adeptos do design de sistemas, mas as linguagens humanas não expressam as coisas com a precisão das linguagens de programação. Além disso, é irrealista esperar que programadores juniores expressem requisitos não triviais de forma clara e inequívoca em linguagem natural mais rapidamente do que programadores seniores podem expressar esses requisitos em código.
Infelizmente uma interface com a voz da Majel Barret e a compreensão de um computador de Star Trek ainda está muito longe.

Na realidade? Sim, a GenAI pode gerar código com base no que nós lhe digamos que queremos. Mas a maior produtividade é alcançada ao usar a GenAI para as tarefas onde os computadores são excelentes: executar tarefas estreitamente definidas e repetitivas, libertando assim o esforço humano para coisas que requerem pensamento.

Para alem disto, usar GenAI não significa abandonar as linguagens de programação e o design de sistemas. Significa que agora é necessário adicionar uma nova competência: a engenharia de prompts. É necessário saber quando e como pedir a uma LLM para reescrever código para torná-lo mais rápido ou mais seguro. Deveremos portanto iterar os pedidos para decompor problemas complexos. É um conjunto completo de conhecimentos que ainda está e continuará a ser plenamente desenvolvido nos próximos anos.

Portanto, não esperem que a GenAI escreva uma aplicação complexa a partir de um único prompt e que funcione perfeitamente à primeira tentativa. Embora as LLMs sejam úteis e estejam cada vez mais poderosas, é necessário de aprender a usá-las bem. Requer prática, muita paciência e maior capacidade comunicativa. Tipo como quando ensinamos uma criança de 3 anos a atar os próprios atacadores dos tênis pela primeira vez.

Conceito Errado: A GenAI pode criar a aplicação inteira em substituição de um humano.

Certamente, poderemos usar a GenAI para escrever o código para uma aplicação padrão e extremamente genérica. É tipicamente muito boa a gerar código com base em padrões e exemplos — o tipo de software que se cria regularmente, apenas com valores diferentes.

Para muitos programadores, a GenAI é um assistente de pesquisa rápido e útil que sugere soluções potenciais ou um auto-completar que está ciente do contexto em que está a trabalhar. Esta afirmação certamente apoia a promessa de uma produtividade melhorada, o que é francamente admirável. Eu uso e sem qualquer sombra de duvida recomendo. A GenAI mostra-me que existem formas de fazer as coisas que nunca me passariam pela cabeça de fazer assim.

No entanto, enquanto podemos usar a GenAI para gerar vários novos componentes React ou gerar ficheiros de configuração Apache padrão, não é aí que os developers gastam a maior parte do seu tempo. As peças importantes estão nos detalhes, que — pelo menos hoje — requerem conhecimento de todo um sistema ou arquitetura. Não esperem que qualquer sistema GenAI entenda o contexto e a intenção por trás do código.

Para além disto, embora a GenAI possa encontrar soluções potenciais mais rapidamente do que nós os meros humanos, ela não pode julgar a adequação ou a qualidade dessas soluções. Tenham noção que as aplicações da GenAI irão ser inadequadas para problemas novos ou não convencionais que requerem criatividade.

Um humano pode perguntar a outro: Enquanto estás ocupado a escrever cada vez mais código, estás a dedicar tempo suficiente a perguntar se estás a construir a coisa certa? A GenAI não o fará. Os programadores humanos trazem intuição, perspicácia e imaginação, que a IA não pode (ainda?) replicar.

Conceito Errado: A qualidade do código da GenAI é aceitável sem ajustes.

A maioria destas ferramentas foca-se em escrever código. Mas a geração de código é apenas o primeiro passo.De longe, a maior preocupação dos developers com a GenAI é a qualidade do código que ela irá emitir. A supervisão e intervenção humana são cruciais para garantir a qualidade, segurança e fiabilidade. Está o código gerado correto? O código de entrada do treino estava correto? A IA entendeu o que lhe estava a ser pedido? Especificaram o problema corretamente, com todas as condições de fronteira?

E este código tem de ser mantido. Mas por quem? Quem o entende?

Os programadores seniores já olham para o código “suficientemente próximo” gerado por alguém (seja de um stack de Design Patterns, um projeto anterior ou Stack Overflow), corrigem-no para o que precisam e ganham produtividade dessa forma. Mal percebem que o estão a fazer. Um programador júnior não tem a experiência ou confiança para saber o que precisa de ser corrigido, e…, todos sabemos como este filme acaba.

A GenAI pode criar um código surpreendentemente bom, mas esse código é semelhante ao estilo de código de exemplo que os escritores técnicos utilizaram. O código gerado não aproveita a modularização, tem poucas (se houver) funções, depende do controlo imperativo em vez de funções de nível superior, não usa recursos organizacionais ou de nomeação, e assim por diante.
Os developers , especialmente os juniores, pensam que como  “funciona” (ou, pior, “funciona na minha máquina,” ou “funciona se chamado corretamente”) é o fim da tarefa. A qualidade do código é iterativa e paramount na sua importância. A GenAI não tem esta noção.

Há uma grande possibilidade que o código gerado possa conter vulnerabilidades, erros ou ineficiências que requerem revisão e testes humanos. Confiar exclusivamente na IA para a geração de código sem processos rigorosos de teste e garantia de qualidade irá levar na melhor das hipóteses a software pouco fiável.

Pior, pode criar uma falsa confiança no código gerado. Por exemplo, alguns estudos académicos sugerem que os programadores que usam assistentes de IA escrevem código menos seguro.

Antes que a GenAI possa ser considerada confiável — e uma verdadeira melhoria de produtividade — precisa de gerar planos de teste e criar testes para provar a correção das suas soluções (na medida em que os testes conseguem isso). Mas hoje, um programador deve decidir se as soluções apresentadas são viáveis.

Conceito Errado: Pode-se confiar implicitamente nas ferramentas atuais.

Todas as histórias que elogiam “Adote a GenAI agora!” assumem que as ferramentas são “suficientemente boas.” Essa percepção irá causar a todos um balde frio de decepção.

Lembrem-se: Isto é novo. Quando usa a GenAI hoje, está a usar o equivalente do Mosaic para browsers em 1994. Tenham consciência que o campo irá evoluir e melhorar rapidamente. Mas não esperem que as ferramentas façam tudo ou que o façam bem.

Para além das questões técnicas, muitas incertezas ainda precisam ser abordadas.

Outra grande preocupação são os dados de treino. Os modelos de IA generativa requerem grandes quantidades de dados de treino de alta qualidade para funcionarem de forma eficaz, e esses dados precisam de ser atualizados regularmente. A indústria também ainda não resolveu se os preconceitos e limitações nos dados de treino podem manifestar-se no código gerado.

Outra questão são as implicações éticas e legais da IA, e a supervisão governamental que irá surgir. De destaque atual está a Lei de IA da União Europeia, a primeira regulamentação abrangente sobre IA proposta por um grande regulador. A produtividade dos programadores pode ser prejudicada pela necessidade de trabalhar com advogados para abordar a privacidade dos dados, direitos de propriedade intelectual e o seu potencial para consequências não intencionais.

Conceito Errado: A produtividade dos programadores aumentará instantaneamente (hahhahahah).

Todos esses artigos espetaculares que promovem e enaltencem a grandiosidade GenAI para o desenvolvimento de aplicações sugerem que a integração do código gerado resultará magicamente em aumentos de produtividade a longo prazo.

Não se enganem. Irá fazer diferença. Mas ajustem as vossas expectativas para um cenário do mundo real. De acordo com a pesquisa da Evans Data, 87% dos programadores que usam GenAI veem um impacto positivo no cronograma de desenvolvimento dos seus projetos. Nos quais eu me incluo,  embora apenas em código para infraestrutura. Vinte e dois por cento dizem que a GenAI reduziu o tempo que passaram a rever e a pensar no código em mais de 20%. Isso é uma melhoria saudável, sem dúvida.

Com demasiados artigos, no entanto, a premissa é que a produtividade de alguém é medida pela velocidade que alguém debita código. Como se digitar fosse o gargalo, e a única coisa que um programador precisa fosse uma maneira de digitar mais rápido. Mais código nunca significou mais valor.

Conceito Errado: A GenAI será tão boa que os programadores deixarão de ser necessários.

Cada inovação tecnológica é acompanhada por avisos de que substituirá programadores ou pessoal de IT. A GenAI é apenas a última a fazer essa promessa.

Algumas pessoas estão a levar estes avisos a sério. De acordo com a pesquisa da Evans Data, 28% dos programadores estão extremamente preocupados que a IA e o machine learning possam eventualmente deixá-los sem emprego, e 46% estão muito preocupados.

Isto significa que um quarto dos programadores não está especialmente preocupado com o efeito da GenAI nas suas carreiras. As suas razões principais ecoam os sentimentos discutidos anteriormente: os seus trabalhos requerem criatividade que a IA nunca terá (34%), a IA só pode fazer o que é treinada para fazer e o que lhe é dito (25%), e o programador espera reformar-se antes que a IA se torne um fator (13%).

A indústria “de computadores” regularmente avisa os programadores que uma nova tecnologia eliminará os seus postos de trabalho. Normalmente, isto desloca o seu papel para um tipo diferente de produtividade. “A GenAI apenas permitirá que os programadores produzam mais”. “Nunca vi uma casa de software ficar sem trabalho para os programadores fazerem; há sempre ‘dívida técnica’.”

Expectativas de melhorias na produtividade — não de magia negra.

Compreender estes preconceitos errados será essencial para adotar ferramentas de IA generativa de forma eficaz e responsável nos fluxos de trabalho em IT. Seja em desenvolvimento seja em administração de automação de infraestrutura. Sim, a taxa de melhoria nos modelos é vertiginosa, as ferramentas de GenAI estão a escalar linearmente, e não há razão para pensar que as arquiteturas estão próximas dos limites teóricos ou estruturais de desempenho.

A GenAI tem o potencial de melhorar a produtividade e a inovação no desenvolvimento de software, mas é crucial reconhecer as suas limitações e enfrentar os desafios associados de forma proativa.

E pronto. Chegamos ao fim de mais um post semanal. Desta vez em formato de desabafo sobre a nuvem de desgraça que dizem que se acerca ás cabeças do pessoal de IT.
Não tenham medo. Aprendam e cresçam como profissionais.

Até a próxima semana, e já sabem se notarem algo aberrante, sabem onde me encontrar.
1Abraço
Nuno