anúncios

sexta-feira, 18 de julho de 2025

PHP 8.5: Todas as novidades e recursos explicados com exemplos

O PHP 8.5 chegou trazendo recursos que tornam o código mais limpo, seguro e performático. Como desenvolvedor sênior em PHP, vejo essa versão como um passo importante na modernização da linguagem, com novidades que vão facilitar o dia a dia tanto de quem trabalha com back-end puro quanto em frameworks como Laravel, Symfony ou APIs REST.

A seguir, você confere um resumo das principais novidades do PHP 8.5, explicadas de forma prática, com exemplos e insights de como aplicar cada recurso no mundo real.

  1. Pipe Operator (|>): Código mais limpo e funcional
  2. Agora podemos encadear chamadas de funções de forma mais legível:

    
    $result = "hello"
        |> strtoupper(...)
        |> trim(...)
        |> ucfirst(...);
    
    

    Por que é útil?

    Evita variáveis temporárias e deixa pipelines de dados (ex.: sanitização de input ou processamento em APIs) muito mais fáceis de entender.

  3. First-Class Callables em constantes
  4. 
    class Utils {
      public static function log($msg) { /*...*/ }
    }
    const LOGGER = Utils::log(...);
    LOGGER("teste");
    
    

    Por que é útil?

    Permite definir callbacks reutilizáveis sem precisar de funções auxiliares, ótimo para roteadores de frameworks, middlewares ou eventos.

  5. Closures em expressões constantes
  6. 
    const FILTER = static fn($v) => is_string($v);
    
    

    Por que é útil?

    Melhora a expressividade em configurações dinâmicas, atributos e metaprogramação.

  7. Funções de Array: array_first() e array_last()
  8.  
    $array = [10, 20, 30];
    echo array_first($array); // 10
    echo array_last($array);  // 30
    
    

    Por que é útil?

    Substitui reset() e end() com uma sintaxe muito mais intuitiva.

  9. Visibilidade Assimétrica para static
  10. 
    class Settings {
      public private(set) static string $mode = 'live';
    }
    
    

    Por que é útil?

    Permite leitura pública, mas escrita apenas dentro da classe, reforçando encapsulamento.

  11. Atributos em constantes
  12. 
    #[Deprecated("use NEW_CONST")]
    const OLD_CONST = 123;
    
    

    Por que é útil?

    Facilita a gestão de código legado, mostrando depreciações de forma clara.

  13. 7. #[\NoDiscard]: Não ignore o retorno
  14. 
    #[\NoDiscard]
    function calc(): int { return 42; }
    
    

    Por que é útil?

    Gera aviso se o retorno for ignorado, evitando bugs sutis.

  15. Melhorias no debug de erros fatais
  16. Agora temos backtraces completos para erros fatais, tornando diagnósticos muito mais rápidos.

  17. Novas Funções para Handlers
  18. 
    get_error_handler()
    
    get_exception_handler()
    
    

    Por que é útil?

    Facilita a manipulação de handlers dinâmicos em frameworks e middlewares.

  19. PHP_BUILD_DATE: Data de compilação
  20. 
    echo PHP_BUILD_DATE;
    
    

    Por que é útil?

    Ajuda em auditorias e ambientes complexos de CI/CD.

  21. Novidades no cURL
  22. curl_multi_get_handles() lista todas as conexões em uso.

    curl_share_init_persistent() permite conexões persistentes com cache.

    Por que é útil?

    Excelente para aplicações que fazem muitas requisições paralelas a APIs externas.

  23. Localização: locale_is_right_to_left()
  24. 
    $isRTL = locale_is_right_to_left("fa_IR"); // true
    
    

    Por que é útil?

    Facilita adaptação de layouts para idiomas RTL como árabe ou hebraico.

  25. IntlListFormatter: Listas Localizadas
  26. 
    $fmt = new IntlListFormatter("en", TYPE_CONJUNCTION, STYLE_LONG);
    echo $fmt->format(["maçã","banana","cereja"]);
    
    

    Por que é útil?

    Melhora a experiência do usuário em aplicações multilíngues.

  27. CLI: php --ini=diff>/li>

    Mostra apenas as configurações modificadas no php.ini.

    Por que é útil?

    Ideal para debug de ambiente e deploys.

