A Crise de Reprodutibilidade na Psicologia: Estudos da Ciência Cognitiva Desmentidos

2025-09-17
A Crise de Reprodutibilidade na Psicologia: Estudos da Ciência Cognitiva Desmentidos

A década de 2010 testemunhou uma 'crise de reprodutibilidade' na psicologia, onde muitos resultados amplamente aceitos não conseguiram ser reproduzidos. Esta publicação compila uma lista de estudos proeminentes da ciência cognitiva que não foram replicados, incluindo o efeito de esgotamento do ego, o efeito de pose de poder, o priming social (efeito das palavras de idosos) e o efeito de priming de dinheiro. Essas descobertas, outrora populares, foram questionadas ou totalmente desmentidas desde então. O objetivo é ajudar os leitores a discernir pesquisas credíveis de resultados não confiáveis, evitando desinformação.

Leia mais
Diversos

Muitos problemas difíceis do LeetCode são apenas problemas de restrição fáceis

2025-09-12
Muitos problemas difíceis do LeetCode são apenas problemas de restrição fáceis

O autor relata uma experiência frustrante de entrevista em que um problema aparentemente simples de troco o deixou perplexo devido à sua falta de habilidades de programação dinâmica. Ele argumenta que muitos problemas desafiadores do LeetCode são, na verdade, facilmente solucionáveis usando solucionadores de restrições como MiniZinc, Z3 ou OR-Tools. O artigo apresenta vários exemplos, incluindo maximizar o lucro com ações e encontrar o maior retângulo em um histograma, demonstrando a simplicidade e o poder elegantes dos solucionadores de restrições, especialmente ao lidar com restrições complexas.

Leia mais
Desenvolvimento

Como o RSS derrotou o ICE: Simplicidade supera a complexidade

2025-09-08
Como o RSS derrotou o ICE: Simplicidade supera a complexidade

Este artigo relata a batalha entre RSS e ICE, dois protocolos concorrentes de sindicação de conteúdo. Apoiado por gigantes como Microsoft e Adobe, o ICE oferecia funcionalidades superiores, mas era excessivamente complexo e fechado. O RSS, originário da Netscape, era simples, fácil de usar e prosperou devido à sua natureza aberta. No final, a simplicidade do RSS e as contribuições de numerosos blogueiros e desenvolvedores levaram à sua vitória sobre o ICE mais poderoso, tornando-se o padrão do setor para agregação de conteúdo. Isso reforça o ditado da internet: a simplicidade supera a complexidade.

Leia mais

Por que prefiro reStructuredText a Markdown

2025-08-18
Por que prefiro reStructuredText a Markdown

Este artigo explica por que o autor prefere reStructuredText (rST) a Markdown para escrever livros técnicos. O rST, sendo uma representação de peso médio de uma árvore de documentação abstrata, oferece extensibilidade e personalização superiores em comparação com a abordagem leve do Markdown. O autor ilustra isso com exemplos de criação de imagens e tratamento de exercícios, mostrando como as diretivas personalizadas e as transformações de árvore de documentos do rST permitem estruturas de documentos complexas e funcionalidades difíceis de alcançar no Markdown. Embora reconheça a sintaxe potencialmente menos intuitiva do rST, o autor defende sua potência para documentação em larga escala, especialmente quando são necessárias extensões e transformações personalizadas, como demonstrado em seu livro, "Lógica para Programadores."

Leia mais
Desenvolvimento Escrita Técnica

A Explosão de Runtimes JavaScript: Uma Década de Inovação

2025-07-28
A Explosão de Runtimes JavaScript: Uma Década de Inovação

A última década testemunhou uma explosão de novos runtimes e engines JavaScript, permitindo a execução de JavaScript em diversos contextos com otimização específica para cada tarefa. Isso impulsionou o JavaScript para a nuvem, computação de borda, smart TVs, dispositivos móveis e até mesmo microcontroladores. Este artigo explora os fatores que impulsionaram essa diversidade e por que um único runtime ou engine não atende a todas as necessidades. Da ascensão da computação de borda e engines de baixo recurso para microcontroladores a engines poliglotas que facilitam a interoperabilidade com outras linguagens e o uso generalizado no desenvolvimento de aplicativos nativos, os runtimes JavaScript demonstram incrível adaptabilidade e crescimento vibrante. O artigo detalha vários runtimes e engines como Node.js, Deno, Cloudflare Workers, Bun, React Native, NativeScript e mais, descrevendo suas tecnologias subjacentes e evolução.

