Um novo parceiro, mas ainda uma ferramenta para os programadores.
Não é recente o avanço das IAs dentro do ambiente de programação principalmente participando ativamente na criação do código, esse tipo de ferramenta normalmente cria 2 tipos de “times”:
- Time 1 que acredita que essa ferramenta é inútil e só atrapalha o verdadeiro Software Craftsman criando um monte de código que não serve para nada
- Time 2 que acredita que a IA vai fazer tudo sozinha, dominar todo o mercado de programação fazendo com que os programadores finalmente virem fazendeiros
Entendo a visão de ambos os lados mas acredito que como todos os avanços que tivemos na programação a IA é mais uma dessas ferramentas que nos fazem dar um salto de produtividade e desafios.
Já tivemos algumas dessas mudanças bruscas na forma de programar:
- Das válvulas para os transistores
- Do binário para assembly
- Do cartão perfurado para o terminal
- Do assembly para linguagem de alto nível
- De máquinas empresariais de toneladas para computadores pessoais
- Do gerenciamento manual de memória para Garbage Collection
- Novos paradigmas de programação
- Frameworks revolucionários
- Editores de texto para IDEs
- Waterfall para Agile
- Local Server para Cloud
A mudança é uma constante nesta área, um dos fatores de eu gostar de programação é justamente esse, você precisar estar continuamente aprendendo e entendendo as novas regras do jogo. Creio que ter um pensamento de “aprendi desta forma e não vou mudar” dificilmente é algo positivo na área, obviamente você precisa ter principios e boas práticas, mas não pode ficar cego para o inevitável. Quantas empresas gigantes já perderam seu posto simplesmente por querer continuar fazendo as coisas da mesma forma sem observar as mudanças no mundo.
Os fundamentos e arquitetura
Em uma evolução onde escrever o código não é mais necessariamente a jóia da coroa alguns assuntos que antes já eram importantes ganham mais relevância. Se eu preciso guiar uma IA para programar um sistema eu preciso entender o que pedir para ela e como pedir, esse é um dos principais pontos de porque o vibe coding puro (sem o humano verificando) tende a ser destrutivo, a IA vai se perder e começar a fazer coisas totalmente desnecessárias do ponto de vista do problema que precisa ser resolvido, o seu papel como programador é tomar as rédeas e guiá-la para o caminho certo.
E como saber o que é o caminho certo para o problema que está resolvendo? Fundamentos e arquitetura de software, padrões de projetos, boas práticas, etc.
Eu acredito que este é o momento onde esses conhecimentos terão suas vantagens sobre os demais, creio que seja por isso que programadores seniores tendem a se beneficiar mais com IA do que juniores, simplesmente pelo fato de saber o que e como pedir. Se você não sabe o que é um prego como vai pedir um martelo?
Sua visão do sistema e de negócio precisam ser ampliadas para que você costure toda a estrutura necessária para entregar valor no software que é gerado. Como Fred Brooks disse em seu livro “The Mythical Man-Month”: Acredito que a parte mais difícil na construção de software é a especificação, o projeto e o teste de seu construto conceitual, não o trabalho de representá-lo e testar a fidelidade da representação. Resumindo, o grande trabalho do software não é o código, mas sim a especificação e arquitetura.
É uma visão complicada de aceitar, eu entendo, você treinou anos para escrever códigos cada vez melhores e agora essa habilidade parece simplesmente ter perdido totalmente o seu valor, porém lembre-se que com a IA vamos precisar de um humano no comando e entender o que o código em questão está fazendo é uma vantagem. E se em algum momento não precisarmos mais verificar o que a IA está fazendo tudo bem, ainda vamos precisar estruturar o contexto para resolver o problema, afinal de contas essa é a função do programador: resolver problemas, não escrever código.
Todos viram o commit do Linus Torvalds fazendo o merge de seu código gerado com IA, essa descrição é uma prova de que o código em si pode ser delegado:
This is Google Antigravity fixing up my visualization tool (which was also generated with help from google, but of the normal kind).
It mostly went smoothly, although I had to figure out what the problem with using the builtin rectangle select was. After telling antigravity to just do a custom RectangleSelector, things went much better.
Is this much better than I could do by hand? Sure is.
Is this much better than I could do by hand? Sure is., não é sobre o código e sim sobre saber o que é o problema e como resolver.
Read more code; get a mentor; study the design of systems outside your domain; find a niche you love and want to master, then once you’ve done that, master another. Learn and practice the fundamentals. Have fun: yours is a field that has already and will continue to change the world. It is a privilege and a responsibility to be a part of it all.
Grady Booch