7

Existe algum framework pra não ficar burro?

Todo mundo já percebeu que usar IA pra programar torna muito mais complicado ter o mesmo domínio do sistema que se tinha na época de programar na mão, mas todo mundo já percebeu também que a IA veio pra ficar na nossa área.

Minha pergunta é pro ambiente profissional de desenvolvimento: existe algum framework/ferramenta/método pra ajudar a manter o entendimento completo da codebase mesmo usando IA pra implementação? Não vejo problema em deixar a IA se virar em um código pra uma ferramenta interna, protótipo ou qualquer outra coisa sem grande relevância, mas pra um código profissional que vai pra produção eu ainda esperaria que o engenheiro responsável tenha domínio sobre o sistema, e ao menos na minha visão esse domínio não vem somente com code review.

O que tenho tentado fazer ultimamente é: definir qual é a implementação necessária, entender o código atual pra ver o que deveria ser alterado/adicionado, e colocar comentários com uma label tipo AI: <explicação>. Quando acredito que tenho uma solução decente, peço pra IA implementar seguindo os comentários com essas labels que fui colocando pelo caminho (ou seja, eu tento ligar os pontos por mim mesmo e pedir pra IA escrever a sintaxe).

Até que esse método funciona legal, mas gostaria de saber se a comunidade aqui usa algum outro método pra se manter afiado e não depender completamente dos tokens que por enquanto são baratos.

Carregando publicação patrocinada...
2

Toda essa preocupação com arquitetura, software design e principalmente código tende a reduzir cada vez que os modelos se aprimoram. Em alguns anos, ou meses, estaremos criando e "orientando" agentes para prestarem serviços, e serão estes agentes que criarão o software necessário para executarem o serviço. A orientação dos agentes será a nova programação, mas em linguagem natural, e sem preocupação com infra, arquitetura ou design.

Desapega porque o bagulho vai ficar ainda mais sério.

-1

Vamos usar o cérebro por uns 2 ou 3 segundos aqui: imagine que o cenário ocorra exatamente como você acredita que irá ocorrer.

Agora imagina que você vai contratar alguém para orientar os agentes. Você tem dois candidatos:

  • O cara que não tá nem aí para performance, segurança, arquitetura. Ele não quer aprender nada de verdade. A única coisa que ele quer aprender é como usar agentes.
  • O cara com anos e mais anos de preparo em fundamentos. Manja muito de segurança, engenharia, arquitetura. Quando as coisas derem errado, ele vai saber o que fazer.

Sabe porque as empresas até hoje não contratam exclusivamente especialista fodões? Porque seria muito caro formar equipe só com caras assim.

Mas no teu cenário, a empresa não precisa contratar uma equipe de 20 fodões, precisa contratar um só.

Agora, você como o cara que vai contratar, pensa: por que diabos você contrataria um cara medíocre ao invés de contratar um fodão, se agora a empresa tem dinheiro de sobra para contratar o fodão?

Pensa aí se as coisas acontecerem como você pensa, se faz mais sentido ter conhecimento raso ou profundo... Pensa aí...

Você não precisa aprender primeiros socorros... até seu filho engasgar... É quando as coisas dão errado que o conhecimento mostra a sua utilidade. Não existe esse mundo perfeito onde nada dá errado e tudo ocorre da melhor maneira possível.

3

Não, as empresas contratarão "inteligência", de um ou mais fornecedores. Os profissionais que criarão o serviços (ex; Service Designer) não precisam ser fodões, apenas serem experientes. Terá que saber fundamentos de computação, software, IA, agentes, etc.

Empresas resolvem problemas de seus clientes, vendendo serviços que são executados com tecnologia. Isso ainda valerá por décadas.

-1
3
-1

Quem escreveu isso daí é executivo/CEO. Não consigo pensar em fonte pior, CEO geralmente não sabe do que tá falando e comete o exato mesmo erro que o paper que eu mandei o link aponta.