Considerações finais:

O PHP 8.5 prova que a linguagem está mais moderna e voltada para produtividade. Recursos como pipe operator, callables em constantes e melhorias no debug são game changers para qualquer projeto.

Se você ainda está no PHP 5.6,7.x ou 8.0, já é hora de planejar a migração para aproveitar não só os recursos, mas também as otimizações de performance e segurança.

Referências

https://php.watch/versions/8.5

Feito!

segunda-feira, 14 de julho de 2025

Depuração de sistemas de forma eficiente

Quando um paciente chega ao consultório com uma dor ou um cliente leva o carro à oficina com um barulho estranho, o médico ou o mecânico não começa a "consertar" imediatamente. Eles ouvem, perguntam, investigam, fazem testes e somente depois aplicam uma solução.

Curiosamente, esse processo é exatamente o que deveria acontecer ao depurar sistemas em produção ou desenvolvimento. No entanto, muitos desenvolvedores, até os mais experientes, pulam etapas cruciais da investigação, o que leva a correções incompletas ou efeitos colaterais indesejados.

No presente artigo, exploramos como aplicar a mentalidade investigativa de médicos e mecânicos no contexto da depuração de software, com exemplos práticos e boas práticas.

Analogia: Médico, Mecânico e Engenheiro de Software

O Médico

Sintoma: "Estou com dor no estômago."

Processo: O médico coleta informações, localização da dor, histórico clínico, alimentação recente, realiza exames.

Diagnóstico: Pode ser gastrite, apendicite ou intoxicação.

Tratamento: Cada causa exige um tratamento diferente. Errar o diagnóstico pode ser fatal.

O Mecânico

Sintoma: "Meu carro está fazendo um barulho ao frear."

Processo: O mecânico verifica os freios, discos, pastilhas, e até a suspensão, se necessário. Pode testar o carro.

Diagnóstico: Pastilhas gastas? Disco empenado? Braço da suspensão solto?

Solução: Substituição de peças específicas.

O Engenheiro de Software

Sintoma: "O relatório financeiro está com valores incorretos."

Processo: O engenheiro de software coleta logs, analisa dados de entrada, reproduz o bug, inspeciona código e dependências.

Diagnóstico: Erro de arredondamento? Consulta SQL mal construída? Falha na atualização de cache?

Correção: Refatoração pontual ou ajuste nos dados.

Etapas da depuração: O processo diagnóstico

A seguir, adaptamos o processo de investigação médica/mecânica para o contexto de sistemas:

  1. Coleta de sintomas (relato do bug)
  2. Escute com atenção o relato do usuário.

    Pergunte: Quando começou? Ocorre sempre? Com que frequência? Em qual ambiente (produção, homologação)?

    Exemplo: Um cliente relata que ao gerar relatório no dia 1º de cada mês, ele mostra dados duplicados.

  3. Reprodução controlada
  4. Tente reproduzir o erro em ambiente de teste, com os mesmos dados e condições.

    Se o bug não for reproduzível, pode haver uma condição de corrida ou dependência externa.

  5. Inspeção de logs e métricas
  6. Logs são o raio-X do software.

    Ferramentas como ELK Stack, Grafana, ou até um simples tail -f ajudam a visualizar eventos relevantes.

    Exemplo: Ao verificar os logs, percebe-se que o sistema gera o relatório duas vezes quando o agendamento cron executa com atraso.

  7. Hipóteses e testes

    strong>Elabore hipóteses: "E se o problema estiver no agendador?" "E se os dados vierem duplicados do banco?"

    Valide cada hipótese isoladamente, como um médico pede exames complementares.

  8. Diagnóstico
  9. Identifique a causa-raiz, e não apenas o efeito.

    Ferramentas úteis: Debuggers, breakpoints, análise estática, cobertura de testes, git blame.

  10. Correção e prevenção
  11. Corrija o problema de forma específica e escreva testes automatizados para cobrir o caso.

    Se possível, implemente alertas ou logs adicionais para prevenir regressões.

