anúncios

sexta-feira, 30 de maio de 2025

O Segredo dos Programadores de Sucesso

Nos últimos anos, a comunidade de programadores tem se concentrado quase exclusivamente nas habilidades técnicas: dominar frameworks modernos, linguagens da moda, arquiteturas complexas e técnicas avançadas. Muitos acreditam que isso é o que diferencia um programador júnior de um pleno ou sênior. No entanto, essa visão é uma armadilha que pode limitar o crescimento profissional.

A Importância das Soft Skills

Apesar de acumular conhecimento técnico por anos, muitos programadores perdem grandes oportunidades para colegas menos técnicos, mas mais habilidosos em habilidades interpessoais, as chamadas Soft Skills. Essas habilidades não técnicas são fundamentais para o sucesso na carreira, especialmente em um mercado onde a Inteligência Artificial (IA) avança rapidamente, automatizando tarefas técnicas.

Enquanto a IA pode gerar código e automatizar processos repetitivos, ela não substitui a capacidade humana de interação, tomada de decisões e influência no ambiente de trabalho. É justamente aí que as soft skills fazem a diferença.

As Três Soft Skills Essenciais para Programadores

  1. Comunicação Persuasiva
  2. Saber comunicar o valor das suas ideias é crucial. Por exemplo, ao propor uma refatoração de código, não adianta focar apenas nos aspectos técnicos. É preciso mostrar para a gestão o impacto positivo que isso terá nos resultados do negócio, usando gatilhos emocionais como:

    Urgência: Mostrar que a inação pode gerar custos maiores e perda de confiança dos clientes.

    Ganância: Demonstrar que o investimento trará maior agilidade e lucro no futuro.

    Essa abordagem conecta a linguagem técnica com a visão estratégica da empresa, aumentando as chances de ser ouvido e ter suas propostas aceitas.

  3. Cuidar da aparência, mesmo no Home Office
  4. A forma como você se apresenta influencia diretamente a percepção das pessoas sobre você e também a sua própria mentalidade. Estudos mostram que pessoas que se vestem melhor têm mais confiança, tomam decisões mais assertivas e são vistas como líderes. Não é necessário usar terno e gravata, mas sim transmitir profissionalismo e preparo, mesmo trabalhando de casa.

  5. Saber lidar com pessoas
  6. A habilidade mais importante de todas é a capacidade de se relacionar bem com colegas, gestores e clientes. Pesquisas indicam que 85% do sucesso profissional está ligado à competência interpessoal, enquanto apenas 15% depende do conhecimento técnico.

    Programadores que dominam essa habilidade conseguem construir relações de confiança, resolver conflitos e influenciar positivamente o ambiente, abrindo portas para promoções e melhores oportunidades.

Considerações finais

Na era da inteligência artificial, o diferencial do programador não está apenas no domínio técnico, mas principalmente nas Soft Skills. Desenvolver comunicação persuasiva, cuidar da aparência e aprender a lidar com pessoas são passos essenciais para se destacar e alcançar o sucesso profissional.

Invista nessas habilidades e veja sua carreira!

Se quiser se aprofundar, recomendo os livros Gatilhos Mentais e Como Fazer Amigos e Influenciar Pessoas para aprimorar sua comunicação e relacionamento interpessoal.

Feito!

sexta-feira, 23 de maio de 2025

Entendendo a anotação @Transient no Hibernate

Se você já trabalhou com Hibernate ou JPA, é provável que tenha se deparado com a anotação @Transient. Embora simples, seu uso adequado evita persistir dados desnecessários e pode te livrar de uma dor de cabeça lá na frente.

No presente artigo, vamos entender o propósito da anotação @Transient, quando e por que usá-la, e ver um exemplo prático com Hibernate.

O que é @Transient?

A anotação @Transient indica que um determinado campo de uma entidade não deve ser persistido no banco de dados. Ou seja, o Hibernate (ou qualquer implementação JPA) irá ignorar esse campo no momento de salvar ou atualizar a entidade.

É equivalente ao uso da palavra-chave transient do Java, mas no contexto da persistência ORM.

Por que usar @Transient

