O senhor está lendo o blog de programação mais perigoso do mundo

O senhor já notou que estão cheios de desinformação e mentiras? Em particular, estou me referindo a este blog. O que o senhor está lendo agora. Por exemplo, postagem de ontem foi tão ruim que é prova conclusiva de que eu pulei o tubarão.

Novamente.

Aparentemente, de acordo com um comentarista do Reddit, as informações apresentadas aqui são absolutamente perigosas:

Jeff Atwood sempre teve a distinção de ter o blog de programação mais perigoso, no sentido de que alguns desenvolvedores jovens ou aspirantes a desenvolvedores podem realmente ouvir alguns de seus “conselhos”, mas agora ele conseguiu, de alguma forma, conquistar a façanha de ter também o blog de programação mais insano.

Para ser mais franco, Jeff: o que o senhor acabou de escrever é uma das coisas mais insanamente idiotas que já ouvi. Em nenhum momento de sua resposta incoerente e divagante o senhor chegou perto de algo que pudesse ser considerado um pensamento racional. Todos nesta sala estão agora mais burros por terem lido essa postagem. Não lhe dou nenhum ponto e que Deus tenha misericórdia de sua alma.

Gostei do Billy Madison mas não sei se meu blog já recebeu essa distinção em particular. Se o este é o conteúdo mais perigoso que os desenvolvedores jovens e inexperientes já leram, então, bem, eu teria que questionar seriamente se eles já usaram ou não essa coisa que chamamos de “world wide web”.

Permita-me ilustrar com um exemplo.

Hoje me deparei com o esta entrada de blog de Mads Kristensen. Nele, Mads explica que Deflacionar é mais rápido do que o GZip.

Primeiro, testei o GZipStream e depois o DeflateStream. Eu esperava uma pequena diferença porque os dois métodos de compressão são diferentes, mas o resultado me surpreendeu. Medi que o DeflateStream é 41% mais rápido que o GZip. Essa é uma diferença muito grande. Com esse conhecimento, terei de alterar o módulo de compactação HTTP para escolher Deflate em vez de GZip.

Esse foi um resultado surpreendente para mim, pois os dois algoritmos de compactação estão intimamente relacionados. Por outro lado, usamos muito o GZip para armazenar em cache as cadeias de caracteres de saída de fragmentos HTML no servidor Stack Overflow, como explica Scott Hanselman. Se o Deflate for realmente muito mais rápido, precisamos mudar para ele!

Mas, como qualquer usuário veterano da Internet, nunca tomo o que leio em um blog – ou em qualquer outro site da Internet – como fato. Em vez disso, é o germe de uma ideia intrigante, um chamado à ação. Abri meu IDE e construí um pequeno conjunto de testes para testar por mim mesmo: é Deflate mais rápido do que o GZip?

public static class StopwatchExtensions
{
public static long Time(this Stopwatch sw, Action action, int iterations)
{
sw.Reset();
sw.Start();
for (int i = 0; i < iterations; i++) { action(); }
sw.Stop();
return sw.ElapsedMilliseconds;
}
}
class Program
{
static void Main(string[] args)
{
string s = File.ReadAllText(@"c:test.html");
byte[] b;
var sw = new Stopwatch();
b = CompressGzip(s);
Console.WriteLine("gzip size: " + b.Length);
Console.WriteLine(sw.Time(() => CompressGzip(s), 1000));
Console.WriteLine(sw.Time(() => DecompressGzip(b), 1000));
b = CompressDeflate(s);
Console.WriteLine("deflate size: " + b.Length);
Console.WriteLine(sw.Time(() => CompressDeflate(s), 1000));
Console.WriteLine(sw.Time(() => DecompressDeflate(b), 1000));
}
}

Os resultados foram surpreendentes: em minha caixa, GZip é tão rápido quanto o Deflate. Para cadeias de caracteres gigantes, para cadeias de caracteres médias, para cadeias de caracteres pequenas. Em todas as combinações de teste possíveis que eu possa imaginar, o Deflate não chega nem perto de ser 40% mais rápido.

gzip size: 3125
242
171
deflate size: 3107
225
149

Isso não é exatamente o que a entrada do blog de Mads me diz que deveria acontecer. O senhor acha que Mads é um idiota por publicar isso? Bem, não. Eu não acho.

  • O post original do blog foi publicado no final de 2006; desde então, novas versões do .NET framework foram lançadas e o hardware ficou mais rápido. Talvez tenha havido alguma mudança significativa em ambos os casos que produziu esse resultado diferente.
  • Meu teste é um pouco diferente do teste de Mads. Uso um arquivo HTML aleatório como alvo de compactação; não posso dizer exatamente o que ele está compactando em seu benchmark. Também testei com strings pequenas, médias e grandes. Os testes são semelhantes, mas não são os mesmos.

Esse é o tipo de desinformação perigosa pela qual os blogs são difamados? Eu deveria estar com raiva do Mads por publicar isso? De forma alguma. Aprendi um pouco mais sobre o Deflate e o GZip. Isso me deu a oportunidade de refatorar um pouco meu código de compactação. Eu até aprendi a fazer benchmark usando a sintaxe lambda. Se eu não tivesse lido essa postagem, se ela não tivesse me dado o impulso de uma ideia para refletir, eu não teria me dado ao trabalho.

Sou um programador melhor por ter lido essa publicação no blog. Mesmo que, pelo que posso dizer, ele esteja oferecendo conselhos imprecisos.

Atualização: Fiquei um pouco mais curioso sobre isso, então fiz mais alguns testes em máquinas diferentes. Aqui estão os resultados, em milissegundos, de mil execuções, cada uma usando o HTML da página inicial do Google como alvo (tem cerca de 7 Kb):

Gráfico gzip vs. deflate

Quanto mais rápido é Deflate do que GZip?

Core 2 Duo
3,5 Ghz
Core 2 Quad
1,86 Ghz
Athlon X2
2.1 Ghz
Comprimir 8% mais rápido 8% mais rápido 50% mais rápido
Descompactar 15% mais rápido 17% mais rápido 37% mais rápido

Aí estão os 40% de que Mads estava falando. Isso é um pouco chocante quando o senhor considera que o GZip é simplesmente Deflate mais uma soma de verificação e cabeçalho/rodapé! (O senhor pode baixar o código-fonte para esse teste e tente você mesmo).

Portanto, meu argumento – e eu tenho um – é o seguinte: quando o senhor diz que as informações apresentadas em um blog são “perigosas”, está insinuando que o público é burro ou inepto demais para ler criticamente.

Eu, por exemplo, tenho muito respeito pelo meu público para jamais fazer isso. Sinto-me sempre honrado com a qualidade dos comentários e das discussões sobre os artigos do blog que publico. Na verdade, eu diria que essa foi a coisa mais surpreendente que aprendi em meus mais de quatro anos de blog: o melhor conteúdo sempre começa onde a postagem do blog termina. Meu público é muito, muito mais inteligente do que eu jamais serei.

Pensando bem, talvez o que eu promova neste blog seja o que o senhor seja perigoso: pensando por si mesmo.

Mas estou bastante confiante de que o senhor pode lidar com isso.