Inteligência Artificial: o Fim ou a Evolução da Engenharia de Software?

Artigos Relacionados

📚 Continue Lendo

Mais artigos do nosso blog

A Inteligência Artificial (IA) tem levantado intensos debates sobre seu impacto no setor de tecnologia, especialmente na engenharia de software. A questão central é se essa revolução representa o declínio da profissão ou uma nova fase de sua constante evolução. Ferramentas de IA para programação, notadamente o “vibe-coding”, permitem que pessoas com pouca ou nenhuma experiência em codificação criem produtos, levantando dúvidas sobre o futuro do desenvolvimento de software profissional.

Inicialmente, a experiência com ferramentas como o ChatGPT em 2023 revelava um lado complexo da programação assistida por IA. Os resultados muitas vezes se assemelhavam a uma história de terror clássica, onde desejos são concedidos, mas a um custo inesperado. Solicitações de mudanças específicas resultavam em linhas de código corretas, porém acompanhadas de um grande volume de código desnecessário e sobre-otimizado, frequentemente atrapalhando outras partes do sistema. Desembaraçar essa teia se mostrava um desvio trabalhoso em vez de um atalho para a eficiência.

👉 Leia também: Guia completo de Noticia

Com a evolução das ferramentas assistidas por IA no decorrer do tempo, a percepção de poder de computação e otimização de tarefas começou a se reverter. Experiências mais recentes assemelharam-se a colaborar com um estagiário brilhante e versátil, mas excessivamente zeloso, que se mostrava extremamente eficiente em tarefas específicas e localizadas. A chave para a eficácia máxima reside em manter o escopo do problema restrito. Um exemplo prático demonstrou a capacidade de otimização da IA ao converter doze linhas de código que antes executavam sequencialmente por 40 milissegundos cada, para uma execução paralela onde todas as doze completavam a tarefa no tempo que uma única linha levava anteriormente. Essa aplicação cirúrgica da IA, como uma impressora 3D de alta precisão usada para peças complexas e pequenas, entrega resultados impecáveis em segmentos específicos, mas falharia ao tentar criar uma estrutura maior e interconectada como uma cabine de avião inteira, gerando um resultado não funcional.

Atualmente, modelos de IA mais flexíveis viabilizam o chamado “vibe-coding”, um termo que ganhou o status de palavra-chave bilionária no mercado. Essa modalidade permite que usuários com pouca ou nenhuma proficiência em programação desenvolvam produtos de diferentes níveis de complexidade. A gigante Google, inclusive, já lançou um aplicativo específico para isso, denominado Opal, demonstrando o reconhecimento da indústria a essa tendência. Contudo, argumenta-se que o “vibe-coding” não representa uma novidade completa. Ele se insere em uma longa tradição de ferramentas “no-code” (sem código) voltadas para usuários não profissionais. Similarmente, como uma forma de programação que, por vezes, depende mais do reflexo espinhal do que de um planejamento cognitivo prévio, ela guarda paralelos com uma prática que muitos programadores admitem usar quando exaustos: a depuração por “tentativa e erro” (“shotgun debugging”). Nessa prática, em vez de lógica e entendimento profundo, o programador ajusta o código aleatoriamente — apagando linhas, trocando variáveis ou invertendo condições booleanas — na esperança de um resultado funcional, espelhando a natureza intuitiva e fortuita do “vibe-coding”. Ambos os métodos substituem a compreensão deliberada por palpites e sorte, revelando uma mudança no modo como os seres humanos delegam o trabalho cognitivo às máquinas. Se antes utilizávamos a tecnologia para aliviar a carga da cognição, agora a própria cognição é transferida para as máquinas, levantando importantes questões sobre a natureza do trabalho intelectual no futuro.

