1. A Profissão de Programador na Era da IA: Medos e Realidade [1]

thumbnail A ascensão da Inteligência Artificial (IA) gerou preocupações sobre o futuro da programação, mas a realidade é que a profissão está mudando, não desaparecendo.

1.1. Preocupações Atuais e a Confusão sobre o Fim da Profissão [1]

  1. Muitos programadores, tanto iniciantes quanto experientes, questionam se ainda vale a pena investir na carreira devido às mudanças no mercado e ao avanço da IA [1].
    1. O mercado de tecnologia se tornou mais difícil nos últimos três ou quatro anos, com programadores experientes procurando emprego por meses e empresas fazendo demissões [5].
    2. A IA agora escreve código, gera testes, cria documentação e faz revisão de código, o que aumenta a preocupação sobre a relevância da profissão [8].
  2. Há uma confusão entre a mudança do mercado e o fim da profissão de programador [10].
    1. O mercado se tornou mais seletivo e as vagas estão mais disputadas, mas isso não significa o fim da programação [13].
    2. A ideia de que a profissão está acabando vem de pessoas que conheceram a programação durante um período "fora da curva" no auge da pandemia, quando havia muitas vagas e salários altos [15].
    3. A desaceleração do mercado e a correção do setor de tecnologia após esse período excepcional foram interpretadas erroneamente como um colapso [17].
  3. Os anos de 2019 a 2022 não são uma referência correta para o mercado de tecnologia, pois representaram o auge de uma bolha de contratação, não o padrão normal da profissão [20].

1.2. A Diferença entre Dificuldade e Inviabilidade da Profissão [25]

  1. Não se deve confundir um mercado difícil e seletivo com o fim da profissão ou com a ideia de que não vale mais a pena ser programador [25].
    1. Quem busca facilidades, como as que existiam durante a pandemia, não encontrará valor na programação, pois nada de valor é fácil [26].
    2. É preciso encarar a realidade de que as coisas são difíceis por natureza, seja na programação ou em qualquer outra área [32].
  2. A preocupação real dos programadores é se a profissão ainda vale a pena na era da IA, que gera código, testes e documentação [35].

1.3. O Deslocamento de Responsabilidades na Programação [41]

  1. É natural ter medo de ficar desempregado ou de investir em uma profissão que pode se tornar obsoleta [41].
  2. No entanto, a perspectiva de que o programador vai desaparecer está errada; o que está acontecendo é um deslocamento de responsabilidades [46].
    1. Grande parte do trabalho do programador era operacional, como escrever código manualmente, integrar bibliotecas e depurar erros [50].
    2. Hoje, a IA pode fazer boa parte desse trabalho operacional em pouco tempo, e essa capacidade continuará avançando [53].
  3. Se o conceito de programador se resume a apenas escrever código e entregar tarefas, então há motivo para preocupação, pois essa camada operacional está se tornando mais barata [55].
  4. O software nunca foi apenas código; a programação vai além disso [57].
    1. O valor do trabalho está se deslocando para outras áreas, como entender o problema, arquitetar a solução, avaliar riscos e trade-offs, escolher a arquitetura correta e lidar com grandes aplicações e volumes de dados [59].
    2. É crucial saber se o que está sendo produzido realmente faz sentido para o negócio [60].

1.4. A Importância do Conhecimento Humano na Tomada de Decisões [61]

  1. Embora a IA conheça arquitetura, banco de dados e padrões de projeto, o fato de ela "saber" não significa que o programador saiba ou que ele saberá quando esses temas são relevantes [61].
  2. Um exemplo prático ilustra a necessidade do conhecimento humano: a criação de um endpoint que insere dados no PostgreSQL e publica uma mensagem em um Kafka [62].
    1. A IA pode gerar o código perfeitamente, mas se o Kafka falhar após a inserção no banco, haverá um problema de Dual Write (dupla escrita), onde o banco tem um registro, mas a mensagem nunca chega à fila [65].
    2. Esse problema resulta em um estado inconsistente na aplicação, e a IA não o resolverá se o programador não souber que ele existe [72].
    3. Para resolver o Dual Write, é preciso conhecer padrões de projeto como Transaction Outbox Pattern, técnicas de retry, deduplicação e idem potência [76].
    4. Se o programador não tem esse repertório, ele não saberá incluir essas soluções no prompt da IA, e o erro só será descoberto em produção [84].
  3. Outro exemplo é a busca em banco de dados: a IA sempre usará o operador LIKE para buscas SQL, mas um programador com conhecimento sabe que existem técnicas mais avançadas, como Full-Text Search, que são mais eficientes [89].
    1. Sem esse conhecimento, o programador não pedirá à IA para usar essas técnicas, e a solução entregue será menos otimizada [91].
  4. Há uma diferença crucial entre não saber resolver um problema e nem sequer saber que um problema existe [95].
    1. A afirmação "Eu não preciso mais estudar porque a IA já sabe" é equivocada, pois o problema é o que o programador não sabe [96].
    2. Quando se sabe que não se conhece algo, é possível pesquisar e usar a IA para aprender; o perigo real está no que se desconhece completamente [99].

2. A Importância dos Fundamentos e do Repertório na Era da IA [105]

thumbnail

A IA amplifica a capacidade de execução, mas sem o julgamento humano baseado em fundamentos sólidos, ela pode levar a resultados desastrosos, tornando o conhecimento fundamental mais crucial do que nunca.