Leia mais
Desenvolvimento

Cache: Abstração, não otimização

2025-07-04
Cache: Abstração, não otimização

A sabedoria convencional diz que o cache acelera o software. O autor argumenta que isso é apenas parte da história. Após trabalhar com a movimentação de dados entre armazenamento de objetos, disco e memória, o autor propõe que o papel mais crucial do cache é simplificar o software. O artigo explora as limitações de algoritmos de cache pré-definidos (LRU, LFU, etc.) e sugere que o cache atua mais como uma camada de abstração, ocultando os detalhes de armazenamento subjacentes, liberando os programadores da preocupação com a localização do nível de dados. Os mecanismos de cache de banco de dados e SO exemplificam essa abstração. Embora o cache possa apresentar problemas, como o uso indevido do cache de páginas do SO e fsync, isso não significa que se deva abandonar o cache, mas sim entendê-lo e usá-lo melhor.

Leia mais
Desenvolvimento

A Epidemia da Solidão: Um Chamado para Sair de Casa

2025-06-29
A Epidemia da Solidão: Um Chamado para Sair de Casa

Este artigo aborda a questão generalizada da solidão na sociedade moderna, argumentando que sair de casa é crucial para combatê-la. O autor usa sua experiência com um cachorro e o engajamento comunitário em um parque de cães como um exemplo principal de construção de conexões. Ele destaca a importância da infraestrutura urbana, como calçadas, no fomento da comunidade. A peça critica o capitalismo tardio por lucrar e exacerbar a solidão, incentivando os leitores a participar ativamente da vida comunitária e experimentar a conexão humana.

Leia mais
Diversos

Resolvendo o Problema das Rainhas do LinkedIn com SMT: Mais Fácil que SAT!

2025-06-12
Resolvendo o Problema das Rainhas do LinkedIn com SMT: Mais Fácil que SAT!

Este artigo descreve como resolver o quebra-cabeça das 'Rainhas do LinkedIn' — uma variação do clássico problema das N-Rainhas com restrições regionais adicionais — usando o resolvedor SMT Z3. O autor demonstra que expressar o problema em SMT, utilizando variáveis ​​inteiras e restrições, é significativamente mais simples do que a formulação SAT equivalente, que requer muitas cláusulas booleanas. Embora os resolvedores SMT possam ser mais lentos do que os resolvedores SAT altamente otimizados como o Glucose, a facilidade de codificação torna o SMT preferível para muitos. A postagem inclui código completo e verificações de sanidade úteis para verificar a correção do modelo. Isso fornece uma explicação convincente para a preferência da indústria por ferramentas que compilam para SAT em vez de usar SAT diretamente.

Leia mais
Desenvolvimento resolvedor SMT

Indecidibilidade: A Caixa de Pandora dos Programadores

2025-05-28
Indecidibilidade: A Caixa de Pandora dos Programadores

Este artigo explica de forma clara o conceito de "indecidibilidade" na ciência da computação. Usando linguagem acessível e exemplos concretos (como determinar se um número é a soma de dois números primos), o autor explica os problemas de decisão e o papel das máquinas de Turing. A principal conclusão é que a indecidibilidade não significa que seja impossível dizer se um programa irá parar, mas sim que não existe um algoritmo universal para determinar o comportamento de parada de todos os programas. Isso torna muitos problemas (como verificar propriedades de programas) trabalhosos e possivelmente insolúveis, destacando a necessidade de campos como verificação formal e análise de programas.

Leia mais
Desenvolvimento máquina de Turing

Testes baseados em propriedades: Por que superam os testes unitários para entradas complexas

2025-05-21
Testes baseados em propriedades: Por que superam os testes unitários para entradas complexas

