AI Code Assistants: Reflexão

15 out 2024

Como artigo final da série "AI Code Assistants", decidimos refletir sobre o potencial que estas ferramentas apresentam e qual a sua viabilidade em serem utilizadas no dia a dia, ponderando também sobre os desafios e responsabilidades associados a esta tecnologia.

Este última publicação foca-se nos aspectos bons e maus dos assistentes de código com recurso a IA, e porque é importante abordá-los com uma mente aberta e espirito critico.

O Bom

Não há forma de negar os factos: a IA veio para ficar. Neste momento, o mundo encontra-se deslumbrado com o que é possível fazer com esta tecnologia, e na nossa área, é inegável que os assistentes de código trazem de facto melhorias significativas ao processo de desenvolver de software.

Desde acelerar o desenvolvimento pela sua capacidade de 'gerar' ou completar código em tempo real, criar documentação ou até ajudar na configuração de infra-estruturas, os programadores de qualquer nível podem fazer uso deste tipo de ferramentas para automatizar tarefas repetitivas. Em particular para aqueles que estão a começar, a presença de um assistente de IA pode ajudar com a parte mais difícil e resolver dúvidas ou problemas triviais. Em vez de se sentirem sobrecarregados por conceitos complexos, aqueles que estão a iniciar podem aproveitar a IA para suavizar a curva de aprendizagem, gerar exemplos de código e criar soluções funcionais mais rapidamente.

Adicionalmente estes assistentes permitem que os programadores mais experientes automatizem tarefas repetitivas, deixando uma maior liberdade para se concentrarem em questões complexas. Seja a refatorar grandes bases de código, gerar ou automatizar casos de teste ou até mesmo para escrever código repetitivo e estrutural - boilerplate, estas ferramentas podem poupar imenso trabalho. Tornar-se um bom "engenheiro de prompts" ou um excelente curador de código pode, sem dúvida, ajudar a melhorar as nossas qualidades como engenheiros de software.

No fundo, a IA pode atuar como uma ferramenta colaborativa que acelera os fluxos de trabalho oferecendo apoio nas diferentes fases do desenvolvimento.

O Mau

No entanto o senso comum é que estar demasiado dependente de uma ferramenta tem as suas desvantagens. Embora estas ferramentas possam gerar código ou sugestões de forma rápida, isso não significa que os resultados estejam sempre perfeitos ou corretos. O código gerado por IA pode ser impreciso, estar desatualizado ou até mesmo não estar alinhado com as melhores práticas. O uso desta ferramenta pode rapidamente tornar-se um risco quando os programadores tratam os resultados do assistente como uma verdade absoluta.

No caso dos principiantes, enquanto que a IA ajuda bastante no arranque inicial, pode também impedir uma compreensão profunda dos princípios fundamentais da programação e de arquitetura de software. Os programadores juniores, não sentirão o peso de passar horas a tentar resolver um problema. Este atalho na aprendizagem, pode levar a perfis de programadores que conseguem produzir código, mas não compreendem o motivo pelo qual o código funciona, ou não têm a capacidade de resolver problemas quando algo corre mal.

É fácil cair na armadilha de deixar que o assistente realize todo o trabalho, contudo isso pode resultar numa compreensão muito superficial de conceitos cruciais e levar a decisões erradas. É extremamente importante que os programadores sejam empíricos e analisem/contestem as sugestões apresentadas pelo assistente. A inteligência artificial é apenas um assistente, uma ferramenta, não um substituto da experiência e do nosso espirito critico. Mesmo que ajude a escrever 90% do código, aqueles 10% restantes - rever, refinar, testar - podem fazer toda a diferença para garantir a qualidade.

O Pior

Talvez o problema mais preocupante derivado da utilização de assistentes de código, seja o seu potencial para introduzir erros ou vulnerabilidades de segurança no código gerado. Não devemos esquecer que os modelos de IA são treinados com grandes quantidades de dados, que muitas das vezes se encontram desatualizados. Isto pode levar a uma transferência de práticas ultrapassadas e consequentemente levar o assistente a gerar código impreciso até mesmo a introduzir bugs no sistema.

Se não houver um cuidado extra, esses problemas podem escalar e resultar em problemas maiores, especialmente em ambientes de produção. Imagine um assistente de IA a sugerir um método de encriptação desatualizado ou a não considerar adequadamente casos extremos numa função. A IA pode não reconhecer esses problemas, mas nós, como engenheiros de software, devemos tentar fazê-lo.

Isto leva-nos a dois pontos importantes: 'engenharia de prompts' e curadoria. Os resultados que recebemos de um assistente são tão bons quanto as prompts fornecidas. Fazer as perguntas certas, ser específico nas instruções e fazer uma curadoria cuidada e precisa dos resultados fornecidos pelo assistente é essencial para garantir que a ferramenta está a servir o seu propósito.

Com as capacidades que a IA oferece, vem também uma responsabilidade adicional de usá-la de forma inteligente. De facto, existe uma ferramenta que pode gerar código em segundos, mas isso não significa que o resultado gerado está pronto para uma entrada em produção. Devemos rever cada linha que produz, entender as suas implicações e garantir que atende tanto aos requisitos do projeto quanto aos padrões éticos. Com grande poder, advém grande responsabilidade, e no desenvolvimento assistido por assistência artificial isso não é excepção.

Conclusão: Encontrar o Equilíbrio

Ainda tenho memória dos tempos em que surgiram os primeiros IDE’s e todo o fascínio associado às suas funcionalidades, criando uma forte ideia que iriam substituir os editores de texto por completo. Ou então as ferramentas WYSIWYG, que iriam substituir a necessidade de designers e programadores, e qual foi o resultado? Não substituíram.

As ferramentas de IA são, inegavelmente, ferramentas poderosas, mas são apenas isso - ferramentas. Ainda dependem de um grande nível de conhecimento, compreensão e experiência para serem manuseadas corretamente e não substituem o parecer ou a experiência humana.

Como engenheiros de software, devemos lembrar que embora a IA possa acelerar o desenvolvimento, também pode acelerar erros e lacunas no nosso conhecimento. Pode certamente ajudar programadores junior a superar as dificuldades iniciais, mas não deve substituir o processo de aprendizagem. O verdadeiro domínio vem de entender o porquê e o como por trás do código.

Os primeiros a adotar tecnologias muitas vezes encontram oportunidades únicas, mas o futuro pertence aos seres humanos inteligentes e habilidosos que reconhecem e conseguem trabalhar com boas ferramentas. Uma abordagem equilibrada foca-se em utilizar a IA para lidar com tarefas repetitivas, enquanto mantemos os olhos e a mente atentos à qualidade dos seus resultados.

À medida que integramos mais assistentes inteligentes nos nossos fluxos de trabalho, devemos garantir que permanecemos ativos no processo de escrever código, questionando frequentemente, refinando e melhorando o trabalho que estamos comprometidos a entregar.

Sejam críticos, mantenham-se curiosos e definam bem a linha condutora que dirige a execução.