Mas enfim, cara. Eu não tenho porque bancar o bom samaritano para ficar aqui me esforçando para te ajudar. Só vamos refletir nas consequências das nossas decisões caso estejamos errados:

  • Se eu estiver errado: eu vou estar muito mais preparado do que o necessário. Não vou ter dificuldade nenhuma para trabalhar na área.
  • Se você estiver errado: você estará muito aquém do preparo necessário. Vai ter muita dificuldade para trabalhar na área, será obrigado a migrar de área ou, na melhor das hipóteses, conseguirá trabalhar na área ganhando um salário muito baixo.

Se você não precisa de emprego porque é dono de empresa ou algo assim. Então no mínimo pensa nas consequências que você irá causar aos outros na hipótese de você está os influenciando ao erro.

3

Sim, o autor do post é um executivo que vende serviços, a pessoa que vai contratar amanhã muitos dos que aqui estão lendo. Tá focado em "Transformar serviços em produtos escaláveis impulsionados por IA"; isso tá escrito no LinkedIn dele: https://www.linkedin.com/in/fabiohasegawa

O foco das empresas sempre foi serviço, um serviço que resolve problemas dos clientes, e elas cobram por isso. Serviço é fonte de receita: mais serviços, mais receitas; mais clientes atendidos pelos mesmos serviços, mais receita; maior o escopo do serviço, maior a receita; maior a qualidade e velocidade do serviço, maior a receita...

Ontem tinha um programador desenvolvendo o software usado nos serviços; amanhã haverá uma IA criando o software; vida que segue pro CEO. O programador sobe um nível e vai auxiliar nos serviços, usando seu conhecimento de computação para orientar agentes, criar testes de aceitação, deixar user-stories mais claras, ... Ou então fica deprimido porque não está mais codificando e muda de profissão.

-1

Vou facilitar para você e vou falar usando a palavra "serviço" já que isso é necessário para você entender o que eu estou falando:

Mais vulnerabilidades no serviço, mais prejuízo, pior a imagem da empresa, menos clientes, menos receita.

Mais problemas de performance no serviço, menos clientes satisfeitos, mais reclamações, pior a imagem da empresa, menos clientes, menos receita.

Tá muito mais fácil e rápido alguém criar um serviço concorrente ao seu: seu serviço tem pouca performance, pouca segurança. Concorrente rapidamente contrata gente foda e especialista: concorrente tem serviço com melhor performance e segurança. Concorrente tem mais clientes, você tem menos clientes. Você tem menos receita.

Concorrente investe em pessoal realmente qualificado, você investe em pessoal medíocre. Concorrente itera com cliente e resolve problemas do serviço mais rápido. Você itera com clientes e sua equipe tem dificuldades para resolver problemas do serviço. Mais clientes para o concorrente, menos clientes para você. Menos receita para você.

Eu estou avisando. Em um futuro onde a parte "chata" pode ser feita com facilidade e velocidade, quem tem a vantagem são os caras com conhecimento profundo.

E tem uma possibilidade nova pra quem tem conhecimento profundo mas não é bom em negócios e/ou marketing: a IA pode cuidar dos negócios e do marketing. Não é só a psrte técnica que pode ser feita por IA.

Antes serviço feito por gente foda tinha qualidade, mas não tinha cliente porque o serviço concorrente, mesmo que tecnicamente pior, tinha melhor marketing. No futuro, como vai ser quando todo mundo estiver em pé de igualdade no marketing?

3

Quando um dev ou empresa cria algo 100% gerado por IA, está fadado ao fracasso pela concorrência, porque qualquer um pode fazer igual. Nesse caso o efeito manada pode ajudar, como esses dev-influencers com milhares de seguidores, que criam slop e a manada compra.

O que diferencia uma empresa é a qualidade de seus serviços, seja pela tecnologia ou pelo know-how que a empresa possui. Mas agora estamos vivenciando algo que nunca ocorreu: uma nova tecnologia que demanda profissionais sêniores, e os júniores pedendo espaço. As empresas hoje estão buscando capital humano, profissionais de grande experiência e vivência no ramo, porque o recurso "inteligência" (que antes era mais raro) foi resolvido com IA. Mas discernimento na tomada de decisões, baseado em experiência no ramo, tá em falta.

O que os profissionais júniores ainda não entenderam é que não dá pra competir com a IA para criar ou manter software. Eles precisam aprender sobre automação de serviços usando software, atendimento a clientes via agentes, programação de agentes, fundamentos de IA. Fundamentos de computação e desenvolvimento de software serão meras disciplinas na faculdade, talvez uma única pra esses 2 tópicos.