A adoção produtiva da IA na programação assemelha-se a um processo editorial, similar à criação de um artigo. Assim como um editor orienta um autor para refinar um rascunho até que esteja pronto para publicação, um programador-editor assume a responsabilidade de refinar os vastos blocos de código gerados pela IA. Esse processo envolve edições estruturais e ajustes linha a linha, realizados por meio de uma série de prompts, ou rodadas de edições sucessivas. O objetivo é diminuir a disparidade entre a visão do programador e a saída do código da IA. Curiosamente, para além da escrita de código, a IA demonstra um valor considerável na compreensão de bases de código existentes. Ao ser solicitada a explicar o fluxo básico de um sistema desconhecido, a IA pode gerar diagramas e fluxogramas que ilustram a interconexão dos principais componentes, poupando ao desenvolvedor horas de investigação manual.

A respeito do potencial do “vibe-coding”, surgem opiniões divergentes. De um lado, há quem celebre sua capacidade de democratizar o acesso à criação de software, desvanecendo a fronteira artificial que muitas vezes segrega papéis técnicos de não técnicos e aliviando a conhecida arrogância presente em certos círculos de tecnologia. No entanto, o lado do engenheiro adverte que essa perspectiva é superficial. A construção de uma aplicação complexa e robusta, pronta para produção, continua exigindo anos de vivência e experiência em engenharia de software no mundo real, um patamar que o “vibe-coding” por si só dificilmente alcançaria.

Uma analogia recorrente para compreender a complexidade de uma base de código ampla é a de uma cidade. Nela, coexistem “tubulações” literais – fluxos de dados, filas de eventos e sistemas de mensagem – e “tráfego” de informações que exigem um roteamento intrincado. Assim como as cidades são setorizadas em distritos para que nenhuma única pessoa ou equipe possa gerenciar toda a complexidade, os sistemas são subdivididos em módulos ou microsserviços. Partes antigas da arquitetura do software, à semelhança de bombas não detonadas em cidades europeias, são consideradas perigosas demais para serem alteradas, sob pena de causar instabilidades catastróficas. Enquanto desenvolver uma nova funcionalidade pode ser comparado a abrir um novo lounge em um aeroporto, um projeto mais profundo equivale à construção de um segundo terminal. Dentro dessa lógica, criar um aplicativo usando “vibe-coding” assemelha-se a inaugurar uma loja temporária no saguão, ou seja, um componente autocontido que dispensa a necessidade de integração complexa com a estrutura existente.

As questões mais intrincadas na engenharia de software raramente se resumem à criação de unidades isoladas, mas sim à interconexão e operação conjunta desses elementos. Reformar um único apartamento é diferente de criar um sistema unificado de combate a incêndios e energia de emergência que se estenda por todos os andares de um edifício e ative-se na sequência correta. Essas complexidades se estendem para além da arquitetura interna. A mera adição de um novo nó a um sistema distribuído pode gerar perturbações significativas na rede, de forma análoga à introdução de um novo edifício que modifica o ambiente urbano, afetando fluxos de vento, luz solar para edificações vizinhas e rotas de pedestres, desencadeando incontáveis efeitos cascata.

Recentemente, a vulnerabilidade do aplicativo Tea, que expôs informações de licenças de dezenas de milhares de usuários, provocou um coro de culpas atribuídas ao “vibe-coding”. Muitos viram nisso a confirmação de seus receios sobre a segurança na codificação assistida por IA. Analistas e influenciadores digitais reagiram de forma contundente, com alguns críticos tech prontamente anatematizando qualquer aplicação de inteligência artificial. Engenheiros de software, muitas vezes vistos como os vilões no passado, assumiram a posição de guardiões da segurança, utilizando a situação para criticar os “vibe-coders” negligentes que, em sua visão, invadiam seu domínio profissional. No entanto, quando foi revelado que o “vibe-coding” provavelmente não foi a causa principal da falha, o incidente revelou mais sobre a tendência humana de categorizar falhas técnicas em antagonismos – vítimas e fraudadores, oprimidos e opressores – do que sobre as reais limitações da tecnologia.

