Entrevista sobre tópicos atuais com Donald Knuth

Donald Knuth, o grande nome da computação mundial, cedeu anteontem uma interessante entrevista:
http://www.informit.com/articles/article.aspx?p=1193856

Knuth tem algumas opiniões controversas e polêmicas sobre unit testing, extreme programming, open source e programação concorrente.

O entrevistador sabe atacar as questões de maneira elegante, mas faz algumas ótimas perguntas, tais como: “Se você não usa unit test, como garante que a sua máquina MMIX funciona corretamente?”. Algumas respostas de Knuth indicam que a maior parte do tempo ele programa sozinho, isso sem dúvida impacta em muitas de suas opiniões. Algumas dificuldades que nós encontramos no dia a dia certamente não são vividas por um programador solitário.

Vale a pena a leitura!

muito interessante a entrevista…

http://fragmental.tw/2008/04/27/2dollars56cents/

Gostei do artigo e com certeza a opinião dele é importantíssima, por mais polêmica que seja.

O que eu acho estranho é o texto comentado no blog do Phillip, que diz que teste unitário é bom vc fazer, afinal você não é Don Knuth.

Se por acaso o Knuth tivesse dito: “adoro testes unitários” , o discurso seria: " tão vendo? o cara que é um gênio usa, pq vc não usa?".

Ou estou enganado?

[quote=boaglio]… O que eu acho estranho é o texto comentado no blog do Phillip, que diz que teste unitário é bom vc fazer, afinal você não é Don Knuth.

Se por acaso o Knuth tivesse dito: “adoro testes unitários” , o discurso seria: " tão vendo? o cara que é um gênio usa, pq vc não usa?".

Ou estou enganado?[/quote]

Acredito que vc não esteja enganado não. Quotes são como estatisticas, as pessoas interpretam como quiserem. Só abrir qualquer jornal por aí.

Mas eu levo mais a sério a primeira interpretação do que a segunda. Imagina se gente como Don Knuth e Martin Fowler pulassem juntos do 20o andar…

Não entendi sua dúvida. Sim, eu citaria, assim como envie pelo twitter a parte que ele fala que só confia no Linux para fazer seu trabalho e quem não concorda deveria postar seus argumentos. Como o caso é contrário quem posto argumentos foi quem defende testes unitários.

[quote=pcalcado]

Não entendi sua dúvida. Sim, eu citaria, assim como envie pelo twitter a parte que ele fala que só confia no Linux para fazer seu trabalho e quem não concorda deveria postar seus argumentos. Como o caso é contrário quem posto argumentos foi quem defende testes unitários.[/quote]

Eu acho que o dreamspeaker já respondeu, cada um interpreta a coisa a seu favor mesmo.

Eu sou favorável ao uso de testes unitários e o Knuth claramente não é.

Criar uma lógica que leve o fato dele não gostar de testes unitários à conclusão de que você deva usá-los ficou meio estranho pra mim.

Como voce inferiu essa logica? O meu ponto eh: Don Knuth nao precisa de testes unitario. Voce nao eh Don Knuth .

Alias, cade os Knuth facts?

Eu acredito que ocorreu uma das duas possíveis opções:

1 :arrow: Knuth não gosta de testes unitários
2 :arrow: Knuth gosta de testes unitários

Respostas dos defensores de testes:

1 :arrow: Knuth não precisa de testes unitários. Você não é o Knuth .
2 :arrow: se o Knuth que é um gênio usa, por que vc não usaria?

Exato, e elas sao complementares.

Ele nao usa porque nao precisa. Se ainda nao precisando ele usasse seria mais um ponto positivo.

Eu poderia argumentar pela 1000 vez que teste unitário não é essa coisa maravilhosa, fundamental, o ar que vc respira, etc e tal, mas isso só criaria mais um flame cansativo e desnecessário. Quem quiser usar testes unitários em tudo, até em getters and setters, use e seja feliz. Se isso te deixa produtivo e feliz então isso é MUITO importante para você.

Um recém-contratado no seu primeiro dia de emprego fez as seguintes perguntas para o chefe:

  1. Qual o sistema operacional que devo usar?
    R: Use o que te deixa mais feliz e produtivo.

  2. Qual é a IDE que time usa?
    R: Use a que vc quiser e a que te deixa mais produtivo.

  3. Qual é a política de testes unitários?
    R: Faça o que vc quiser, só não entregue código com bugs.

  4. Devo usar Office ou OpenOffice?
    R: Vc já terminou o seu projeto? Que tal parar de fazer perguntas inúteis e começar a trabalhar?