Este artigo debate os méritos dos testes baseados em propriedades (PBT) versus testes unitários tradicionais. O autor argumenta que, embora os testes unitários sejam suficientes para funções com entradas únicas, a explosão combinatória de casos de borda em funções com várias entradas torna o PBT, com sua geração de entrada aleatória, superior na descoberta de erros de borda ocultos. No entanto, o PBT tem uma curva de aprendizado; dominar estratégias complexas de geração de entrada é crucial. A maioria dos exemplos de PBT são muito simplistas para mostrar seu verdadeiro poder no tratamento de espaços de entrada complexos.

Leia mais

A Aposta do Serviço Postal dos EUA no E-mail: A Ascensão e Queda do E-COM

2025-05-14
A Aposta do Serviço Postal dos EUA no E-mail: A Ascensão e Queda do E-COM

Diante da ameaça do email, o Serviço Postal dos EUA lançou o E-COM em 1982, um serviço que imprimia emails e os entregava por meio de carteiros. Inicialmente bem-sucedido, o E-COM acabou falhando em 1985 devido a custos elevados, processos trabalhosos e falta de flexibilidade, resultando em perdas superiores a US$ 40 milhões. No entanto, o E-COM popularizou inadvertidamente o termo "email" e destacou as tentativas do serviço postal de se adaptar às mudanças tecnológicas.

Leia mais
Tecnologia

Segurança alimentar na América: Uma batalha contra mentiras e história

2025-04-30
Segurança alimentar na América: Uma batalha contra mentiras e história

Este artigo entrevista a jornalista científica Deborah Blum, explorando o estado atual e a história da segurança alimentar nos EUA. Blum destaca que, em meio à proliferação de desinformação e à desregulamentação governamental, os cidadãos americanos enfrentam riscos à segurança alimentar, com problemas semelhantes à adulteração de alimentos do século XIX ressurgindo. Ela usa seu livro, "The Poison Squad", para ilustrar o nascimento da Lei de Alimentos e Medicamentos Puros de 1906 e como o químico Harvey Wiley expôs problemas de segurança alimentar por meio de um experimento com uma 'esquadra de veneno'. Blum pede atenção pública para a segurança alimentar e critica a abordagem individualista que culpa os consumidores por doenças transmitidas por alimentos, enfatizando a responsabilidade do governo em garantir os direitos básicos.

Leia mais

Mudanças de requisitos até que parem: Métodos formais e evolução do sistema

2025-04-28
Mudanças de requisitos até que parem: Métodos formais e evolução do sistema

Este artigo explora como lidar com requisitos em constante mudança no desenvolvimento de software. Embora a modelagem formal extensa antecipada possa ser impraticável com mudanças frequentes, o autor argumenta que os métodos formais se tornam cruciais quando os sistemas atingem escala ou passam por mudanças arquitetônicas (transições de fase). A especificação e verificação formais garantem que as melhorias não quebrem a funcionalidade existente. Usando o exemplo da troca de atualizações síncronas para assíncronas, o autor demonstra como os métodos formais podem verificar se um novo sistema satisfaz os requisitos antigos, destacando a importância da manutenção de software e prevenindo a falha silenciosa de recursos.

Leia mais
Desenvolvimento mudança de requisitos

Resolvendo o Quebra-cabeça do Salão Proposicional do Príncipe Azul com Lógica

2025-04-21
Resolvendo o Quebra-cabeça do Salão Proposicional do Príncipe Azul com Lógica

Este artigo detalha como resolver automaticamente um quebra-cabeça lógico do jogo Príncipe Azul usando lógica proposicional. O quebra-cabeça envolve três caixas (azul, branca, preta), cada uma fazendo afirmações, e regras afirmando que pelo menos uma caixa é totalmente verdadeira, pelo menos uma é totalmente falsa e o prêmio está em exatamente uma caixa. O autor modela o problema em lógica proposicional, usa uma abordagem de força bruta para encontrar todas as atribuições satisfatórias e, assim, determina a localização do prêmio. O artigo inclui uma implementação em JavaScript e discute a otimização do código.

Leia mais

AMP for Email do Google: Uma ousada falha

2025-04-18
AMP for Email do Google: Uma ousada falha