O marketing sempre evoluiu pela difusão de canais. Uma empresa buscava explorar o máximo de canais para divulgar seus serviços: TV, radio, jornal, outdoor... A tecnologia ajuda criando novos canais, e quem explorar esses novos canais primeiro conquista mais clientes. A web trouxe o Google Ads, a IA trouxe agora o OpenAI Ads. Agora existe a possibilidade de divulgar serviços entre agentes, uma dica na resposta após um prompt de um possível cliente curioso sobre algo. Isso não muda pra quem não tem grana pra gastar milhões em marketing; continua tendo que divulgar no Instagram, TikTok, um vídeo viral se der sorte; cada um se vira como pode. Uma empresa pode contratar um favelado pra criar um funk de seu produto - pode ficar mais barato e ter maior alcance do que divulgar seu serviço/produto naquela josta do BigBrother.

2

Esse problema já foi resolvido décadas antes disso de desenvolvimento com IA começar. Mas antes de falar da solução, deixe-me fazer algumas correções que são muito importantes:

Comparar LLM com compilador é uma opinião que infelizmente está virando majoritária nas comunidades de desenvolvimento e influencers da área. Para começo de conversa, a premissa está errada: bons desenvolvedores se preocupam sim em estudar a saída gerada pelo compilador. É por isso que temos disassemblers, depuradores nativos (como GDB), ferramentas como objdump, readelf, ldd etc.

Então, não sei de onde tiraram essa mentira de que desenvolvedores não revizam e/ou não entendem o assembly gerado pelo compilador. Existem inúmeros motivos do porque essa atividade não apenas é útil, como muitas vezes é necessária. Não vou me dar ao trabalho de tentar simplificar a explicação para desenvolvedores web que não estão acostumados com C, low level e programação de sistemas, mas só pare para pensar: se os desenvolvedores realmente não estudassem a saída do compilador, não existiriam centenas de ferramentas que foram feitas especificamente para essa atividade. Veja o Compiler Explorer, mais um exemplo além dos já mencionados.

E um aviso importante: compilador ser determinístico não significa que é 100% preciso. Só significa que se dada a mesma entrada ele gera sempre a mesma saída, e essa saída pode estar errada. Quem nunca teve que depurar código errado gerado pelo GCC não sabe o que é diversão... E sim, esses erros acontecem em frequência significativa. Não é algo que acontece uma vez na vida.

Outra correção: camada de abstração não foi feita para que o desenvolvedor não precise entender como as coisas funcionam por debaixo da camada de abstração. Mesmo que você considere LLM como camada de abstração (o que está errado, mas deixa quieto), isso não te isenta da necessidade de entender como funciona o código gerado pelo LLM. Assim como programar em C não te isenta da necessidade de entender o assembly gerado pelo GCC.

Camada de abstração foi feita para tornar desenvolvimento de sistemas complexos humanamente possível. Vou dar um exemplo: imagine que você precise fazer uma pixel art com 1 trilhão de pixels. É humanamente impossível, são pixels demais. Então você abstrai os pixels em blocos, os blocos em setores, os setores em zonas e as zonas em segmentos. Pronto: agora você não precisa pensar em pixels sempre, só em segmentos, eventualmente em zonas, as vezes em setores, muito pouco frequente em blocos e raramente em pixels.

Camada de abstração é ferramenta para construção de sistemas complexos, não é desculpa esfarrapada para não entender como as coisas funcionam. Você precisa entender como as coisas funcionam para fazer sistemas complexos corretamente. Se você não entende pixels ao construir sua pixel art, você vai fazer segmentos imprecisos.

O problema é que a "imprecisão" está sendo excessivamente tolerada na área de desenvolvimento nas últimas décadas, e as consequências estão aí: IA achando CVE em tudo quanto é projeto.


Dito isso. Você não precisa conhecer toda a base de código para ser capaz de entender como um software funciona. Você abstrai o software em módulos e subsistemas e estuda uma parte por vez.