O que evitar

  • "Corrigir" o bug sem entender a causa (ex: esconder o erro com um try/catch vazio).
  • Alterar o código em produção com base em achismos.
  • Ignorar os logs e os testes, é como um médico ignorar exames de sangue.

Boas práticas para depuração

  • Mantenha os logs claros e contextuais.
  • Use feature flags para testar correções.
  • Documente o erro e a solução (como um prontuário médico).
  • Utilize versionamento no banco de dados e código-fonte.
  • Tenha testes automatizados de regressão.

Considerações finais

Depurar sistemas não é apenas consertar bugs, é investigar com método, cuidado e lógica. Da mesma forma que um médico salva vidas com um diagnóstico preciso, e um mecânico evita acidentes ao revisar corretamente um freio, o engenheiro de software protege a confiabilidade do sistema ao aplicar a depuração com rigor técnico.

Depurar é diagnosticar. Corrigir é tratar. Testar é prevenir.

Se gostou dessa analogia, compartilhe com sua equipe e comente como você conduz o processo de depuração no seu dia a dia!

Feito!

segunda-feira, 7 de julho de 2025

Entenda o conceito que está revolucionando o desenvolvimento de software

A área de tecnologia está em constante transformação, e um dos conceitos mais importantes da atualidade é o DevOps. Mais do que uma simples combinação entre "Desenvolvimento" e "Operações", o DevOps representa uma mudança cultural e técnica que tem ajudado empresas a entregar software de forma mais rápida, segura e eficiente.

No presente artigo, vamos explorar o que é DevOps, por que ele surgiu, quais são seus principais benefícios e como essa prática tem mudado a forma como times de tecnologia trabalham em conjunto.

Por que surgiu o DevOps?

Durante muito tempo, as áreas de desenvolvimento e infraestrutura (operações) trabalhavam de forma isolada. O time de desenvolvimento era responsável por escrever o código, enquanto o time de operações cuidava da infraestrutura e da publicação do sistema. Essa separação gerava atrasos, conflitos e até falhas em produção, principalmente quando havia mudanças frequentes.

Foi nesse contexto que surgiu o DevOps, como uma resposta à necessidade de melhorar a comunicação entre os times, automatizar processos e garantir entregas mais confiáveis. O termo começou a ganhar força por volta de 2009, a partir de comunidades de tecnologia que buscavam uma cultura mais colaborativa.

O que é DevOps, afinal?

DevOps é um conjunto de práticas, ferramentas e uma cultura organizacional que visa integrar os times de desenvolvimento (Dev) e operações (Ops), promovendo colaboração contínua ao longo de todo o ciclo de vida do software, desde o planejamento e desenvolvimento até a entrega e manutenção em produção.

O foco do DevOps é criar um ambiente onde as equipes possam trabalhar de forma conjunta, entregando valor de forma contínua, ágil e com qualidade.

Quais são os pilares do DevOps?

Para funcionar bem, o DevOps se apoia em alguns pilares fundamentais:

  • Colaboração:
  • Times multidisciplinares que trabalham juntos com objetivos em comum.

  • Automação:
  • Processos como testes, integração contínua, entrega contínua e monitoramento são automatizados.

  • Integração Contínua (CI):
  • Cada alteração de código é integrada ao projeto automaticamente, garantindo testes e feedback rápidos.

  • Entrega Contínua (CD):
  • Novas versões do sistema são entregues com frequência e com menos riscos.

  • Monitoramento e feedback:
  • O sistema é monitorado em tempo real e os times utilizam os dados para melhorar continuamente.

Benefícios do DevOps

Adotar DevOps traz uma série de benefícios para empresas e profissionais de tecnologia. Entre os principais, destacam-se:

  • Entregas mais rápidas e frequentes de software;
  • Maior confiabilidade nas implantações em produção;
  • Redução de erros e falhas;
  • Melhoria na colaboração entre áreas;
  • Maior satisfação do cliente.