Algumas situações comuns onde @Transient se torna útil:

  • Campos calculados: Você quer exibir um valor derivado de outros campos, mas não precisa armazená-lo no banco.
  • Campos auxiliares: Dados que são úteis apenas em tempo de execução, como flags de controle ou estruturas temporárias.
  • Evitar dados desnecessários: Ajuda a manter seu modelo de dados enxuto e evita redundância.

Exemplo prático

Vamos imaginar uma entidade Produto que calcula seu valor com desconto apenas em tempo de execução:


import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

@Entity
@Table(name = "TB01_PRODUTO")
@Getter
@Setter
public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String nome;

    private Double preco;

    private Double desconto;

    @Transient
    private Double precoFinal;

    
    public Double getPrecoFinal() {
        if (preco != null && desconto != null) {
            return preco - (preco * desconto);
        }
        return preco;
    }
}

Nesse exemplo:

  • O campo precoFinal não será criado na tabela produto.
  • Ele é útil apenas para retorno em uma API ou exibição na UI (User Interface).
  • Ele é calculado dinamicamente sempre que for chamado.

Obervações:

  • Se você esquecer o @Transient e o campo não tiver um setter, o Hibernate pode lançar exceções.
  • @Transient é da JPA, não confundir com transient do Java, que é usado para serialização de objetos Java (por exemplo, em Serializable).

Considerações finais:

A anotação @Transient é uma daquelas ferramentas simples que, quando bem usadas, deixam seu modelo limpo, objetivo e mais alinhado com as boas práticas de arquitetura.

Se um campo não precisa ser persistido, não insista em forçar sua presença no banco. Use @Transient e mantenha a clareza do seu modelo.

Feito!

quarta-feira, 21 de maio de 2025

A desculpa perfeita que alimenta o microgerenciamento

Você já participou de uma reunião de planejamento de Sprint e estimou que uma tarefa levaria dois dias para ser concluída, mas, na prática, ela acabou demorando mais? E quando isso acontece, você sente aquela cobrança silenciosa, como se tivesse assumido um compromisso fixo? Se sim, você não está sozinho, essa é uma situação muito comum no desenvolvimento de software.

O Problema das estimativas como prazos fixos

No mundo do desenvolvimento, estimar é tentar prever o futuro, ou seja, chutar quanto tempo ou esforço uma tarefa vai demandar. Por natureza, toda estimativa envolve incerteza e deve ser vista como uma aproximação, não como um compromisso rígido. Porém, muitos gestores e culturas empresariais distorcem esse conceito, tratando estimativas como prazos fixos que precisam ser cumpridos a qualquer custo.

Esse erro gera um ambiente tóxico, onde o time sofre cobranças veladas e o microgerenciamento se instala. A falsa sensação de controle que as estimativas trazem para a gestão acaba prejudicando a produtividade e a qualidade do código produzido.

Por que estimativas de software estão sempre erradas?

  1. Software é intangível e vivo:
  2. Diferente de uma linha de produção industrial, o desenvolvimento de software é um processo dinâmico, cheio de variáveis técnicas, mudanças e imprevistos que não podem ser medidos ou controlados com precisão.

  3. Falácia do planejamento:
  4. Nosso cérebro cria um "filme mental" perfeito da tarefa, ignorando problemas, bugs e interrupções. Isso faz com que a estimativa seja otimista demais, sem considerar os imprevistos reais.

  5. Lei de Hofstadter:
  6. Mesmo quando você tenta ser realista e adiciona uma "gordurinha" no tempo estimado, a tarefa ainda vai levar mais tempo do que o previsto, porque sempre há algo desconhecido que atrasa.

  7. Lei de Parkinson:
  8. O trabalho se expande para preencher todo o tempo disponível. Se você tem cinco dias para uma tarefa que poderia levar dois, é provável que você procrastine ou invista tempo desnecessário, atrasando a entrega.

  9. Lei da trivialidade (Bike Shedding):
  10. As equipes gastam mais tempo discutindo detalhes simples e fáceis do que enfrentando os problemas complexos, o que distorce a estimativa geral e prejudica o andamento da Sprint.

O Triângulo de ferro e a qualidade do software

O triângulo de ferro da gestão de projetos mostra que só é possível fixar duas variáveis entre escopo, prazo e orçamento, a terceira sempre cede. Quando gestores travam todas as três, a qualidade do software é a variável sacrificada, resultando em código ruim, testes negligenciados e sistemas instáveis.

