A IA pode revolucionar o desenvolvimento de aplicações ao gerar, otimizar e traduzir código em todo o ciclo de vida do desenvolvimento de software. A adoção da IA generativa pode levar à criação de software consistente, à utilização ideal da criatividade dos desenvolvedores e habilidades aprimoradas dos desenvolvedores. Por exemplo:
A aplicação da IA generativa ao desenvolvimento de aplicações tem grandes benefícios potenciais:
A aplicação da IA generativa para avaliar, refatorar e aplicar padrões de programação empresariais aos resultados em software resulta em software mais consistente; por exemplo, abordagens comuns para resolver problemas recorrentes, estrutura de código comum, código autodocumentado, etc. independentemente de qual desenvolvedor escreveu o código. Isso, por sua vez, torna a aplicação resultante mais fácil de solucionar problemas e manter, pois há menos necessidade de os mantenedores entenderem primeiro a estrutura e as idiossincrasias de diferentes seções do código.
Assim como ocorre em outros domínios, a IA generativa tem o potencial de liberar os desenvolvedores de aplicações de tarefas de baixo valor, como escrever código simples/rotineiro ou identificar a origem de um bug problemático. Com mais tempo para se concentrar em tarefas de maior valor, os desenvolvedores podem implementar ciclos de desenvolvimento mais curtos, mais funcionalidades por versão de software e mudanças menores e mais frequentes.
Por fim, a aplicação da IA generativa ao desenvolvimento de aplicações pode ampliar as habilidades dos desenvolvedores, permitindo que desenvolvedores juniores atuem em nível sênior ou até mesmo especialista. Os desenvolvedores seniores podem incorporar o treinamento de modelos em seus ciclos de lançamento, incorporando as principais práticas à medida que o código é aprimorado. A IA generativa pode atuar como mentora especialista para a equipe júnior, liberando os desenvolvedores seniores para se concentrarem em outras tarefas e melhorando o nível de habilidade da equipe geral de desenvolvimento.
A IA generativa pode ser aplicada ao desenvolvimento de aplicações em diversos casos de uso amplos. Muitos modelos gerais, como o Llama 2, são treinados com código de aplicação escrito em várias linguagens de programação contemporâneas, e também há modelos ajustados para geração de código disponíveis.
Os casos de uso que vemos se beneficiando da IA generativa incluem:
Cada um desses casos de uso é descrito abaixo.
O recurso nativo de geração de texto dos grandes modelos de linguagem (LLMs) pode ser usado para gerar novos códigos a partir de prompts em linguagem natural. Por exemplo, um desenvolvedor pode enviar o prompt "Escreva uma SQL query para recuperar o nome e sobrenome de um cliente da tabela de clientes" e receber uma SQL query em troca.
O uso de LLMs para geração de código pode aumentar significativamente as habilidades de desenvolvimento de aplicações de desenvolvedores juniores ou até mesmo não desenvolvedores, mas pode rapidamente chegar a um ponto de retornos decrescentes à medida que as produções necessárias se tornam mais complexas ou conforme o nível de detalhamento exigido nos prompts se aproxima do código que será gerado.
A otimização e refatoração de código, o processo de melhorar o código para que tenha melhor desempenho e seja mais bem estruturado, podem ser consideradas como uma combinação de dois recursos dos LLMs: geração de texto e sumarização de texto. Usando um LLM geral ou ajustado, um desenvolvedor pode solicitar a otimização ou reestruturação de um trecho de código para torná-lo mais eficiente e/ou eliminar código duplicado.
Os LLMs funcionam bem para otimizar e refatorar partes menores de código que se encaixam na janela de contexto dos modelos, mas exigem soluções maiores que mantenham metadados sobre toda a aplicação de software para alcançar resultados aceitáveis em partes maiores de código e/ou sistemas de software completos.
Semelhante à otimização de código, os LLMs podem ser usados para aplicar e impor normas de programação empresarial em relação a tópicos como nomenclatura de funções e variáveis, estrutura de código e convenções de programação empresarial. Normalmente aplicados no nível do repositório como parte do processo de avaliações e confirmação de código, os LLMs ajustados nas normas de programação da empresa podem traduzir o código enviado para cumprir as normas da empresa. Essas normas também podem incluir o fortalecimento das convenções que ajudam a empresa a cumprir as normas regulatórias.
Como as linguagens de programação são como qualquer outra linguagem, a capacidade de tradução de texto nativa dos LLMs pode traduzir software escrito em uma linguagem de programação para outra, como por exemplo, converter C# em Java.
Assim como a otimização de código, os LLMs sozinhos funcionam bem para converter pequenos trechos de código que se encaixam na janela de contexto do modelo, mas são necessárias soluções maiores que mantenham metadados e outras informações contextuais importantes para converter trechos maiores de código ou sistemas de software completos.
Por meio de recursos de conversão de código, a IA generativa também pode facilitar a tradução de código entre diferentes linguagens de programação, como a tradução de código COBOL para Java. Isso pode ser particularmente útil em ambientes multilíngues ou durante migrações de sistema, economizando aos desenvolvedores o tempo e o esforço de reescrever manualmente o código.
A compreensão de código é análoga à geração de código. Em vez de converter prompts em linguagem natural em código, a explicação do código toma um pedaço de código como entrada e gera uma explicação em linguagem natural sobre a funcionalidade do código. Por exemplo, um prompt como "Explique a função dessa parte do código python" seguido de uma seção de python pode gerar um resumo linha por linha e geral da finalidade do código.
Esse recurso também pode ser usado para detectar erros no código, também conhecidos como busca de bugs, levando o modelo a "identificar por que esse trecho de código está falhando".
A seleção de APIs e bibliotecas é a aplicação da geração aumentada de recuperação (RAG) ao gerenciamento empresarial de APIs e bibliotecas de software. Um desenvolvedor que procura uma API para usar com uma aplicação pode compor um prompt da RAG que consulta um banco de dados corporativo de nomes de APIs, descrições, endpoints etc., para responder a perguntas como: "Temos uma API que faz xyz?" Se as descrições de APIs e da biblioteca de código forem mantidas com alta qualidade e palavras-chave, essa aplicação pode ser ajustada para fornecer respostas consistentes que aceleram o desenvolvimento de aplicações, bem como a integração do desenvolvedor.
Os arquitetos devem tomar uma série de decisões significativas de arquitetura ao projetar soluções de desenvolvimento de aplicações usando LLMs.
O modelo oferece indenização/proteção de direitos autorais, e como você pode identificar se o código gerado está sobrecarregado por termos de licença? Mesmo os modelos treinados em licenças permissivas podem ser sobrecarregados por cláusulas de licenciamento, como a concessão de crédito ao detentor dos direitos autorais original.
Os arquitetos que criam soluções destinadas a impor e aplicar normas de programação empresarial devem considerar o esforço necessário para ajuste um LLM para "entender" as normas empresariais; e tomar uma decisão informada sobre se outros métodos, como ferramentas de linting, são mais bem equipados para alcançar recursos semelhantes.
A assistência de código de estilo de preenchimento automático deve responder rapidamente para não interferir no treinamento do pensamento de um desenvolvedor. Os arquitetos devem considerar o posicionamento e a conectividade dos modelos de assistência ao desenvolvedor para garantir que os suportes ao desenvolvedor sejam benéficos, não intrusivos.
Grandes modelos de linguagem não têm garantia de produzir código funcionalmente correto, especialmente se o código gerado ou revisado precisar se encaixar em um sistema de software maior. Embora não haja uma solução direta para esse problema (e esteja se tornando menos uma à medida que os LLMs evoluem), os arquitetos precisam estar cientes de que o código gerado pelo LLM precisa ser submetido à mesma garantia de qualidade e controles de segurança que o código produzido por desenvolvedores humanos.
Geralmente, os LLMs disponíveis são treinados em um pequeno número de linguagens de programação contemporâneas, como Python, Javascript, C# e outras. Os arquitetos de soluções que precisam oferecer compatibilidade com linguagens mais antigas ou de nicho podem acabar tendo poucas opções de modelos disponíveis ou podem ser obrigados a ajustar agressivamente um modelo geral para atender a suas necessidades específicas.