Além disso, o DevOps permite uma melhor adaptação a mudanças, essencial em um mercado tão dinâmico como o de tecnologia.

DevOps é só ferramenta?

Embora existam muitas ferramentas que suportam práticas DevOps (como Jenkins, Docker, Kubernetes, GitLab CI/CD, entre outras), é importante entender que DevOps é, antes de tudo, uma mudança de cultura.

Sem colaboração entre os times e comprometimento com a melhoria contínua, nenhuma ferramenta será suficiente para garantir o sucesso da adoção de DevOps.

Considerações finais:

DevOps é uma abordagem que vem transformando a maneira como desenvolvemos e entregamos software. Ao unir desenvolvimento e operações com foco em automação, colaboração e melhoria contínua, as empresas conseguem ser mais ágeis, resilientes e inovadoras.

Se você trabalha com tecnologia, seja como desenvolvedor, administrador de sistemas, QA ou gestor, entender e aplicar os princípios de DevOps pode ser um diferencial importante na sua carreira e nos resultados da sua equipe.

Feito!

quinta-feira, 3 de julho de 2025

Por que você deveria usar Docker no seu projeto?

Se você é desenvolvedor há algum tempo, com certeza já ouviu, ou falou, a famigerada frase: "Ué, na minha máquina funciona!".

Geralmente ela surge naquele momento crítico em que você compartilha seu projeto com alguém da equipe (ou vai subir pro servidor), a pessoa segue a documentação (às vezes até bem feita), instala as dependências, executa o build… e boom!

Erro.

Na sua máquina está tudo liso. Mas do outro lado da tela, tudo quebra.

O culpado? Nem sempre é o código.

Na maioria das vezes, o vilão está escondido em detalhes sutis: a versão do Java instalada, o Node.js diferente, uma lib do sistema que não está presente, ou até o próprio sistema operacional.

É aqui que entra um dos maiores aliados da consistência no desenvolvimento moderno: o Docker.

O que é Docker (de forma simples)?

Docker é uma plataforma que permite "empacotar" uma aplicação com tudo o que ela precisa para executar: sistema, bibliotecas, dependências, ferramentas, versão específica de runtime, tudo mesmo.

Esse "pacote" é chamado de container. Ele roda de forma isolada, como se fosse uma mini-máquina configurada só para a sua aplicação, e que funciona igualzinha em qualquer lugar.

Por que usar Docker no seu projeto?

  1. Ambiente padronizado para todos
  2. Não importa se quem vai executar o projeto usa Windows, Linux ou macOS. Com Docker, o ambiente de execução é exatamente o mesmo.

    O famoso "na minha máquina funciona" vira "funciona igual em qualquer máquina".

  3. Documentação viva
  4. O Dockerfile e docker-compose.yml viram a documentação executável do seu ambiente.

    Em vez de dizer "instale o PostgreSQL 13", "instale o Java 8/11/17", "instale o PHP 8.3", você diz: docker-compose up.

    Simples, direto, sem margem para erro humano.

  5. Facilidade para novos desenvolvedores
  6. Quantas vezes você já perdeu um ou dois dias configurando o ambiente para alguém novo no time?

    Com Docker, isso cai para alguns minutos. A pessoa só precisa ter Docker instalado, clonar o repositório e subir os containers.

  7. Isolamento real
  8. Você pode ter dois projetos rodando com versões completamente diferentes de uma linguagem ou banco de dados, sem conflitos.

    Um usando Node 18, outro executando Python 3.7 com PostgreSQL 9? Sem problema.

  9. Ambiente próximo ao de produção
  10. Se você sobe sua aplicação em produção usando containers, nada mais justo do que desenvolver e testar no mesmo ambiente.

    Menos surpresas, menos bugs de "ambiente".

Mas e o desempenho? Não complica demais?