2.1. A Complexidade das Decisões de Engenharia e Arquitetura [105]

  1. Simplesmente pedir à IA para "aplicar todas as boas práticas, usar todos os padrões de arquitetura, pensar em segurança, performance, escalabilidade, SOLID e design patterns" não resolve os problemas de engenharia de software [105].
    1. Boas práticas e padrões não são "temperos" que se adicionam magicamente a um projeto; não existem botões para "arquitetura escalável" ou "todos os design patterns" [108].
    2. Toda decisão de engenharia e arquitetura envolve escolhas e trade-offs, onde a melhoria de um aspecto piora outro [113].
  2. Exemplos de trade-offs em arquitetura:
    1. Usar lock pessimista ou otimista em banco de dados resolve race conditions, mas destrói o throughput (capacidade de processamento) da aplicação [116].
    2. Trabalhar com consistência forte nos dados garante a integridade, mas aumenta a latência e a indisponibilidade do sistema [118].
    3. Trabalhar com consistência eventual torna as coisas mais simples e rápidas, diminuindo a latência e aumentando a disponibilidade, mas exige lidar com dados inconsistentes [120].
    4. A escolha entre monolito e microsserviços: microsserviços oferecem independência e facilitam a manutenção, mas introduzem complexidades como partições de rede, latência, observabilidade, falhas parciais, comunicação distribuída e o teorema CAP [123].
  3. Ao pedir "melhores práticas", é preciso especificar "melhores para quê?" (consistência, latência, disponibilidade, custo ou manutenção), pois melhorar um aspecto geralmente piora outro [129].
    1. Arquitetura é escolher conscientemente quais problemas se está disposto a ter [132].
    2. Quanto mais a IA implementa soluções, mais importante se torna a capacidade humana de decidir qual solução deve ser implementada [133].

2.2. A Amplificação do Conhecimento e a Separação dos Profissionais [134]

  1. A ideia de que não é mais preciso estudar porque a IA já sabe está errada; na verdade, é o contrário: nunca foi tão importante ter repertório e fundamentos [134].
    1. A IA aumentou a capacidade de execução, mas a execução sem capacidade de julgamento é uma combinação perigosa [136].
    2. Uma analogia é entregar uma motosserra industrial a alguém que não entende de estrutura: ele cortará muito mais rápido, mas pode derrubar a casa se não souber qual viga sustenta o teto [138].
    3. A potência da IA não substitui o conhecimento; ela apenas amplifica as consequências da falta dele [139].
  2. A IA vai separar os profissionais: dois programadores podem usar a mesma IA e produzir resultados diferentes [140].
    1. Um programador apenas pedirá à IA para implementar algo baseado em requisitos [142].
    2. Outro programador, com base e repertório, avaliará premissas, garantias (como ACID), race conditions, e tipos de consistência (forte, eventual, fraca) [144].
    3. Essas perguntas vêm dos fundamentos e não aparecem nos requisitos; o programador precisa de repertório para fazê-las [145].
  3. Os fundamentos são a parte mais importante da carreira de um programador [148].
    1. Frameworks, ferramentas e até a própria IA mudam e se tornam ultrapassados [150].
    2. Não se deve competir com a IA para ver quem escreve código mais rápido; essa batalha já está perdida e não há problema nisso [155].
    3. A questão é quem consegue direcionar a capacidade da IA para construir soluções que funcionam no mundo real [160].
    4. Para isso, não há atalhos: é preciso ter repertório, fundamentos e saber questionar as respostas da IA [162].
    5. Sem base, o programador não questiona os resultados da IA e, em vez de usar uma ferramenta, está apenas obedecendo a ela [165].
  4. Conhecimentos sobre processadores, memória RAM, sistema operacional e redes de computadores são extremamente valiosos e ajudam a construir uma carreira à prova de crise [166].
    1. É fundamental focar nos fundamentos, pois eles sobrevivem ao longo do tempo, em vez de seguir modismos e ferramentas passageiras [169].

2.3. Vantagens de Ser Programador na Era da IA [174]

  1. A IA não é um motivo para desistir da programação; para quem tem base, ela é um grande alavancador de conhecimento [181].
    1. No passado, pesquisar era muito mais difícil, exigindo livros, bibliotecas e fóruns; hoje, a IA atua como um "professor 24 horas" para ajudar a resolver bugs e aprender [185].
  2. Outras vantagens da profissão de programador incluem:
    1. A possibilidade de trabalhar no conforto de casa, perto da família [191].
    2. A oportunidade de trabalhar para o exterior e ganhar em moedas fortes como dólar ou euro [194].
    3. No Brasil, a remuneração de um programador é significativamente maior do que a média da população, com um júnior ganhando mais que o salário mínimo [195].
    4. A capacidade de atuar em diversos setores do mercado (hospitais, bancos, e-commerce, delivery), pois tudo hoje gira em torno de tecnologia [201].

2.4. A Realidade da Carreira e a Importância de Ser um Bom Programador [207]

  1. É importante não buscar facilidades, pois construir uma carreira à prova de crise, com repertório e base, é difícil e exige tempo, foco, disciplina e investimento [207].
    1. Não se deve cair na ideia de que as coisas são fáceis ou que não vale a pena; para alcançar o sucesso, é preciso estar disposto a enfrentar obstáculos [211].
  2. A opinião pessoal do autor é que vale muito a pena ser programador, mas não qualquer programador, e sim um bom programador [214].
    1. O comprometimento em ser um bom programador garante que a carreira continuará valendo a pena ao longo do tempo [216].