Postagem em destaque

A incrível velocidade do Go

Imagem
Um dos motivos que gosto do Go (a linguagem de programação, não o jogo), é que ele é extremamente rápido. E não estou falando de utilizar goroutines pois aí é covardia. Estamos migrando um sistema de Coldfusion para Go e PHP e uma das rotinas insere um registro no banco de dados no início e outra no fim do processo. Pense como se fosse um log, mas um log específico para essa rotina. Dessa forma: 2023-05-18 17:45:03. 687     ... [processaImagem] Incorporando imagem 2023-05-18 17:45:03. 688     ... [processaImagem] Imagem incorporada Entre o inicio e o final do processamento levou 1ms. Até aí, tudo bem, se não fosse o fato dessa tabela ter o campo timestamp como parte da chave primária. Se reparar, o tempo é definido em milissegundos. Com o Coldfusion esse processo dura cerca de 20ms. Simplesmente migrando para Go, o tempo caiu muito, para menos de 1ms e assim, começou a dar erro de chave duplicada. A solução? Depende, sempre depende. No nosso contexto, a mais simples foi feita, pois nã

Erros, falhas e bugs

Lembro que no início dos nos 1990 eu trabalhava com Clipper, que na época era a linguagem da moda. Era uma linguagem muito boa de se trabalhar - tinha uma curva de aprendizagem muito rápida.

Mas quando a empresa adquiriu uma nova versão, uma rotina do sistema de gestão empresarial, mais precisamente, o módulo de cálculo de preço de venda, começou a apresentar problemas. Ele trazia um resultado totalmente errado mas não abortava o sistema.

Demorou alguns dias até percebermos o erro, pois ele ocorria ao executar uma divisão de duas variáveis, algo como 879 / 68. O resultado é 12,92, mas retornava uma resultado totalmente diferente, como 1,5. E antes que alguém pergunte: não tinha nada a ver com o Pentium FDIV Bug.

A primeira vista pode parecer que não, mas nem todos os erros são iguais. Por exemplo, o erro acima, só ocorria em ocasiões muito especiais, e por isso foi (é) difícil de detectar. Agora imagine se ao invés de 12,92 o resultado errado fosse 12,91. Talvez nunca fosse descoberto.

Outro ponto que diferencia os erros é quando a falha interrompe ou não o programa. Quer um exemplo famoso? Veja esse vídeo, quando Bill Gates se deparou com uma BSOD aka Blue Screen Of Death.
O usuário não gosta nem um pouco disso, mas para o analista/programador que recebe essa informação é mais fácil, na maior parte dos casos, resolver o problema do que aquele que o usuário fala: "Quando eu clico no botão enviar, às vezes dá um erro - mas não consegui pegar a mensagem.".

Conforme falei no post Curiosity e suas 2,5 milhões de linhas de código, existem algumas técnicas de programação que podem ser utilizadas para minimizar os problemas, mas infelizmente não existem programas sem bugs. O jeito é aprender a conviver com eles.

Veja também:
Bug no Zoner AntiVirus?
Qualidade dos softwares e SOs
Artigo 6 - Bug do ano 2000


Comentários

Postagens mais visitadas deste blog

Netflix não mostra ícone de streaming

Google Hacking

FTP não funciona no PHP