É importante destacar que as preocupações de segurança em torno do “vibe-coding”, sob uma análise cuidadosa, podem ser um tanto exageradas. Ou, no mínimo, o efeito líquido pode ser não-negativo, uma vez que a própria inteligência artificial possui o potencial de auxiliar na criação de códigos mais seguros. É previsível que a internet seja inundada com exemplos de “app slop” – aplicações de baixa qualidade – e trechos de código inseguro compartilhados de forma divertida. Contudo, muitas dessas falhas poderiam ser facilmente corrigidas pela simples adição de uma etapa no processo de desenvolvimento: a instrução de “executar uma auditoria de segurança para esta solicitação de pull”. Ferramentas automatizadas já estão sendo empregadas para sinalizar possíveis vulnerabilidades de forma proativa. O uso dessas ferramentas tem permitido a geração de um número significativamente maior de testes do que seria humanamente prático produzir.

Ademais, modelos de IA suficientemente avançados podem ir além da simples execução de tarefas. Se solicitado, por exemplo, “Preciso de um banco de dados para armazenar carteiras de motorista”, um sistema de IA robusto não só forneceria o código, mas também alertaria sobre considerações de segurança negligenciadas. Poderia gerar um código que criptografa os dados em repouso com AES-256-GCM, configurar um sistema de gerenciamento de chaves para armazenamento e rotação, e instituir um requisito de aprovação por duas pessoas para descriptografia, assegurando uma segurança tão elevada que a quebra dos dados levaria um tempo comparável à própria extinção do universo.

No contexto das responsabilidades diárias de um engenheiro de software, a IA tem introduzido uma notável sensação de facilidade em várias esferas. A necessidade de consultar documentações extensas de APIs foi minimizada, pois a IA pode fornecer respostas diretas e concisas. Acabou o constrangimento imposto por moderadores de fóruns como o Stack Overflow, que muitas vezes desaprovavam perguntas consideradas triviais. Em vez disso, o profissional agora conta com um assistente de programação que não emite julgamentos sobre questões, por mais ingênuas que possam parecer, promovendo um ambiente de aprendizado e suporte contínuo.

A história da engenharia de software é uma narrativa contínua de abstração, um avanço progressivo do metal físico para camadas conceituais cada vez mais elevadas. Essa jornada evolutiva é notável, partindo da linguagem de montagem, que exige instruções detalhadas como “girar 60 graus e mover 10 pés”, passando pelo Python, que permite comandos como “virar à direita na Rua 14”, até chegar à IA, onde uma simples instrução “me leve para casa” é suficiente. Tal progresso, no entanto, levanta questionamentos profundos sobre o que pode estar sendo deixado para trás nesta escalada de complexidade e automatização.

A transição para níveis mais elevados de abstração não é um fenômeno inédito; ciclos semelhantes ocorreram no passado. Quando a linguagem C surgiu na década de 1970, programadores de assembly poderiam ter lamentado a perda de controle granular. Da mesma forma, linguagens de alto nível como Python podem parecer excessivamente lentas e restritivas para um programador acostumado com a performance de C. No cenário atual, pode-se argumentar que, enquanto ser um “coder” – alguém que implementa código – nunca foi tão fácil, o caminho para se tornar um engenheiro de software pleno se mostra mais desafiador. Um bom “coder” produz um código competente, mas um grande engenheiro de software distingue-se por resolver problemas sem sequer escrever código. A capacidade de dominar os fundamentos da ciência da computação, internalizada por horas dedicadas à codificação manual de algoritmos como Dijkstra ou árvores vermelho-preto, é fundamental e irrecuperável por mera observação de tutoriais. Assim como não se aprende a enterrar uma bola assistindo a lances de basquete, a proficiência em programação exige prática intensiva e pessoal.

Há incertezas se a programação assistida por IA realmente acelera o trabalho. Alguns estudos apontam para uma desaceleração. Acredita-se que, para que a IA atue como um verdadeiro multiplicador de produtividade, os desenvolvedores precisarão de uma nova habilidade: um “disjuntor mental” que permita identificar quando a mente entra em modo automático e sair dele, voltando a exercitar o raciocínio humano. O segredo estaria em utilizar a IA apenas para superar obstáculos específicos, mas retornar ao pensamento crítico para manter a compreensão fundamental do propósito da tarefa.