Minha opinião é que essa discussão é improdutiva.

No mundo Java acho que tirando uma ou outra classe de infra-estrutura (BufferUtils, ByteUtils, etc.), o restante não faz muito sentido de ser testado via testes unitários. Há diversas outras maneiras mais prazerosas e não automatizadas de fazer a coisa. Sem contar que o melhor é sempre previnir do que remediar. Se vc programa de qualquer jeito e se vc não revisa o seu código pelo menos 5 vezes a cada etapa, então testes unitários podem te ajudar bastante. Programe para não cometer nenhum erro, ou o mínimo de erros possíveis. E quando cometer um erro (sim eles acontecem), descubra e corrija-o rapidamente.

No mundo Ruby me parece que teste unitário cai bem, pois como já dizia o homem aranha “with great power comes great responsability”.

Java não é uma linguagem poderosa. Com java é difícil vc dar um tiro no próprio pé. Tem que fazer um grande esforço.

Já com Ruby isso é plenamente possível, seja por um conhecimento mediano da linguagem, desatenção ou estupidez mesmo.

Teste unitário vai depender do time, do projeto, da linguagem, do estilo e do preço do chá de camomila. Quem quiser usar use-o e seja feliz.

PS: Eu estou para começar a desenvolver alguns testes unitários para o meu último projeto em Ruby. Só não sei ainda se farei testes unitários ou funcionais, mas eu realmente gostaria de ter alguma coisa automatizada.

Agora se quiserem criar um flame, dizendo que quem não respira testes unitários não é profissional, blah, blah, blah, tudo bem. Só que dessa vez eu não vou participar, pois tenho andado realmente muito ocupado. Espero que apareça outra figura querendo argumentar a favor desse meu ponto de vista. Último caso chamem o Knuth.

Knuth nao trabalha em time. Escreveu o Tex e o SGB praticamente sozinho. O cara é um pistoleiro :).

Mas sobre a sua opiniao de que unit test nao é essencial, todos ja sabemos. A minha continua sendo de que é. Nada de flame, cada um com sua opiniao.

Se voce ja nao comecou com teste unitarios, vai ver que eh SUPER dificil colocar os testes unitarios depois… porque a chance eh grande do codigo ja estar altamente acoplado, o que dificuldade testar a “unidade”, ja que a unidade passou a ser varias classes, em vez de uma unica, o que forca voce a ir para testes funcionais, em vez de testes unitarios. Esse caminho é natural. Testes unitarios sem TDD fica bem dificil de aplicar mesmo.

[quote=Paulo Silveira][quote=saoj]
Teste unitário vai depender do time, do projeto, da linguagem, do estilo e do preço do chá de camomila. Quem quiser usar use-o e seja feliz.

[/quote]

Knuth nao trabalha em time. Escreveu o Tex e o SGB praticamente sozinho. O cara é um pistoleiro :).

Mas sobre a sua opiniao de que unit test nao é essencial, todos ja sabemos. A minha continua sendo de que é. Nada de flame, cada um com sua opiniao.

Se voce ja nao comecou com teste unitarios, vai ver que eh SUPER dificil colocar os testes unitarios depois… porque a chance eh grande do codigo ja estar altamente acoplado, o que dificuldade testar a “unidade”, ja que a unidade passou a ser varias classes, em vez de uma unica, o que forca voce a ir para testes funcionais, em vez de testes unitarios. Esse caminho é natural. Testes unitarios sem TDD fica bem dificil de aplicar mesmo.
[/quote]

Paulo, o problema do Knuth é que algumas práticas simplesmente se solidificam na cabeça das pessoas depois de décadas e simplesmente não tem como mudá-las. Testes unitários e/ou automatizados é uma coisa que foi criada em meados da década de 80. Não existia um PunchCardUnit quando o Don Knuth era jovem.

Porém hoje ninguém mais programa da forma dele, principalmente pq as ferramentas são completamente diferentes, como linguagens, runtime, poder computacional e tudo mais.

Porém acho errado pensar que só pq o cara é pistoleiro e programa sózinho ele não precisa usar testes automatizados. Uso bastante nos meus pet projects pq eles são uma forma fácil de medir meu progresso. Não sou fã de fica no papel de QA guy daquilo que faço.

