O Programador Fita Adesiva

16/04/2013

Esta é a tradução para The Duct Tape Programmer de Joel Spolsky
Jamie Zawinski é o que eu chamaria de um programador fita adesiva. E eu digo isso com uma grande dose de respeito. Ele é o tipo de programador que está trabalhando duro para construir o futuro, e fazendo coisas úteis, de modo que as pessoas possam fazer coisas. Ele é o cara que você quer em sua equipe de montagem de carrinhos de rolimã, porque ele tem as duas ferramentas favoritas: fita adesiva e WD-40. E ele vai utilizá-las de forma elegante, mesmo quando seu carrinho estiver rolando ladeira abaixo a uma milha por minuto. Isso vai acontecer enquanto outros programadores ainda estão na linha de partida discutindo sobre usar titânio ou algum tipo de composto-espacial do futuro que a Boeing está usando no 787 Dreamliner.
Quando você estiver pronto, você pode ter um carrinho confuso, mas ele vai ser como uma mosca do inferno.
Acabei de ler uma entrevista com Jamie no livro Coders at Work, de Peter Seibel. Va comprá-lo agora. É um conjunto fantástico de entrevistas com alguns grandes programadores, incluindo Peter Norvig, Steele Guy, e Knuth Donald. Este livro é tão interessante que me fizeram ficar 60 minutos na esteira ontem em vez dos 30 habituais, porque eu não conseguia parar de ler. Como eu disse, vá comprá-lo.
Vá! Eu irei esperar.
Aqui está o porque eu gosto de programadores fita adesiva. Às vezes, você está em uma equipe, e você está ocupado moendo códigos, e alguém vem até a sua mesa, caneca de café na mão, e começa a pirar sobre como seria se você usasse compartimentos COM multi-threaded, que sua aplicação seria 34% melhor, e que não é tão difícil, porque ele escreveu um monte de templates, e tudo que você tem a fazer é herança múltipla de 17 de seus templates, cada um tendo uma média de quatro argumentos, e você quase não tem sequer que escrever o corpo da função. É apenas uma lista gigantesca de herança múltipla de classes diferentes e hei, presto, compartimentos COM multi-threaded. E seus olhos estão viajando, e você não tem nenhuma idéia do que este maldito retardado está falando, mas ele simplesmente não vai embora, e mesmo que ele vá embora, ele só vai voltar pra mesa para escrever mais sobre suas inteligentes aulas todas de herança múltipla a partir de templates, sem uma única implementação completa, que vai falhar loucamente e você será chamado à noite para voltar e tentar descobrir isso, porque ele vai estar em alguma reunião maldita sobre "Design Patterns".
E o programador fita adesiva não tem medo de dizer, "a herança múltipla é uma merda. Pare com isso. Basta parar."
Você vê, todo mundo está com muito medo de parecer estúpido, porque eles simplesmente não podem manter fatos suficientes em suas cabeças de uma vez para fazer a herança múltipla, ou templates, ou COM, ou multithreading, ou qualquer outro tipo de coisa. Então eles timidamente vão junto com qualquer programação pirada da moda que desceu dos astronautas da arquitetura que falam em conferências e escreveram livros e artigos e são muito mais espertos do que nós que eles não percebem que as coisas que eles estão promovendo são muito difíceis para nós.
Aqui está o que Zawinski diz sobre o Netscape: "Foram decisões como não usar C++ e não usar threads que nos fizeram entregar o produto no prazo."
Mais tarde, ele escreveu um cliente de e-mail na Netscape, mas a equipe responsável por mostrar a mensagem nunca entregou seu componente. "Não foi apenas um grande retângulo branco no meio da janela onde podemos exibir somente texto simples. Eles estavam sendo extremamente acadêmicos sobre seu projeto. Eles estavam tentando aproximá-lo do lado DOM/DTD das coisas. 'Oh, bem, o que nós precisamos fazer é adicionar outra camada de abstração aqui, e tem um delegado para este delegado para este delegado. E, eventualmente, um personagem vai aparecer na tela.'"
Peter perguntou Zawinski "Overengineering parece ser uma implicância de vocês."
"Sim.." ele diz, "No final do dia, entregue a porra da coisa! É ótimo reescrever o código e torná-lo mais limpo e pela terceira vez, vai ficar realmente bonito. Mas esse não é o ponto, você não está aqui para escrever código; você está aqui para entregar produtos".
Meu herói.
Zawinski não fez muitos testes unitários. Eles "soam bem em princípio. Dado um ritmo de desenvolvimento lento, que é certamente o caminho a percorrer. Mas quando você está olhando, 'Nós temos que ir de zero a feito em seis semanas' bem, eu não posso fazer isso, a menos que eu corte alguma coisa. E o que eu vou cortar são as coisas que não são absolutamente críticas. E testes unitários não são críticos. Se não há nenhum teste unitário, o cliente não vai reclamar sobre isso."
Lembre-se, antes de surtar, que este é Zawinski quando ele estava na Netscape mudando o mundo. Eles achavam que só tinham alguns meses antes que alguém viesse e comessem o seus almoços. Um monte de código importante é assim.
Programadores fita adesiva são pragmáticos. Zawinski popularizando preceito Richard Gabriel do quanto pior, melhor. Uma solução 50% boa que as pessoas realmente tenham, resolve problemas mais e sobrevive por mais tempo do que uma solução de 99% de que ninguém tem porque é em seu laboratório onde você está infinitamente polindo a maldita coisa. Entregabilidade é uma característica. Uma característica muito importante. Seu produto deve te-la.
Um princípio que programadores fita adesiva compreendem bem é que qualquer tipo de técnica de codificação que é ainda um pouco complicada vai condenar seu projeto. Programadores fita adesiva tendem a evitar o C++, templates, herança múltipla, multithreading, COM, CORBA, e uma série de outras tecnologias que são todas totalmente razoáveis, quando você conhece-as muito bem, mas são, honestamente, um pouco difíceis demais para o cérebro humano.
Claro, não há nada oficialmente de errado em tentar escrever código multithread em C++ no Windows usando COM. Mas é propenso a erros desastrosos, o tipo de erros que só acontecem em cenários de tempo muito específicos, porque os nossos cérebros não são, honestamente, bom o suficiente para escrever este tipo de código. Programadores medíocres são, francamente, defensivos sobre isso, e eles não querem admitir que eles não são capazes de escrever esse código super-complicado, por isso eles deixam os valentões em sua equipe trabalhar embora com alguma arquitetura modelo esquecido em C++, porque caso contrário, teria que admitir que eles simplesmente não se sentem suficientemente inteligente para usar o que seria uma técnica de programação perfeitamente boa para Spock. Programadores fita adesiva não dão a mínima para o que você pensa sobre eles. Eles furam para a simples e básica e fácil maneira de usar ferramentas e utilizam os recursos intelectuais extras que estas ferramentas deixam para escrever mais recursos úteis para seus clientes.
Uma coisa que você tem que ser cuidadoso sobre, porém, é que os programadores de fita adesiva do mundo do software são o equivalente à de meninos bonitos ... aqueles homens de tirar o fôlego de boa aparência jovem que podem rolar para fora da cama, sem se barbear, sem pentear o cabelo, e sem escovar os dentes, e entrar no metrô em roupas sujas de ontem e estarão bonitos, porque é isso que eles são. Você, meu amigo, não pode sair em público sem pentear o seu cabelo. Ele vai assustar as crianças. Porque você justamente não tem essa graça. Programadores fita adesiva tem que ter muito talento para retirar este pedaço. Eles têm que ser bons programadores suficientes para entregar o código, e vamos perdoá-los se eles nunca escreverem um teste unitário, ou se eles derem XOR nos ponteiros "próximo" e "anterior" de sua lista ligada em um DWORD único para salvar 32 bits, porque eles são suficientemente bonitos e suficientemente inteligentes, para retirá-lo.
postado por dgv @ 17:19