Essa é uma dúvida legítima. Sim, dependendo do sistema operacional (Windows 😂), o Docker pode consumir mais recursos. Mas nos últimos anos, ele melhorou bastante em desempenho e integração nativa. Graças o suporte de WSL2, que permite instalar o Docker no Ubuntu via WSL, sem precisar do Docker Desktop.

Além disso, com o tempo você percebe que o pequeno custo de performance se paga facilmente pela economia de tempo, confiabilidade e tranquilidade de saber que o projeto vai executar bem onde quer que esteja.

Considerações finais

Docker não é moda. É uma das ferramentas mais poderosas que surgiram para tornar o desenvolvimento mais previsível, colaborativo e escalável.

Se você está cansado de ouvir (ou dizer) "na minha máquina funciona", talvez esteja na hora de subir o seu projeto com docker-compose.yml e entrar de vez no mundo dos containers.

Porque no fim das contas, o que a gente mais quer é isso:

Que funcione. Em todas as máquinas. Sem drama.

Nota final

Docker é uma ferramenta poderosa, mas não é um martelo para todos os pregos.

Projetos que exigem acesso direto a hardware, interfaces gráficas nativas ou virtualização avançada (como emuladores de Android, Arduino, ou dispositivos USB) podem encontrar no Docker mais limitação do que benefício.

E tudo bem.

Isso não é uma falha no seu projeto, é apenas uma questão de usar a tecnologia certa no lugar certo.

Feito!

terça-feira, 1 de julho de 2025

Qual o melhor Sistema Operacional para Desenvolvedores?

Uma visão honesta de quem está há mais de 10 anos no campo de batalha.

Quando alguém me pergunta "qual é o melhor sistema operacional para desenvolvimento?", minha resposta automática costuma ser: depende. E não é uma forma preguiçosa de responder. É porque realmente depende do contexto, da linguagem, do tipo de projeto e até do seu gosto pessoal. Mas depois de mais de uma década mergulhado em código de aplicações web a scripts de automação, de APIs em nuvem a sistemas embarcados, aprendi que cada sistema tem suas vantagens (e dores).

No presente post, vou comentar sobre os quatro principais candidatos: uma distro Linux (como Ubuntu ou Fedora), macOS, FreeBSD e Windows. Spoiler: todos funcionam. Mas uns funcionam melhor dependendo do seu objetivo.

Linux: O queridinho dos devs raiz

Se você trabalha com backend, cloud, containers, automação, DevOps ou simplesmente curte ter o controle do seu ambiente, Linux é quase imbatível. O terminal é poderoso, a performance é sólida e quase tudo que executa em produção na nuvem, executa em Linux.

Vantagens:

  • robusta, personalizável, e amigável a scripts.
  • Integração nativa com ferramentas como Docker, Git, Node, Python, Go etc.
  • É gratuito e leve (especialmente distros como Arch ou Debian).
  • Ideal para quem quer entender o que está acontecendo "por baixo dos panos".

Desvantagens:

  • Pode exigir mais curva de aprendizado para quem vem do Windows.
  • Suporte a hardware (especialmente placas Wi-Fi ou impressoras) ainda pode ser uma dor.
  • Softwares como Adobe, MS Office, etc., não funcionam nativamente.
  • Para quem é: Devs backend, DevOps, SysAdmins, Cientistas de Dados, ou qualquer um que goste de uma abordagem hands-on.

macOS: O equilíbrio entre Unix e usabilidade

Se você desenvolve para iOS/macOS, você precisa de um Mac, ponto. Mas mesmo fora do ecossistema Apple, o macOS é uma ótima escolha para devs que querem a estabilidade e poder do Unix com uma interface polida e um ecossistema de ferramentas premium.

Vantagens:

  • Terminal baseado em Unix (zsh/bash), com boa compatibilidade POSIX.
  • Excelente suporte a linguagens como Python, Ruby, Node.js, embora todas precisem ser instaladas e gerenciadas com ferramentas como pyenv, rbenv e nvm.
  • Interface gráfica polida e integração com o hardware Apple.
  • Ideal para quem quer produtividade em um sistema robusto, mas ainda amigável.