O Google tentou revolucionar o email com o AMP (Accelerated Mobile Pages), permitindo experiências interativas como reservar hotéis ou responder a comentários do Google Docs diretamente nos emails. No entanto, esta iniciativa falhou. O artigo analisa as razões por trás da falha do AMP for Email, incluindo a alta complexidade de desenvolvimento, a compatibilidade deficiente e os conflitos com as propriedades inerentes do email. A desconfiança dos desenvolvedores em relação à imposição do Google contribuiu significativamente para sua queda. Embora emails interativos não sejam impossíveis, eles devem priorizar a compatibilidade e a permanência, e não às custas da simplicidade e confiabilidade. O sucesso duradouro do email reside em sua simplicidade e descentralização.

Leia mais
Tecnologia

Além de NP: Um Problema de Complexidade Mais Intuitivo

2025-04-17
Além de NP: Um Problema de Complexidade Mais Intuitivo

O autor questiona o uso do Problema da Parada como o exemplo canônico de um problema mais difícil que NP-completo, argumentando que é confuso e pouco intuitivo. Embora indecidível, a verificação de uma resposta "sim" para o Problema da Parada pode ser feita executando o programa por um número finito de etapas. Uma alternativa mais fácil de entender é apresentada: mover uma peça em uma grade infinita para atingir um ponto alvo. Este problema é PSPACE-completo em dimensões inferiores, mas sua complexidade explode com o aumento das dimensões, eventualmente atingindo a completude de ACKERMANN, demonstrando visualmente uma complexidade muito além dos problemas NP.

Leia mais

Resolvendo um quebra-cabeça de Layton com elegância usando Prolog

2025-04-08
Resolvendo um quebra-cabeça de Layton com elegância usando Prolog

O autor reescreveu o capítulo sobre linguagens de programação lógica em seu livro "Lógica para Programadores", mostrando o poder do Prolog com um quebra-cabeça no estilo 'Layton'. O quebra-cabeça envolve deduzir a pontuação do quarto aluno com base nas pontuações dos três primeiros. Usando um código Prolog conciso (apenas 15 linhas!), o autor resolve elegantemente o problema, aproveitando a correspondência de padrões e a bidirecionalidade do Prolog para encontrar todas as possíveis chaves de resposta, determinando finalmente a pontuação do quarto aluno como 6. Uma comparação é feita com uma solução mais longa e menos eficiente. Embora o autor argumente contra o uso de quebra-cabeças para ensino, este exemplo demonstra o potencial de aplicação prática do Prolog.

Leia mais

É hora de parar de construir bancos de dados KV

2025-03-25
É hora de parar de construir bancos de dados KV

O autor critica os bancos de dados Key-Value por serem excessivamente simplistas e carentes de poder expressivo, tornando-os difíceis de usar. Embora populares entre fornecedores de mecanismos de armazenamento, os bancos de dados KV são meramente blocos de construção para modelos de dados razoáveis, obrigando os usuários a construí-los do zero, muitas vezes com resultados subótimos. O autor propõe um meio-termo: um banco de dados embutido com registros tipados, separando os esquemas lógicos e físicos, mas escrevendo consultas contra o esquema físico. Isso evita planejadores de consultas complexos, suporta alterações de esquema assíncronas e troca de layouts. Essa abordagem equilibra a independência de dados com a simplicidade necessária para sistemas embutidos, oferecendo uma alternativa convincente tanto para lojas KV simples quanto para as complexidades de bancos de dados relacionais completos.

Leia mais
Desenvolvimento

Desenvolvimento Priorizando a Verificação: Além do Desenvolvimento Guiado por Testes

2025-03-18
Desenvolvimento Priorizando a Verificação: Além do Desenvolvimento Guiado por Testes

Este artigo explora o Desenvolvimento Priorizando a Verificação (VFD), um paradigma que enfatiza o estabelecimento de mecanismos de verificação antes de escrever código. Isso pode envolver a escrita de testes, a definição de invariantes de tipo, a adição de contratos ou outros métodos. O VFD difere do Desenvolvimento Guiado por Testes (TDD), que é um caso específico do VFD e se concentra no uso de testes para direcionar o design do código. As vantagens do VFD incluem a redução da probabilidade de pular a verificação, a detecção precoce de erros e a melhoria da qualidade do código. No entanto, o VFD também apresenta desvantagens: pode retardar o desenvolvimento, dificultar a codificação exploratória e os métodos de verificação podem influenciar o design do código. O autor argumenta que o VFD, como uma técnica e não um paradigma, é mais flexível e integra-se facilmente com outras abordagens.