Hoje a única justificativa que eu tenho para aceitar programadores profissionais que não escrevem testes é síndrome de estocolmo, pq existe evidencia não estatística de que é uma mais estritamente superior de se trabalhar. Código sem teste é feito documentação impressa, só vale na hora, depois é ladeira abaixo.

Uma pessoa tem que ser muito ingênua, ou nunca ter trabalhado em times grandes (onde grande são uns 5 programando), para achar que é possivel manter a qualidade original do software ao longo do tempo fazendo revisão localizada de código e sendo cowboy-coder.

Na minha experiência, com times grandes ou projetos longos, a qualidade ao longo do tempo é estritamente um fator da quantidade de testes automatizados. Código sem testes irá quebrar pois nenhuma empresa consegue ir aumentando o time de QA para o mesmo projeto ao longo do tempo indefinidamente.

Não defendo escrever testes para um one-shot shell script, mas para qualquer coisa significativa é indispensável.

Oi louds, voce me concluiu mal… nao sou a favor tambem. To dando so uma possivel desculpa pela qual o Knuth ainda nao percebeu a real necessidade de unit tests. Nao estou de maneira alguma aprovando a opiniao dele!!! Desaprovo essa e a ideia de que multi core em casa nao tem utilidade.

O dia em que as pessoas começarem a entender que TDD e unit tests menos a ver com testes em si e mais a ver com design, boa parte das threads do GUJ vão perder sentido :stuck_out_tongue:

[quote=Daniel Quirino Oliveira]O dia em que as pessoas começarem a entender que TDD e unit tests menos a ver com testes em si e mais a ver com design, boa parte das threads do GUJ vão perder sentido :stuck_out_tongue:

[/quote]

Pois é. Varios momentos eu leio codigo e penso “se tivesse unit test, nao estaria abrindo esse FileInputStream aqui no meio dessa classe”. TDD leva ao desacoplamento.

AIMEUDEUSOKNUTHNAOUSAUNITTESTSEAGORAOQUEEUFAÇO?!?!?!??

:?

O dia que eu tiver trabalhando isolado, numa plataforma que eu inventei, num sistema que eh praticamente 99% teoria computacional, eu paro de escrever unit tests :wink:

O dia que eu puder mandar cheques de valores exponenciamente crescentes para cada bug encontrado no meu sistema também paro de escrever testes.

Por exemplo, se eu começar com um cheque 2 reais e aparecerem uns 39 tópicos sobre bugs no fórum do meu projeto de fundo de quintal, vou torrar 549.755.813.888 no último deles. Provavelmente nem vendendo todos jatinhos do meu chefe vou conseguir pagar esse valor se compensarem.

Inspirado nessa thread: http://gc.blog.br/2008/04/29/programadores-de-schrodinger/

Olá

Um comentário meio nada a ver com o assunto mas que tem a ver como minha relação com o Dr Knuth.

Confesso que nas primeiras leituras que fiz do Knuth tive imensa dificuldade para entender. Naquela época não tinha nada pronto. Se você quisesse um sort, tinha que escrever o seu na raça. Vivíamos na época em que busca binária era novidade e tabelas hash prometiam ser a última Coca Cola do deserto. Fui atrás dos 3 livros do Knuth como a solução dos meus problemas. Como eram livros muito caros para importar, ia até a USP para estudá-los. Vários capítulos me exigiram ler mais de uma vez.

Se eu tivesse estudado o Knuth depois de algum outro livro mais básico ou se tivesse tido um professor para me explicar algumas dúvidas por falta de base teórica, talvez pudesse ter lido em muito menos tempo.

E ainda achava muito chato de ler os algorítmos escritos naquele assembler maluco.

Confesso que não sei de nenhuma atividade não acadêmica do Dr Knuth. Acho que no fundo ele não passa de um nerd que envelheceu.

Abaixo um dos cheques de US$ 2.56 (equivalente a 256 pennies em 1 dolar hexadecimal) que ele deu para os que acharam um erro tipográfico em seus livros.

Ele fez muitos cheques que somavam até março de 2005 um total de US$ 20 mil, mas poucos deles foram depositados porque quem achou algum erro preferiu guardar o cheque como troféu. Como alguém assinou no Slashdot:

  • Intelligence: Finding an error in a Knuth text.
  • Stupidity: Cashing that $2.56 check you got.

[]s
Luca (velho, mas fã de testes unitários)