Primeiro você entende como os subsistemas funcionam para compor o software como um todo. Depois escolhe um subsistema para estudar: daí você estuda como os módulos do subsistema funcionam para compor o subsistema como um todo. Depois escolhe um módulo do subsistema para estudar: aí sim você estuda o código... E repete o processo para outro módulo e/ou outro subsistema. É simples assim.

E para estudar o código você pode replicar a estratégia: estuda como as funções funcionam para compor o código daquele módulo como um todo. Depois escolhe uma função para estudar o código.

Entendeu a estratégia? É só dividir o que você quer estudar em partes menores, entender a relação entre essas partes menores e estudar cada parte de uma vez, repetindo a divisão se for necessário. "Dividir para conquistar".

Pessoal tem feito esse tipo de estratégia de análise desde o século passado para depuração de sistemas complexos e para engenharia reversa. Então não exagerei quando eu falei que a solução existe há décadas, existe mesmo.

Pesquise sobre taint analysis que pode te ajudar também ao precisar analisar bases de código desconhecidas.

Basicamente a solução é aprender a analisar software como gente grande. Estude sobre técnicas de depuração e engenharia reversa, mesmo que só o básico. :)

2

Eu uso regras, critérios e skills. Peço para a IA gerar memória, análise, dividir a tarefa em etapas pequenas e registrar as decisões e testo muito. Faço uma revisão geral também do que ela está fazendo e muita das vezes questiono as decisões e ao final da tarefa eu rodo uma skill de verificação.

Para projetos pessoais eu codo na mão para não perder a prática e ter um entendimento mais profundo e controle.

2

Vou dar uma resposta meio provocativa, mas a única coisa que funciona é desistir de entender.

Se você tá cagando pro assembly que o GCC gera, por que conhecer cada linha do código de alto nível que o modelo gera seria uma obrigação? Você já aceita trabalhar sobre implementações que não entende. A questão é quais garantias permitem fazer isso.

O problema é que um modelo não tem as mesmas garantias de um compilador.

Justamente por isso, “pedi, ele fez e parece funcionar” é um critério péssimo. Você precisa definir o comportamento esperado e ter meios de verificar se ele foi respeitado. Testes de aceitação, propriedades, invariantes, análise estática, observabilidade. Conforme o problema, métodos formais também.

Comportamento observável inclui o que acontece quando dá errado. Acesso indevido, concorrência, falhas parciais, consumo de memória, latência.

Isso não significa ficar burro. Especificar com precisão o que um sistema deve fazer, identificar o que pode dar errado e construir uma validação capaz de pegar esses erros exige bastante entendimento. Pedir pra mesma IA inventar a solução e o critério de sucesso, sem questionar nenhum dos dois, não resolve.

Eu trocaria a meta de "entender o codebase" por "entender o sistema". Quando precisar investigar uma decisão de arquitetura, você desce à implementação. Assim como eventualmente se desce ao assembly.

1

Meus 2 cents,

Bom comentario e esta bem alinhado com o que os grandes gurus de IA (p.ex. Boris Cherny sobre o "plan mode" estar morto) tem dito atualmente: foque no resultado e em formas de medir este resultado.

Ate mesmo o uso de skills tem sido revisto, priorizando apenas skills que indiquem excecoes que o modelo sozinho nao consegue identificar.

Tudo bem que estas recomendacoes sao para modelos de fronteira (p.ex. opus, fable, astra, argon, carbon) mas mostra o caminho que deve ser o comum em muito pouco tempo, mesmo em modelos mais simples: criar QA consistente e trabalhar na excecao.

Soa esquisito ? Ainda soa, mas cada vez menos.

Se pegarmos o roadmap para a nova profissao do momento, o tal "FDE - Forward Deployed Engineer", ele vai pesadamente na direcao de formação sobre negocios e controle de CI/CD, e praticamente nao se fala mais em linguagem de programacao.

Entao o DEV nao precisa mais aprender uma linguagem ? Claro que precisa, mas nao eh a linguagem que vai definir o trabalho dele.

Saude e Sucesso !


Este post foi favoritado via extensão TABNEWS FAVORITOS

Tem curiosidade sobre IA ? Da uma olhada no meu LIVRO: IA PARA ENGENHEIROS