Como se posicionar diante dessa realidade?

  • Reforce que estimativas são aproximações, não compromissos:
  • Use uma linguagem que deixe claro o grau de incerteza.

  • Recuse escopos com prazos fixos sem negociação:
  • Pergunte qual variável do triângulo de ferro será ajustada.

  • Entenda que você não é adivinho:
  • Seu papel é resolver problemas, não prever o futuro.

  • Busque ambientes que valorizem a qualidade e respeitem o time:
  • Não aceite cobranças injustas que prejudiquem seu trabalho e bem-estar.

Se você já passou por situações assim, sabe o quanto é importante mudar essa cultura para garantir entregas mais realistas, menos estresse e software de qualidade. Afinal, estimativas são ferramentas para planejamento, não correntes que prendem o time.

Feito!

quarta-feira, 14 de maio de 2025

Por que fundamentos são essenciais antes de confiar na Inteligência Artificial?

A Inteligência Artificial (IA) tem revolucionado o desenvolvimento de software, oferecendo desde autocompletar de código até geração automática de trechos complexos. Ferramentas como GitHub Copilot, ChatGPT e outras assistentes de programação tornaram-se aliadas para desenvolvedores, aumentando produtividade e criatividade. Porém, há um ponto crucial que muitos iniciantes ignoram: não basta usar IA, é fundamental ter uma base sólida de fundamentos para interpretar e validar as respostas geradas.

Por que o desenvolvedor iniciante não deve depender cegamente da IA?

A IA é uma ferramenta, não uma fonte infalível de verdade. Ela gera respostas com base em padrões e dados que “viu” durante o treinamento, mas não tem consciência, nem entendimento real do código, contexto ou melhores práticas atuais. Para um desenvolvedor que ainda não domina os fundamentos, isso pode ser perigoso por vários motivos:

  • Respostas incorretas ou incompletas: A IA pode sugerir soluções que parecem plausíveis, mas contêm erros sutis, vulnerabilidades de segurança ou práticas ruins.
  • Falta de discernimento: Sem conhecimento técnico, o dev pode aceitar código errado ou ineficiente sem perceber.
  • Dependência excessiva: Usar IA como muleta impede o aprendizado profundo e o desenvolvimento do raciocínio lógico necessário para resolver problemas complexos.
  • Dificuldade em elaborar prompts eficazes: Para extrair o melhor da IA, é preciso saber formular perguntas claras e específicas, algo que só vem com experiência e entendimento do domínio.

A importância da base de fundamentos para usar IA com inteligência

Antes de iniciar no uso de IA para codificação, o desenvolvedor deve investir tempo para:

  • Aprender lógica de programação: Entender estruturas de controle, algoritmos, manipulação de dados.
  • Conhecer a linguagem e o ecossistema: Sintaxe, bibliotecas, frameworks, boas práticas.
  • Estudar arquitetura e design de software: Para avaliar se o código gerado é escalável, modular e sustentável.
  • Testar e debugar: Saber identificar erros, interpretar mensagens de erro e corrigir bugs.
  • Segurança e performance: Ter noções básicas para não aceitar código vulnerável ou ineficiente.

Com essa base, o desenvolvedor consegue analisar criticamente o que a IA sugere, adaptar o código ao contexto real e aprender com as sugestões.

Como elaborar um prompt assertivo para IA no desenvolvimento

Para obter respostas úteis e precisas da IA, o prompt (a pergunta ou comando que você envia) deve ser bem estruturado. Um prompt eficaz deve conter:

  1. Objetivo claro: Explique o que deseja alcançar.
  2. Ação específica: O que quer que a IA faça - gerar código, explicar um conceito, corrigir um erro.
  3. Tecnologias envolvidas: Linguagem de programação, frameworks, bibliotecas, versão, etc.
  4. Contexto: Detalhes do problema, ambiente, restrições.
  5. Exemplo ou formato esperado: Se possível, forneça um exemplo ou descreva o formato da resposta que deseja.
  6. Limitações ou requisitos adicionais: Por exemplo, foco em performance, segurança, legibilidade.

Exemplo de prompt assertivo

Preciso de um código em Python 3.10 que leia um arquivo CSV contendo dados de vendas, filtre apenas as vendas acima de R$ 1000 e gere um relatório em JSON. O código deve usar a biblioteca pandas e ser eficiente para arquivos com até 100 mil linhas.