Leia mais
Desenvolvimento verificação prioritária

Cinco Tipos de Não-Determinismo: Insights Práticos de Métodos Formais

2025-02-20
Cinco Tipos de Não-Determinismo: Insights Práticos de Métodos Formais

Este artigo explora cinco tipos de não-determinismo em modelagem de sistemas: aleatoriedade verdadeira, concorrência, entrada do usuário, forças externas e abstração. O autor explica cada tipo claramente com exemplos práticos. A aleatoriedade verdadeira, embora frequentemente simulada com geradores de números pseudoaleatórios, é geralmente tratada como uma escolha não-determinista na modelagem. A concorrência é uma fonte principal de não-determinismo, exigindo tratamento especial devido à explosão do espaço de estados. A entrada do usuário e as forças externas são tratadas como influências externas não-deterministas. Fundamentalmente, a abstração simplifica processos determinísticos complexos em escolhas não-deterministas, simplificando modelos e aumentando a sensibilidade a erros potenciais. Isso fornece insights valiosos para entender o não-determinismo e suas aplicações no desenvolvimento de software.

Leia mais
Desenvolvimento modelagem de software

Eficiência vs. Escalabilidade Horizontal: Um Dilema Necessário?

2025-02-12
Eficiência vs. Escalabilidade Horizontal: Um Dilema Necessário?

Este artigo explora a tensão entre eficiência de software e escalabilidade horizontal. O autor argumenta que softwares otimizados para escalabilidade geralmente têm um desempenho ruim em ambientes de máquina única, e vice-versa. Isso decorre da Lei de Amdahl, sobrecarga de coordenação e limitações em recursos compartilhados. Algoritmos eficientes geralmente dependem de suposições sobre o sistema e o problema que podem não ser mais verdadeiras quando escalados horizontalmente. O autor também discute fatores culturais e tipos de tarefas que influenciam as escolhas, ilustrando com exemplos como o banco de dados Tigerbeetle e o GIL do CPython. Em última análise, uma compreensão profunda do problema e do ambiente é crucial para alcançar alta eficiência e escalabilidade.

Leia mais
Desenvolvimento

A Curiosa História das Âncoras de Expressões Regulares: Por que `$` e `^`?

2025-01-21
A Curiosa História das Âncoras de Expressões Regulares: Por que `$` e `^`?

Este artigo investiga as origens históricas do uso de `$` e `^` como âncoras de linha em expressões regulares. Remontando ao editor de texto QED, `$` inicialmente representava o fim do buffer, posteriormente adaptado por Ken Thompson para significar o fim de uma linha em regexes. A escolha de `^` provavelmente se deveu ao conjunto de caracteres limitado da máquina de escrever Teletype Model 35, com `^` já presente no ASCII-67. Não foi uma escolha de design brilhante, mas sim uma consequência das limitações de hardware e conjunto de caracteres daquela época, tornando-se uma convenção em regexes.

Leia mais
Desenvolvimento

Modelagem Matemática Revela o Quão Ruim é o Jogo de Dreidel

2024-12-18
Modelagem Matemática Revela o Quão Ruim é o Jogo de Dreidel

No ano passado, o autor usou a linguagem de modelagem probabilística PRISM para modelar o jogo tradicional de férias Dreidel, provando sua falta de diversão. Este ano, ele refinou o modelo para simular todo o jogo até sua conclusão. O novo modelo corrige a falha anterior de simular apenas a eliminação do primeiro jogador e melhora a lógica de cálculo para apostas e eliminação de jogadores. Por meio de simulação de modelo, o autor descobriu que, em média, um jogo de quatro jogadores leva 760 rodadas para terminar, e o mais longo pode até exceder 6 horas. Isso prova completamente que o jogo Dreidel é longo, tedioso e frustrante.

Leia mais