Em dias otimistas, prevalece a ideia de que, à medida que certas habilidades atrofiam, a humanidade se adapta e desenvolve novas capacidades, como sempre fez. Contudo, há um pessimismo subjacente que sugere que “desta vez é diferente”. Embora as máquinas tradicionalmente tenham aliviado a carga cognitiva, pela primeira vez a própria cognição é transferida para a máquina. É incerto qual caminho se seguirá, mas há uma persistente arrogância na crença de que a própria geração é a última a possuir a capacidade de pensar de forma genuína. Independentemente dos ganhos observados, existe uma sensação de perda neste avanço. O ensaio de James Somers, de 2023, intitulado “A Coder Considers the Waning Days of the Craft”, capturou precisamente esse sentimento ao descrever o desejo de escrever um elogio à codificação em um momento em que os mesmos fins poderiam ser alcançados sem o pensamento e o conhecimento. Passados menos de dois anos, os sentimentos ali articulados apenas ganharam maior ressonância.

A motivação para aprender novas linguagens de programação por puro prazer, por exemplo, diminuiu. O encanto de dominar uma nova sintaxe ou a reputação de fluência em linguagens de nicho como Haskell ou Lisp perderam parte do seu apelo, dado que a IA pode gerar código em qualquer uma delas com facilidade. Levanta-se a questão se a vontade de aprender um idioma estrangeiro diminuiria se as aplicações de tradução automática se tornassem onipresentes e infalíveis. Embora engenheiros de software frequentemente reclamem da depuração, havia, por trás das queixas, um discreto orgulho em compartilhar “histórias de guerra” e as soluções inteligentes encontradas. Com a ascensão da IA, será que haverá espaço para esse tipo de conversa de bastidores?

Na engenharia de software, há duas categorias distintas de profissionais: os “urbanistas” e os “miniaturistas”. Os “urbanistas” possuem uma visão ampla do sistema, focados na sua operação em grande escala e menos preocupados com os detalhes minuciosos do código. Eles podem até escrever pouco código diretamente. Já os “miniaturistas” demonstram um cuidado de relojoeiro com o funcionamento interno do código. Essa nova abordagem da programação assistida por IA pode ser um avanço significativo para os “urbanistas”, mas corre o risco de tornar o campo menos receptivo aos “miniaturistas”. Recorda-se de uma aula universitária com Brian W. Kernighan, uma figura lendária crediteda por popularizar o “Hello, world” na programação e membro da equipe original do Bell Labs que desenvolveu o Unix. Ele programava ao vivo em um terminal básico, usando um editor de texto espartano – `vi`, não `vim` – para criar um analisador sintático de uma árvore complexa. A ausência de ferramentas modernas, como as IDEs (Integrated Development Environments), e o uso de um cliente de e-mail em terminal, demonstravam uma estética particular.

📌 Confira também: artigo especial sobre redatorprofissiona

Em breve, a programação pode vir a ser vista como uma fusão de gestos de digitação e rituais que antes qualificavam-se como uma verdadeira arte. À medida que observamos com reverência a antiga equipe do Bell Labs, trabalhos hoje rotineiros como a depuração manual de problemas de concorrência ou a criação de código de servidor web a partir do zero poderão ser considerados atos heroicos. Eventualmente, poderemos vislumbrar os últimos românticos da codificação, detendo-se em cada tecla digitada — um ato digno, magistral e, infelizmente, defasado no tempo, em uma era dominada pela inteligência artificial.

Com informações de The Verge

Inteligência Artificial: o Fim ou a Evolução da Engenharia de Software? - Imagem do artigo original

Imagem: Cath Virginia via theverge.com


Links Externos

🔗 Links Úteis

Recursos externos recomendados

Deixe um comentário

Share via
Share via