Os futuros IA poderiam realmente escrever aplicativos completos e assumir empregos de programadores? Vamos entender realisticamente o que a IA pode e não pode fazer a partir de 2024.
Você provavelmente já ouviu pessoas falando sobre o ChatGPT e outros novos chatbots de IA. Eles conversam sobre vários tópicos de maneira surpreendentemente boa. E sim, eles também podem resolver muitos problemas de programação.
Mas a IA é uma ameaça existencial para as carreiras dos desenvolvedores? Ou se tornará apenas mais uma ferramenta para aumentar as capacidades dos programadores?
Neste guia, examinaremos as realidades das capacidades atuais da IA em desenvolvimento de software, onde a tecnologia ainda é insuficiente, e como você pode proteger suas habilidades neste cenário de rápidas mudanças.
ChatGPT e LLMs: Entendendo a Tecnologia de IA
Chatbots como o ChatGPT não são programas que “pensam“. Eles não entendem linguagem ou programação. Eles preveem respostas que parecem inteligentes ao encontrar padrões em enormes pilhas de dados de texto online.
Os programadores chamam-nos de “modelos de linguagem grandes” (LLMs), uma expressão sofisticada para um preditor de texto turbinado.
Para colocar o “grande” em perspectiva, o ChatGPT foi treinado em um conjunto de dados de 570GB a 45TB de trechos de texto abrangendo fóruns na internet, livros e escrita online, e muitas informações foram retiradas diretamente do Reddit.
Este enorme corpo de dados textuais permite que o ChatGPT gere passagens, responda perguntas e até escreva código com base em prompts de texto. Seu conhecimento vem inteiramente desses textos pré-existentes, não através de uma verdadeira compreensão do mundo.
Então, embora o ChatGPT pareça hábil em conversar, sua inteligência tem limitações.
- Ele só pode manter o contexto por até alguns milhares de palavras.
- Ele não tem experiência real.
- Ele não pode raciocinar ou fazer saltos intuitivos.
- Ele tem dificuldade em entender códigos complexos.
No entanto, essa tecnologia continua avançando rapidamente. Então, como o ChatGPT e outros LLMs se saem em tarefas de codificação hoje?
O ChatGPT pode escrever código funcional?
ChatGPT pode produzir código em execução em JavaScript, Python, SQL, Bash e outros idiomas quando solicitado de maneira adequada. É um programador iniciante, mas você pode continuar solicitando correções para obter um código funcional.
Para problemas simples de programação, o ChatGPT oferece versatilidade impressionante e permite economizar tempo criando códigos básicos que, de outra forma, você faria manualmente. Nestes casos, os LLMs definitivamente economizam tempo para programadores.
Contudo, seu código é frequentemente ineficiente ou ignora casos extremos porque não possui o contexto completo do problema. De fato, o ChatGPT às vezes até adverte que seu código de exemplo requer uma revisão completa antes da aplicação.
Então, sabemos com certeza que os LLMs ainda não estão prontos. Mas só podemos imaginar quão bons eles serão, pois os LLMs avançados têm apenas um ano de idade (ChatGPT foi lançado em 30 de novembro de 2022).
“Se a IA continuar progredindo neste ritmo, nos próximos 30 anos, a maioria da raça humana estará em apuros quando se trata de empregos, não apenas programadores,” disse um usuário do Reddit no subreddit /r/learnprogramming/.
Tarefas de Desenvolvimento que a IA Pode Executar
Embora o ChatGPT não possa substituir um desenvolvedor sênior, ele oferece uma utilidade direta ao tornar os programadores mais eficientes. Vamos ver como o ChatGPT pode te auxiliar como programador e eliminar os processos mais trabalhosos regulares.
Automatizando Tarefas Repetitivas
Para desenvolvedores experientes, escrever aplicativos CRUD, scripts simples e códigos de modelo para backend estão entre os aspectos mais tediosos do trabalho.
Com a IA, você pode eliminar esse trabalho árduo por meio da geração automática de código. Em vez de codificar manualmente sistemas básicos de registro de usuário repetidamente, um modelo de IA poderia produzir instantaneamente protótipos funcionais personalizados para cada esquema de banco de dados do projeto.
A utilidade da IA para codificação repetitiva só aumentará à medida que abstrações de alto nível continuarem sendo incorporadas ao uso comum por meio de frameworks como React e Django.
Processamento de Linguagem Natural
Os gerentes de produto frequentemente elaboram especificações em prosa cotidiana como “Os usuários devem poder atualizar suas informações de pagamento salvas.” Programar comportamentos tão vagamente definidos deixa bastante espaço para desalinhamento com as expectativas dos stakeholders.
Com LLMs poderosos como o ChatGPT 4, a IA pode ajudar a interpretar solicitações de clientes em formato livre para estruturar requisitos técnicos detalhados.
Utilizando documentos e conversas do cliente, LLMs podem ajudar a traduzir solicitações para semânticas executáveis para programadores. LLMs podem ajudar a identificar ambiguidades para resolver antecipadamente, em vez de no meio do projeto enquanto você otimiza suas instruções.
Detecção de Bugs
Modelos de IA treinados com grandes volumes de código aberto também podem ser excelentes na revisão de software para detecção de defeitos. Pesquisadores da Microsoft desenvolveram redes neurais especializadas para identificar bugs, alcançando uma precisão superior à de programadores humanos em alguns testes.
Como programador, você pode usar este colega de IA para analisar rapidamente os commits em busca de lógica defeituosa, erros de descontinuação de dependências desatualizadas e até falhas de segurança. Em vez de examinar manualmente milhares de linhas, você receberá sugestões anotadas sobre o que precisa ser corrigido.
Previsão de Problemas
Além de encontrar bugs de forma reativa, uma IA suficientemente avançada pode prever problemas antes que eles surjam com base no código que você está escrevendo. Ela pode fazer isso continuamente verificando o código e identificando se ele poderia falhar em algum momento durante a execução.
Ou, para bibliotecas e frameworks com muitos dependentes downstream, companheiros de IA podem identificar mudanças significativas antes dos lançamentos. Isso ajuda você a suavizar transições e minimizar interrupções proativamente sem uso adicional de recursos.
Melhor Estimativa de Projeto e Cronograma
Falando sobre o uso de recursos, as pessoas costumam subestimar quanto tempo os projetos de software irão demorar. Ou tendemos a ser muito otimistas ou esquecemos dos riscos. Isso faz com que os projetos ultrapassem o orçamento e o cronograma.
As ferramentas de IA estão começando a ajudar, analisando dados de projetos anteriores para ver quanto tempo projetos semelhantes levaram. Por exemplo, CloudBees tira contexto de todas as suas cadeias de ferramentas e faz sentido para você. Ele pode então usar a informação para estimar cronogramas de entrega de software.
Claro, a IA não pode prever tudo o que pode dar errado, mas considerando a quantidade de dados que analisa antes de estimar prazos, pode ser um ótimo ponto de partida. Com o tempo, à medida que as ferramentas obtêm mais dados, as estimativas devem melhorar.
Otimizando seu código
É ótimo ter um segundo par de olhos para o seu código. Isso pode ajudar a identificar problemas com a lógica do código, encontrar maneiras melhores e mais simples de obter o mesmo resultado e até otimizar a velocidade.
Enquanto os programadores investem continuamente esforços para refinar sistemas para velocidade e eficiência, ajustar o código através de tentativa e erro torna-se tedioso.
LLMs podem fornecer sugestões de otimização para ajudá-lo a otimizar e refatorar código rapidamente.
Em vez de tentativas às cegas, você terá a IA identificando claramente as oportunidades mais acessíveis para obter os maiores ganhos. Ela pode aconselhar a divisão de monólitos em microsserviços, a adição de índices para consultas dispendiosas ou a atualização de frameworks para práticas modernas mais eficazes.
As Limitações das Ferramentas de IA no Desenvolvimento
Os desenvolvedores devem se sentir ameaçados pela utilidade da IA em automatizar tarefas de codificação rotineiras e tarefas de desenvolvimento complementares?
A tecnologia atual mostrou-se inadequada até mesmo para trabalhos de programação moderadamente complexos. Assim, aspectos essenciais do fluxo de trabalho do desenvolvedor parecem destinados a permanecer conduzidos por humanos no futuro previsível.
Código de Baixa Qualidade
O código produzido inteiramente por ChatGPT ou modelos similares tende a sofrer de falhas sutis. Embora utilizável, o código não considera a variedade de casos extremos que você pode conhecer, e sem raciocínio lógico, depende exclusivamente do que você pede para fazer.
Aqui está um experimento feito por um usuário do GitHub. Você pode ver que o ChatGPT faz um ótimo trabalho explicando e detalhando um problema:
Mas então sai para dar apenas código parcialmente correto, onde ele pula a lógica para definir a resposta como 0 quando n é 1.
Para garantir que todos os casos extremos sejam tratados, o código exigiu que adicionássemos esta condição if, como você pode ver na captura de tela abaixo.
Portanto, o código criado com o ChatGPT geralmente resulta em aplicativos instáveis que falham em produção devido a exceções não tratadas.
Até que a IA avance radicalmente, o código gerado continuará sendo muito inadequado para a maioria das aplicações do mundo real sem uma supervisão e edição intensas.
Potenciais Riscos de Segurança
Junto com problemas de estabilidade, o código escrito por modelos de linguagem introduz riscos de segurança alarmantes. Como a IA nem sempre pode considerar casos extremos, seu código pode se abrir para bugs e riscos de segurança exploráveis.
Por exemplo, se você está desenvolvendo um aplicativo web e não limpa adequadamente as entradas dos usuários, hackers podem explorar isso para obter acesso ao seu banco de dados através de injeções SQL e ataques XSS.
Não Consegue Resolver Problemas Novos
Para deslocar programadores humanos em vez de auxiliá-los, a IA precisa enfrentar novos problemas. Os modelos atuais apenas associam comandos com soluções encontradas durante o treinamento. Em um estudo independente, os pesquisadores descobriram que o ChatGPT falhou em 52% das questões de programação ao fornecer código parcial ou incorreto.
Entretanto, os usuários ainda escolheram a resposta do ChatGPT 39,34% das vezes devido à sua abrangência geral.
Somente quando os modelos podem deduzir soluções razoáveis e pensar além das etapas básicas, como as pessoas, eles podem impulsionar o desenvolvimento por conta própria. Até então, seu valor permanece limitado a acelerar tarefas conhecidas em vez de inovar.
A IA Não Tem Nenhum Entendimento
A IA existente não possui uma compreensão adequada de código ou capacidade de raciocínio abstrato – ela simplesmente reconhece padrões nas solicitações de entrada e fornece respostas que “parecem” relevantes. Sem um entendimento contextual, suas soluções frequentemente ignoram restrições críticas ou fazem escolhas irracionais que nenhum engenheiro faria.
Considere a analogia de um robô médico treinado para diagnosticar pacientes, associando sintomas a doenças registradas. Ele poderia se sair razoavelmente bem recomendando tratamentos comuns, mas poderia prescrever catastroficamente quimioterapia para uma pinta na perna apenas porque apareceu uma linguagem superficialmente semelhante vinculando os dois.
A Engenharia, por outro lado, depende da racionalidade e do julgamento humano para fazer projetos coerentes. Assim, até que uma IA melhor seja alcançada, os desenvolvedores podem se beneficiar da IA para aprimorar seus fluxos de trabalho de codificação existentes.
O Papel Futuro da IA na Programação
Embora a IA atualmente tenha grandes limitações, o ritmo de crescimento nesse espaço é fenomenal. A IA passou de textos incompreensíveis para prosa em inglês impecável, indistinguível de textos escritos por humanos, em apenas um ano.
No futuro próximo, a IA poderá substituir um programador iniciante ao lidar com tarefas básicas de programação automaticamente. De fato, segundo avaliações internas da OpenAI, o GPT-4 supera significativamente suas versões anteriores em todas as avaliações, incluindo tarefas relacionadas à programação.
“Será uma ferramenta no kit do desenvolvedor que tornará seu trabalho tanto mais rápido quanto mais fácil, ao mesmo tempo que introduz um nível de complexidade e opacidade que, sem dúvida, causará novos problemas,” diz Lawjarp2, um usuário do Reddit.
A natureza da programação já está evoluindo, como podemos ver com GitHub Copilot, CodeWhisperer da Amazon e muitos outros.
A codificação será transformada de digitação manual para trabalhar sinergicamente com sistemas de IA gerativos — com as pessoas fornecendo contexto, visão, supervisão e solução de problemas.
Este modelo híbrido permite que a IA lide com o trabalho maçante de codificação enquanto os desenvolvedores se concentram na arquitetura de sistemas de alto nível, resolução de problemas complexos, criatividade e prevenção de problemas.
Portanto, embora as tarefas mudem, os desenvolvedores de software não estão sendo completamente substituídos. A profissão, no entanto, parecerá radicalmente diferente em alguns anos.
Como garantir o futuro da sua carreira em programação
Em vez de entrar em pânico com a tomada de controle por IA, desenvolvedores aspirantes e atuais devem reconhecer os modelos de linguagem pelo que são: assistentes em vez de substitutos. Aqui estão algumas dicas para manter suas habilidades relevantes:
Aprenda Engenharia de Prompt
Maximizar a utilidade do ChatGPT e do GitHub Copilot depende da eficácia na composição de prompts. Infelizmente, a engenharia de prompts é atualmente mais uma arte do que uma ciência.
Mas esperar que os engenheiros codifiquem tudo à mão como as gerações anteriores faziam não faz mais sentido. É melhor permitir que novos desenvolvedores aproveitem as novas ferramentas disponíveis.
Codificadores experientes devem passar tempo experimentando modelos de linguagem com diferentes entradas e construir intuição para o que funciona. Lembre-se, cada LLM tem um estilo único, e é bom entendê-los, considerando que estão se tornando parte dos fluxos de trabalho diários.
Aprimore Suas Habilidades de Solução de Problemas
A criatividade e a intuição humanas continuam indispensáveis, uma vez que o desenvolvimento de software lida com problemas abertos. Não é apenas uma tradução mecânica de especificações técnicas para código.
Nenhuma quantidade de velocidade bruta na codificação pode substituir a criação de soluções perspicazes ou a elaboração de arquiteturas simples em ambientes complexos. Portanto, concentre-se no conhecimento, criatividade e compreensão profunda da sua indústria enquanto delega o trabalho rotineiro aos parceiros de IA.
Aprenda a Empatizar com os Usuários
Lembre-se de que o código é escrito para atender aos desejos e necessidades das pessoas. À medida que a IA se torna mais capaz de assumir funções de programação de nível inferior, os desenvolvedores devem reforçar os pontos fortes que as máquinas não têm, ou seja, empatia.
Priorize funções como gerentes de produto ou designers de UX que enfatizam a compreensão do público e a construção para humanos. Traga o pensamento voltado para o usuário para o primeiro plano, mesmo ao colaborar com codificadores de IA nos detalhes de implementação.
Estudar Aprendizado de Máquina
Para aqueles empolgados em ultrapassar limites, explorar o aprendizado de máquina oferece insights sobre os últimos avanços em IA com aplicações amplas. Redes neurais agora sustentam soluções desde o processamento de imagens até a análise preditiva.
Compreender como os modelos funcionam, treinam e interagem com sistemas de software também pode ajudá-lo a abrir novas possibilidades na sua carreira. Considere complementar os fundamentos da ciência da computação com cursos de ciência de dados e ML.
Perguntas Frequentes
A IA substituirá os programadores em 5 anos?
Não. Em cinco anos, a IA provavelmente lidará com mais tarefas de codificação repetitivas, mas não substituirá completamente o julgamento humano e a supervisão para criar sistemas de software complexos. Os desenvolvedores podem ver seus papéis mudarem com assistentes de IA, mas ainda assim continuarão a arquitetar soluções e restrições.
A IA algum dia substituirá os desenvolvedores?
A substituição completa parece improvável, mesmo com uma IA avançada no futuro, dada as demandas sempre em evolução do software e a criatividade intrínseca à solução de problemas novos. A programação simples acaba se tornando comum, mas não o pensamento estratégico de alto valor. Desenvolvedores que aprendem a aproveitar a IA em vez de competir contra ela efetivamente permanecerão empregados.
No final do dia, não tema a dominação das máquinas. Dê as boas-vindas aos colegas de equipe de IA que irão aumentar a produtividade além do que qualquer engenheiro ou algoritmo sozinho pode alcançar. O desenvolvimento de software avança muito rápido para que qualquer mudança única domine para sempre. E especialmente no contexto da tecnologia, a adaptabilidade é a habilidade mais crucial.
Portanto, em vez de se preocupar se o código é escrito por mãos biológicas ou de silício a longo prazo, cultive a versatilidade, independentemente das ferramentas que surgirem.
Qual é a sua opinião sobre assistentes de codificação de IA?
Os ventos da mudança estão, sem dúvida, acelerando na engenharia de software. À medida que a IA evolui rapidamente, o que antes considerávamos domínio da cognição humana agora pode ser terceirizado para máquinas.
Vamos permitir que a ansiedade sobre o futuro paralise o progresso? Ou vamos reimaginar ativamente nossos papéis enquanto nos beneficiamos do poder exponencial desta tecnologia?
Os competidores mais formidáveis são geralmente aqueles que adotam a tecnologia mais recente rapidamente em vez de resistir à mudança. Mas a chave continua sendo equilibrar judiciosamente a engenhosidade humana e a inteligência artificial como forças complementares, em vez de campos opostos.
E assim, conforme o software continua devorando o mundo, os programadores fariam bem em deixar de lado o medo em favor de trabalhar com confiança em projetos mais complexos e desafiadores.