39 pontos por xguru 2024-03-25 | 7 comentários | Compartilhar no WhatsApp
  • Grandes modelos de linguagem (LLMs) passaram a conseguir gerar imagens, texto e código, causando grande impacto nas áreas criativas
  • No começo, havia muitos resultados engraçados, como desenhos com mãos humanas erradas ou afirmações factualmente incorretas, mas isso vem melhorando gradualmente
  • Antes do surgimento desses modelos, o principal argumento contra a automação era que máquinas não poderiam pensar de forma criativa, mas essa tese está ficando cada vez mais fraca
  • Para onde vamos agora?

Framework: níveis de capacidade no desenvolvimento de software

  • Desenvolvimento de software é mais do que simplesmente escrever código
  • A imagem do programador é a de alguém digitando código intensamente em um quarto escuro olhando para um computador, mas, na prática, gasta-se mais tempo com outras tarefas do que escrevendo código
    • Levantamento de requisitos com usuários de negócio
    • Refinamento dos requisitos para que possam ser modelados em código
    • Visualização da solução e planejamento com colegas de equipe, como designers e gerentes de produto
    • Design técnico e refinamento com outros desenvolvedores
    • Setup de infraestrutura, configuração, boilerplate etc.
    • Escrita efetiva de código
    • Debugging, compreensão do código de outras pessoas, documentação etc.
    • Deploy em produção
    • Resposta a incidentes em produção
    • E muitas outras tarefas
  • Dizer que "a IA vai substituir os desenvolvedores" implica que a IA precisa ser boa em todas as tarefas acima
  • Mas, ao olhar para essa lista, algumas dessas atividades talvez possam ser automatizadas no futuro, porém outras ainda não parecem automatizáveis

Classificação dos níveis de automação em carros autônomos

  • A área de carros autônomos desenvolveu uma forma de classificar níveis de automação
  • Essa classificação explica com clareza o que a tecnologia atual consegue fazer e evita uma visão binária
  • Aplicando esse tipo de classificação ao desenvolvimento de software com IA
    • O nível mais baixo seria o que existia antes: a IA não participa do trabalho. Claro, já havia outros tipos de automação, como compiladores e processos de build, mas isso não era IA, e sim automação determinística escrita por humanos
    • O próximo nível é o que temos hoje
      • Desenvolvedores usando ChatGPT ou GitHub Copilot como apoio
      • Eles usam isso para escrever testes, código repetitivo, refatorar e entender código/erros
      • É possível conversar por chat, como com um colega desenvolvedor, fazer perguntas e pedir ajuda, mas sem acesso ao computador não é possível criar arquivos, rodar comandos de build ou fazer deploy em produção
    • O nível mais alto seria delegar parte ou todo um projeto a um "coder de IA"
      • O coder de IA recebe os requisitos, escreve o código, corrige erros e depois faz o deploy do produto final em produção
      • Eu achava que isso ainda levaria alguns meses para acontecer, mas a demonstração do Devin provou que, embora hoje ele só consiga realizar tarefas simples de desenvolvimento, há potencial de evolução no futuro Devin, o primeiro engenheiro de software com IA
  • Além da capacidade dos modelos de IA, também é preciso pensar na precisão da solução
    • Esses modelos são vulneráveis a alucinações ou tendem a exigir prompts em formatos específicos para obter o que se deseja
    • Isso cria atrito na adoção e faz a maioria das pessoas desistir dos assistentes de IA nesse estágio
    • Mas isso também está melhorando, e os modelos mais recentes já não exigem esse nível de prompt engineering
  • Além disso, em vez de depender apenas dos dados de treinamento, os modelos precisam ser capazes de navegar na web para "aprender"
    • Isso é importante à medida que novas versões de bibliotecas e linguagens de programação são introduzidas

Framework: desenvolvimento de software terceirizado

  • Agora que construímos essa visão de capacidades, qual será o impacto na estrutura do time ou da organização? Empresas desenvolvem software de várias formas:
    • Totalmente interno
    • Majoritariamente interno com alguns poucos fornecedores
    • Pouco interno com muitos fornecedores
    • Totalmente terceirizado
  • Podemos pensar no coder de IA como um fornecedor/consultor terceirizado de desenvolvimento de software
  • É importante que a equipe interna da empresa supervisione o trabalho do fornecedor
    • Contratos podem ajudar a lidar com isso, mas normalmente valem apenas para um fornecedor ou projeto específico, e não conseguem impor metas de longo prazo por esse caminho
    • É melhor ter ao menos uma pequena equipe interna capaz de orientar o fornecedor
    • Da mesma forma, mesmo que seja possível alugar coders de IA como instâncias EC2, ainda é vantajoso ter uma equipe interna de desenvolvedores supervisionando o trabalho