Observações importantes:

O Docker não executa nativamente no macOS. Ele depende de uma máquina virtual leve (HyperKit/AppleHV) para simular o kernel Linux, o que pode impactar desempenho em alguns cenários.

Apesar de o Python vir pré-instalado, costuma ser uma versão desatualizada usada pelo sistema. Desenvolvedores geralmente precisam gerenciar múltiplas versões manualmente.

Desvantagens:

  • Custo elevado.
  • Atualizações podem quebrar ambientes de desenvolvimento se não forem feitas com cautela.
  • Menos liberdade para personalizar o sistema profundamente (em comparação ao Linux).
  • Para quem é: Desenvolvedores iOS, web, front-end, ou quem busca um ambiente Unix-like com visual refinado e conforto no uso diário.

Windows: O mais comum e... agora muito mais útil

Por muito tempo, o Windows foi visto como o pior ambiente para desenvolvimento. Mas isso mudou drasticamente com o WSL (Windows Subsystem for Linux). Hoje é totalmente viável programar em Windows, especialmente se você trabalha com .NET, C#, ou precisa de compatibilidade com softwares corporativos.

Vantagens:

  • Compatibilidade com todos os softwares comerciais.
  • Visual Studio (que ainda é imbatível para C# e C++).
  • WSL2 permite executar Linux dentro do Windows com performance decente.
  • Ideal para ambientes corporativos e desenvolvimento de jogos com DirectX.

Desvantagens:

  • Gerenciamento de dependências e pacotes ainda é mais confuso.
  • O sistema pode ficar instável com muitas customizações.
  • Terminal padrão ainda é inferior (mas o Windows Terminal e o PowerShell melhoraram bastante).
  • Para quem é: Devs C#, .NET, Unity, SQL Server, devs corporativos que precisam de Office, e quem trabalha com automação para Windows.

FreeBSD: Para os corajosos e curiosos

FreeBSD não é mainstream, mas quem já usou sabe: é rápido, seguro e com um sistema de permissões e gerenciamento de rede excelente. Se você é o tipo de dev que gosta de montar servidores otimizados, entender o sistema profundamente ou está buscando estabilidade acima de tudo, vale testar.

    Vantagens:

  • Estabilidade lendária.
  • Sistema de ports eficiente.
  • Ótimo para servidores e redes.

Desvantagens:

  • Curva de aprendizado íngreme.
  • Poucos tutoriais voltados para desenvolvimento moderno.
  • Suporte de ferramentas e IDEs limitado.
  • Para quem é: Devs hardcore, administradores de sistemas, especialistas em redes, ou quem quer aprender além do mainstream.

E no final, qual eu uso?

Hoje, pessoalmente, meu setup principal é o Linux (Ubuntu LTS) no notebook, mas por muitos anos usei o Slackware e o Debian no desktop. Aliás, o Slackware ainda é uma ótima escolha para quem quer aprender Linux no modo raiz, hands-on de verdade. Atualmente, meus servidores executam Debian, pela estabilidade e confiabilidade que oferece. Também já usei Windows por anos. Além disso, aprendi muito explorando o FreeBSD.

No fim das contas, o sistema operacional não faz o desenvolvedor, é apenas uma ferramenta. A melhor escolha é aquela que te permite ser produtivo, feliz e resolver problemas reais.

Dica de ouro: Se você está confortável com um sistema e ele te permite trabalhar bem, continue com ele. Se está te atrapalhando, experimente outro. Nada é definitivo.

E você, qual sistema usa para programar? E por quê?

Deixe nos comentários!

Se você evitar esses deslizes, com certeza terá uma base sólida para crescer na carreira de forma consistente e profissional.

Participe dos nossos grupos no Telegram:

Programadores Brasil Dicas, vagas, tecnologia e networking.

Linux Para Todos Aprendizado e suporte para quem quer migrar ou dominar o Linux no dia a dia do desenvolvimento.

FreeBSD Brasil Aprendizado e suporte para quem quer aprender FreeBSD no dia a dia.

Feito!