Este artigo foi traduzido por máquina.

Não me deixe começar a falar

A broca a vapor

David Platt

David Platt
John Henry disse para o Capitão, "um homem não é nada mais que um homem Mas antes de deixar sua broca de vapor me bater, eu vou morrer com um martelo na minha mão."

— "The Ballad of John Henry," americano tradicional

John Henry ocupa um lugar poderoso no folclore americano (bit.ly/3HqIMd). Alguns dizem que ele é só um conto, mas outros insistem que ele é baseado em um homem de verdade. John Henry "aço dirigiu" no final de 1800, batendo um martelo sobre uma haste de broca de aço, chato buracos na rocha para jateamento de túneis da estrada de ferro. Quando uma broca vapor ameaçou o trabalho dele, John Henry é desafiado para um duelo — e ganhou. A baladaJohn Henry levou 16 pés e a broca de vapor só feita nove anos", diz. Mas não importa qual versão da música que você ouve, sempre acaba mal: "Ele trabalhou tanto, que ele quebrou o seu pobre coração, assim ele colocou seu martelo e ele morreu."

O que um cara tão hardware por excelência tem a ver com o software, eu ouço você me perguntando. Eu tinha meu próprio momento do Henry de John na semana passada, ensinando tópicos na minha classe de "Programming Microsoft.NET" na extensão de Harvard. Eu comecei meus alunos com fios crus, mostrou-lhes o pool de threads, depois trabalhou em problemas de sincronização e afinidade de segmento design. Concluiu com um dever brutal que tentados-los usar o pool de threads, mas impostas exigências que não permitem isso. (Aluno: "Platt, você é um bastardo sádico". Me: "Sim, qual o seu ponto?")

Na próxima semana, mostrei-lhes a tarefa paralela TPL (biblioteca), com sua Parallel. for e Parallel. ForEach constrói. Eu então disse-lhes que eu mesmo não confiar nele. Era muito novo. E não me salvei bastante tempo e esforço para compensar a perda de controle e transparência. Então eu percebi que eu dinossauro eu me tornaria.

Cada avanço em ciência da computação tem gerado uma nova camada de abstração. E com cada nível mais alto de abstração, os programadores que strove poderosamente a dominar o nível inferior ficar com raiva. Agora, qualquer idiota pode fazer o que prenderam suas bundas para aprender. Não é justo!

Por exemplo, quando essas coisinhas de disco magnético saiu primeiro, programadores tinham que comandar o hardware diretamente — cabeça 3, mover faixa 19, esperar por sector 247 volta e depois lê-lo. Então algum esperto descobriu como esconder o hardware por trás de uma camada de abstração de software que forneceu uma série logicamente contígua de bytes chamado de arquivo.

"É muito ineficiente", gritou o Fögi. "Crianças estes dias não tenham respeito por recursos. Acho que de todos os sectores sendo desperdiçados por, o que você chamá-los, diretórios?"

"Bando de velhos peidos," zombou das crianças. "Você ainda programa com apenas uns e zeros?"

Quando eu saltar da arrivista de cota? Eu não tenho nenhum problema com o pool de segmentos. Eu mostrar aos alunos como ele monitora o uso da CPU de seus segmentos, atribuindo mais tópicos para o trabalho, quando alguns deles bloqueiam. Mas pelo menos lá eu posso ver os threads, em oposição a TPL, onde eles estão escondidos.

Sempre achei que não há nenhum substituto para saber o que está acontecendo sob o capô. Abstrações sempre vazam. Discos fragmentados, espalhando arquivos sobre clusters inconvenientes que requerem movimento desperdício de metal. Os alunos que fizeram o melhor em meus anos de classe MFC atrás foram os que atendido o meu conselho para estudar o livro clássico de Charles Petzold na API do Windows. Sempre que eu resolver o problema de segmentação-relacionados do cliente, sempre — e digo sempre, sem exceção — decorre de uma incompreensão fundamental de que um thread é e faz.

Então vá em frente, use o TPL Parallel. for e Parallel. ForEach. Mas se você usá-los como uma muleta sem entender como eles realmente funcionam, é como usar um tubo interno para remar no meio do porto de Boston sem saber nadar. Você vai estar gritando para a guarda costeira, para caras como eu vir salvar você. Felizmente, estamos com a bola, porque sabemos que temos que ser. Um geek não é nada mas um geek. E antes de deixar seu TPL me bater, eu vou morrer com um identificador de segmento na minha mão.

David S. Platt ensina programação .net na escola de extensão da Universidade de Harvard e em empresas em todo o mundo. É autor de 11 livros de programação, incluindo o "Por que Software Sucks" (Addison-Wesley Professional, 2006) e "Introducing Microsoft.NET" (Microsoft Press, 2002). Microsoft nomeou uma legenda de Software em 2002. Ele se pergunta se ele deve fita para baixo dois dos dedos de sua filha para que ela aprende como contar octal. Você pode contatá-lo em rollthunder.com.