Framework: desenvolvimento de software é modelagem de complexidade

  • Ao falar sobre resolver problemas de negócio, podemos usar o Excel como exemplo.
  • O Excel tem uma barreira de entrada muito baixa, então dá para organizar dados, fazer análises e automatizar alguns processos com ele
  • Mas não é adequado para workflows complexos de negócio, porque não oferece recursos como controle de acesso granular, integração com sistemas não suportados, testabilidade, reutilização e riscos de dependência de fornecedor
  • O mesmo vale para soluções "low-code", como Power Automate
  • "Usuários de negócio poderiam criar esses workflows complexos usando um coder de IA sem a ajuda de desenvolvedores de software?"
  • Pensando bem, Excel e ferramentas low-code existem há décadas; então por que a profissão de desenvolvimento de software ainda existe?
  • Porque pensamos em desenvolvimento de software apenas como escrever código
  • Problemas complexos exigem alguém capaz de gerenciar essa complexidade de forma eficaz e transformar problemas de negócio em modelos digitais no domínio real
  • Em outras palavras, o fato de você conseguir construir um galpão de madeira com um tutorial no YouTube sem a ajuda de um engenheiro civil não significa que também consiga — ou deva — construir um prédio de 10 andares da mesma forma
    • Se você aprender a fazer isso corretamente, aos poucos pode acabar se tornando um engenheiro civil
    • A questão é apenas se você vai investir tempo para aprender direito ou contratar um engenheiro experiente
  • Portanto, seja usando Excel ou o coder de IA mais moderno, se você está modelando lógica complexa, ainda é, na prática, um desenvolvedor de software
  • O que muda é apenas a ferramenta usada para expressar os requisitos de negócio, seja fórmula de planilha, código ou prompt

Framework: o tamanho do mercado

  • Grande parte da ansiedade em torno desse tema parte da premissa de que o tamanho do mercado de desenvolvimento de software vai permanecer igual, ou seja, de que coders de IA vão lentamente tomar "participação de mercado" dos humanos
  • Como o mercado de "resolução de problemas de negócio" é muito maior do que o de desenvolvimento de software, o desenvolvimento de software não deve desaparecer tão cedo

Framework: definição formal da lógica de negócio

  • A lógica de negócio sempre precisa ser definida de forma clara e formal
  • É por isso que linguagens de programação, mesmo usando palavras em inglês como 'if' e 'switch', definem o significado desses termos de forma muito rigorosa, e usar uma palavra errada faz com que não funcione. Pensando bem, o mesmo acontece com fórmulas do Excel ou fluxos low-code
  • No futuro, mesmo que coders de IA consigam gerar produtos de software a partir de instruções em inglês conversacional, ainda deve existir, no backend, uma definição formal básica da lógica de negócio gerada
  • Isso pode parecer muito diferente das linguagens e frameworks que usamos hoje, mas essa definição formal da lógica de negócio ainda soa muito parecida com "código"
  • Até que coders de IA consigam gerar essa lógica de negócio de forma determinística a partir de inglês conversacional, ainda será necessário alguém que entenda o código gerado no backend e possa alterá-lo quando preciso. Esse alguém é o desenvolvedor de software

Conclusão

  • A natureza do trabalho vai mudar e as ferramentas que usamos provavelmente serão muito diferentes das atuais, mas acredito que ainda existirá um mercado para desenvolvedores de software no futuro próximo

7 comentários

 
dhlee0305 2024-03-25

Antes mesmo de a OpenAI ganhar fama, ao ver a IA expandindo seu campo de atuação desde as artes, que eram consideradas entre as áreas em que a adoção de IA seria mais tardia ou até impossível, de repente me ocorreu que as coisas que hoje acreditamos que só os “humanos” podem fazer talvez não sejam “seguras”.

 
edunga1 2024-03-25

Assim como no texto principal e no post https://pt.news.hada.io/topic?id=13557,
a fatia destinada aos desenvolvedores certamente vai diminuir agora, e isso deve se acelerar, certo?

 
ahwjdekf 2024-03-25

À medida que a importância dos prompts de IA se torna cada vez mais evidente, mais usuários perceberão que definir especificações e organizar requisitos com clareza está se tornando indispensável, e isso talvez acabe atuando no futuro em uma direção favorável para o trabalho dos desenvolvedores.

 
colus001 2024-03-25

O código é para as pessoas, e o fato de as máquinas escreverem código significa que as pessoas ainda continuam sendo necessárias, então não acho que essa seja a direção de desenvolvimento de um futuro distante. Acho que vai evoluir para uma forma em que jogamos em uma espécie de caixa-preta as perguntas que queremos, como no backend-GPT inicial que foi experimentado (https://github.com/RootbeerComputer/backend-GPT), ela acessa o DB, processa os dados, e há alguma intervenção humana na experiência antes e depois disso.

 
kaistj 2024-03-25

Parece que, entre os muitos pontos discutidos sobre o ChatGPT e o Copilot, a engenharia de prompts é um deles. Acho que também é um fator importante como podemos transmitir e nos comunicar de forma eficiente com um codificador de IA nos processos em que geralmente nos reunimos para programar, nos comunicamos rapidamente por fala e organizamos e confirmamos as ideias ^^.

 
vbmania 2024-03-25

> "A IA vai substituir os desenvolvedores" significa que a IA precisaria ser proficiente em todas as tarefas acima.

-> Pode ser que esses procedimentos sejam necessários justamente porque são feitos por pessoas e, no fim, quando se passa por todas essas etapas, acho que o resultado final, que é o código produzido, pode acabar tendo certos padrões. É como no Go: achava-se que coisas como fuseki e joseki eram necessárias, mas depois ficou claro que isso era apenas um método inevitável para processar informação dentro dos limites da cognição humana.