Esse prompt é claro, específico, define tecnologias e objetivos, facilitando que a IA entregue uma resposta útil.

Considerações finais

A Inteligência Artificial é uma ferramenta transformadora no desenvolvimento de software, mas não substitui o conhecimento fundamental. Para tirar o máximo proveito dela, o desenvolvedor precisa primeiro dominar os conceitos básicos, para saber avaliar a qualidade das respostas e formular prompts claros e objetivos. Assim, a IA deixa de ser uma "caixa preta" e se torna uma parceira poderosa no processo criativo e produtivo do desenvolvimento de software.

Se você está começando, invista tempo nos fundamentos. Use a IA como um complemento, não como um atalho. Essa é a chave para se tornar um desenvolvedor competente e preparado para o futuro.

Feito!

sexta-feira, 9 de maio de 2025

A Importância da cobertura de testes e da integração do SonarQube no ciclo de vida de um projeto

Em projetos de software, a busca por qualidade e confiabilidade deve ser constante. Muitas vezes, o time foca em entregar funcionalidades rapidamente, mas negligencia práticas essenciais que garantem a manutenção saudável do código a médio e longo prazo. Duas dessas práticas são: cobertura de testes automatizados e integração com ferramentas de análise estática como o SonarQube.

Por que se preocupar com cobertura de testes?

Testes automatizados, sejam unitários, de integração ou de ponta a ponta, têm um papel fundamental: garantir que o comportamento esperado da aplicação se mantenha ao longo do tempo. A cobertura de testes, por sua vez, é uma métrica que indica qual parte do código está sendo exercitada pelos testes.

Embora uma cobertura de 100% não signifique código 100% livre de bugs, uma baixa cobertura é um sinal de alerta. Código sem testes está mais propenso a falhas quando sofre alterações, principalmente em times grandes, onde o conhecimento sobre determinadas áreas do sistema nem sempre é compartilhado.

Benefícios diretos da cobertura de testes

  • Redução de regressões: mudanças não quebram funcionalidades existentes.
  • Facilidade de refatoração: refatorar com testes confiáveis é como ter uma rede de segurança.
  • Documentação viva: bons testes explicam como o sistema deve se comportar.
  • Mais confiança na entrega contínua: possibilita integração e deploy frequentes.

SonarQube: seu aliado na saúde do código

O SonarQube é uma ferramenta de análise estática que ajuda a monitorar a qualidade do código-fonte. Ele aponta bugs, code smells, vulnerabilidades e cobertura de testes. Quando integrado a um pipeline de CI/CD (Jenkins, GitHub Actions, GitLab CI, Azure DevOps), ele se torna um gate de qualidade.

Vantagens de integrar o projeto com o SonarQube:

  • Visibilidade clara de pontos fracos no código.
  • Monitoramento da cobertura de testes e da dívida técnica.
  • Padronização de boas práticas e convenções de código.
  • Alertas em tempo real de violações críticas de qualidade.
  • Feedback imediato ao time durante pull requests.

Com o SonarQube, não se trata apenas de "escrever código que funciona", mas sim de escrever código limpo, seguro e sustentável.

Estratégia prática: como começar

  1. Crie uma suíte mínima de testes automatizados: Comece testando as partes críticas da aplicação.
  2. Adote TDD sempre que possível: Isso impulsiona a escrita de código testável.
  3. Integre o SonarQube no seu pipeline (ex: Jenkins, GitHub Actions, GitLab CI).
  4. Defina métricas mínimas aceitáveis de cobertura e qualidade (por exemplo, 40% de cobertura mínima e zero bugs críticos).

Promova uma cultura de qualidade: Revisões de código devem considerar a cobertura e o feedback do SonarQube.

Considerações finais

Desenvolver sem testes é como construir um prédio sem fundações. E seguir sem análise de qualidade contínua é não perceber as rachaduras que surgem no caminho. A integração de testes automatizados com o SonarQube traz uma cultura de qualidade que não só beneficia a equipe de desenvolvimento, mas toda a organização, entregando valor de forma contínua, sustentável e segura.

Testar é responsabilidade de todos os desenvolvedores e QAs. Monitorar a qualidade também.

Feito!